feat: rank growth events with grounded evidence

This commit is contained in:
2026-08-22 18:44:59 +08:00
parent 7f9c16be4b
commit 1a8a61cfe7
20 changed files with 2555 additions and 132 deletions

View File

@@ -1,11 +1,14 @@
package eventcatalog
import "testing"
import (
"fmt"
"testing"
)
func TestValidateImportRequiresThreePastAndTwoFutureJalaliYears(t *testing.T) {
t.Parallel()
input := Import{Version: "1402-1407-v1", CoverageStartJalaliYear: 1402, CoverageEndJalaliYear: 1407, SourceURI: "https://calendar.ut.ac.ir/", SourceVersion: "reviewed", SourceChecksum: "abc", ImportedBy: "operator-a", Events: []Event{{ID: "nowruz", TitleFA: "نوروز", StartDate: "2026-03-21", EndDate: "2026-03-24", Type: TypeCultural, Tone: ToneCelebratory, CommercialPosture: PosturePromote, SourceURI: "https://calendar.ut.ac.ir/", SourceVersion: "1405", InclusionRationale: "تقویم رسمی", GeographicScope: "IR", RelevanceBPS: 10000, ConfidenceBPS: 10000}}}
input := validCoveredImport()
if err := ValidateImport(input, 1405); err != nil {
t.Fatal(err)
}
@@ -16,6 +19,39 @@ func TestValidateImportRequiresThreePastAndTwoFutureJalaliYears(t *testing.T) {
}
}
func TestValidateImportRejectsMisleadingDeclaredCoverage(t *testing.T) {
t.Parallel()
input := validCoveredImport()
input.Events = input.Events[:len(input.Events)-1]
if err := ValidateImport(input, 1405); err == nil {
t.Fatal("expected missing declared coverage year error")
}
}
func TestValidateImportRequiresExplicitOccasionKey(t *testing.T) {
t.Parallel()
input := validCoveredImport()
input.Events[0].OccasionKey = ""
if err := ValidateImport(input, 1405); err == nil {
t.Fatal("expected missing occasion key error")
}
}
func TestValidateReviewableChecksumRejectsPlaceholder(t *testing.T) {
t.Parallel()
for _, checksum := range []string{"review-required-before-activation-1405-v2", "pending-review", "placeholder"} {
if err := ValidateReviewableChecksum(checksum); err == nil {
t.Errorf("expected placeholder checksum %q to be rejected", checksum)
}
}
if err := ValidateReviewableChecksum("sha256:5f70bf18a086007016e948b04aed3b82103a36be3a0ab2aeeabe46d778b8bdc0"); err != nil {
t.Fatal(err)
}
}
func TestValidateApprovalRequiresIndependentReviewer(t *testing.T) {
t.Parallel()
@@ -26,3 +62,15 @@ func TestValidateApprovalRequiresIndependentReviewer(t *testing.T) {
t.Fatal(err)
}
}
func validCoveredImport() Import {
events := make([]Event, 0, 6)
for year := 1402; year <= 1407; year++ {
gregorianYear := year + 621
event := validCatalogEvent(fmt.Sprintf("education-enrollment-%d", year), fmt.Sprintf("%d-09-01", gregorianYear), year)
event.OccasionKey = "education-enrollment"
event.Variant = "CAMPAIGN_WINDOW"
events = append(events, event)
}
return Import{Version: "1402-1407-v2", CoverageStartJalaliYear: 1402, CoverageEndJalaliYear: 1407, SourceURI: "https://calendar.ut.ac.ir/", SourceVersion: "reviewed", SourceChecksum: "abc", ImportedBy: "operator-a", Events: events}
}