45 lines
1.3 KiB
Go
45 lines
1.3 KiB
Go
package eventcatalog
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestImpactfulBusinessCatalogIsValidAndIndustryPersonalized(t *testing.T) {
|
|
data, err := os.ReadFile("../../catalogs/impactful-business-events-1405-v1.json")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
var input Import
|
|
if err := json.Unmarshal(data, &input); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := ValidateImport(input, 1405); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
hasEducation, hasRetail := false, false
|
|
months := make(map[time.Month]bool)
|
|
for _, event := range input.Events {
|
|
if event.OfficialHoliday && event.RelevanceBPS < 7000 {
|
|
t.Fatalf("official holiday %s lacks evidenced business impact", event.ID)
|
|
}
|
|
for _, category := range event.MerchantCategories {
|
|
hasEducation = hasEducation || category == "مراکز آموزشی مجازی"
|
|
hasRetail = hasRetail || category == "کیف و کفش فروشی"
|
|
}
|
|
start, err := time.Parse(time.DateOnly, event.StartDate)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
months[start.Month()] = true
|
|
}
|
|
if !hasEducation || !hasRetail {
|
|
t.Fatal("catalog must include both education- and retail-specific windows")
|
|
}
|
|
if len(input.Events) < 12 || len(months) < 9 {
|
|
t.Fatalf("catalog must provide year-round candidate coverage; got %d events across %d months", len(input.Events), len(months))
|
|
}
|
|
}
|