@@ -0,0 +1,64 @@
|
||||
package acceptance
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"os"
|
||||
"sync"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
type Reporter struct {
|
||||
mu sync.Mutex
|
||||
started time.Time
|
||||
cases []ReportCase
|
||||
}
|
||||
|
||||
type ReportCase struct {
|
||||
Name string `json:"name"`
|
||||
Domain string `json:"domain"`
|
||||
Method string `json:"method"`
|
||||
Path string `json:"path"`
|
||||
Expected string `json:"expected"`
|
||||
}
|
||||
|
||||
type Report struct {
|
||||
RunID string `json:"run_id"`
|
||||
BaseURL string `json:"base_url"`
|
||||
Duration string `json:"duration"`
|
||||
Cases []ReportCase `json:"cases"`
|
||||
}
|
||||
|
||||
var acceptanceReporter = &Reporter{started: time.Now()}
|
||||
|
||||
func recordCase(t *testing.T, domain string, method string, path string, expected string) {
|
||||
t.Helper()
|
||||
acceptanceReporter.mu.Lock()
|
||||
defer acceptanceReporter.mu.Unlock()
|
||||
acceptanceReporter.cases = append(acceptanceReporter.cases, ReportCase{
|
||||
Name: t.Name(),
|
||||
Domain: domain,
|
||||
Method: method,
|
||||
Path: path,
|
||||
Expected: expected,
|
||||
})
|
||||
}
|
||||
|
||||
func writeReport(c Config) error {
|
||||
if c.ReportPath == "" {
|
||||
return nil
|
||||
}
|
||||
acceptanceReporter.mu.Lock()
|
||||
defer acceptanceReporter.mu.Unlock()
|
||||
report := Report{
|
||||
RunID: c.RunID,
|
||||
BaseURL: c.StagingURL,
|
||||
Duration: time.Since(acceptanceReporter.started).String(),
|
||||
Cases: append([]ReportCase(nil), acceptanceReporter.cases...),
|
||||
}
|
||||
out, err := json.MarshalIndent(report, "", " ")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return os.WriteFile(c.ReportPath, out, 0o600)
|
||||
}
|
||||
Reference in New Issue
Block a user