Files
story/internal/safariconformance/conformance_test.go
T

78 lines
3.2 KiB
Go

package safariconformance
import (
"encoding/json"
"strings"
"testing"
"time"
)
func TestRealSafariCompleteMatrixPasses(t *testing.T) {
t.Parallel()
capture := safariFixture("MACOS_SAFARI")
report := Evaluate(capture, capture.CandidateVersion, capture.BuildDigest, time.Now())
if report.Result != "PASS" || report.EvidenceScope != "REAL_SAFARI" || report.ExternalValidationRequired || report.ResultCount != 24 {
t.Fatalf("unexpected report: %+v", report)
}
}
func TestRealSafariMissingWorkflowFails(t *testing.T) {
t.Parallel()
capture := safariFixture("MACOS_SAFARI")
capture.Runs[1].Results = capture.Runs[1].Results[:len(capture.Runs[1].Results)-1]
report := Evaluate(capture, capture.CandidateVersion, capture.BuildDigest, time.Now())
if report.Result != "FAIL" || !report.ExternalValidationRequired {
t.Fatalf("expected failed report: %+v", report)
}
}
func TestNonSafariToolchainCannotCompleteExternalValidation(t *testing.T) {
t.Parallel()
capture := safariFixture("NON_SAFARI_TOOLCHAIN")
capture.Runs = capture.Runs[:1]
capture.Runs[0].BrowserName = "Chrome"
report := Evaluate(capture, capture.CandidateVersion, capture.BuildDigest, time.Now())
if report.Result != "PASS" || report.EvidenceScope != "NON_SAFARI_TOOLCHAIN" || !report.ExternalValidationRequired {
t.Fatalf("unexpected toolchain report: %+v", report)
}
}
func TestParseCaptureRejectsUnknownFields(t *testing.T) {
t.Parallel()
content, err := json.Marshal(safariFixture("NON_SAFARI_TOOLCHAIN"))
if err != nil {
t.Fatal(err)
}
content = []byte(strings.TrimSuffix(string(content), "}") + `,"unexpected":true}`)
if _, err = ParseCapture(content); err == nil {
t.Fatal("expected unknown field rejection")
}
}
func safariFixture(source string) Capture {
startedAt := time.Date(2026, 8, 25, 10, 0, 0, 0, time.UTC)
collectedAt := startedAt.Add(3 * time.Hour)
environment := "STAGING"
if source == "NON_SAFARI_TOOLCHAIN" {
environment = "LOCAL"
}
runs := make([]BrowserRun, 0, 2)
for rankPosition, rank := range RequiredReleaseRanks {
results := make([]WorkflowResult, 0, len(RequiredWorkflows)*len(RequiredViewports))
for _, workflow := range RequiredWorkflows {
for _, viewport := range RequiredViewports {
results = append(results, WorkflowResult{Workflow: workflow, Viewport: viewport, Status: "PASS", EvidenceRef: "evidence:" + rank + ":" + workflow + ":" + viewport})
}
}
runs = append(runs, BrowserRun{
ReleaseRank: rank, BrowserName: "Safari", BrowserVersion: []string{"26.0", "18.6"}[rankPosition], MacOSVersion: "macOS-test", MachineRef: "mac-runner-a",
ExecutionMode: "SAFARIDRIVER", StartedAt: startedAt.Add(time.Duration(rankPosition) * time.Hour), EndedAt: startedAt.Add(time.Duration(rankPosition+1) * time.Hour), Results: results,
})
}
return Capture{
SchemaVersion: CaptureSchema, EvidenceSource: source, CandidateVersion: "0.63.0-rc.1", BuildDigest: "sha256:" + strings.Repeat("a", 64), Environment: environment,
ReleaseReferenceRef: "apple-release-baseline:2026-08-25", ChangeTicketRef: "change-20260825", ExecutedByRef: "qa-executor", AttestedByRef: "qa-reviewer",
AttestedAt: collectedAt.Add(-30 * time.Minute), CollectedAt: collectedAt, Runs: runs,
}
}