Define briefing fact requirement vocabulary
This commit is contained in:
@@ -30,6 +30,52 @@ func TestDefaultModuleRegistryValidatesReportDefaults(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestFactRequirementVocabularyMatchesModuleDefinitions(t *testing.T) {
|
||||
vocabulary := make(map[string]factRequirement, len(factRequirementVocabulary))
|
||||
for _, requirement := range factRequirementVocabulary {
|
||||
if requirement.identity == "" {
|
||||
t.Fatal("fact requirement identity is empty")
|
||||
}
|
||||
if requirement.category != collectedFactRequirement && requirement.category != derivedFactRequirement {
|
||||
t.Fatalf("fact requirement %q category = %q, want collected or derived", requirement.identity, requirement.category)
|
||||
}
|
||||
if _, exists := vocabulary[requirement.identity]; exists {
|
||||
t.Fatalf("duplicate fact requirement %q", requirement.identity)
|
||||
}
|
||||
vocabulary[requirement.identity] = requirement
|
||||
}
|
||||
|
||||
used := map[factRequirement]struct{}{}
|
||||
for _, definition := range defaultModuleDefinitions() {
|
||||
for _, requirement := range definition.RequiredCollected {
|
||||
assertFactRequirementCategory(t, vocabulary, used, definition.ID, requirement, collectedFactRequirement)
|
||||
}
|
||||
for _, requirement := range definition.RequiredDerived {
|
||||
assertFactRequirementCategory(t, vocabulary, used, definition.ID, requirement, derivedFactRequirement)
|
||||
}
|
||||
}
|
||||
for _, requirement := range factRequirementVocabulary {
|
||||
if _, ok := used[requirement]; !ok {
|
||||
t.Fatalf("fact requirement %q is not used by a module definition", requirement.identity)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func assertFactRequirementCategory(t *testing.T, vocabulary map[string]factRequirement, used map[factRequirement]struct{}, moduleID module.ID, requirement factRequirement, want factRequirementCategory) {
|
||||
t.Helper()
|
||||
descriptor, ok := vocabulary[requirement.identity]
|
||||
if !ok {
|
||||
t.Fatalf("module %q uses unknown fact requirement %q", moduleID, requirement.identity)
|
||||
}
|
||||
if descriptor != requirement {
|
||||
t.Fatalf("module %q requirement %q does not use the vocabulary descriptor", moduleID, requirement.identity)
|
||||
}
|
||||
if requirement.category != want {
|
||||
t.Fatalf("module %q requirement %q category = %q, want %q", moduleID, requirement.identity, requirement.category, want)
|
||||
}
|
||||
used[requirement] = struct{}{}
|
||||
}
|
||||
|
||||
func TestDefaultReportModulesBuildSnapshots(t *testing.T) {
|
||||
registry := MustDefaultModuleRegistry()
|
||||
for _, definition := range report.DefaultRegistry().All() {
|
||||
@@ -467,24 +513,24 @@ func TestModuleRegistryAcceptsTypedOptions(t *testing.T) {
|
||||
|
||||
func TestSPCConvectiveOutlookCollectedRequirementAvailability(t *testing.T) {
|
||||
ctx := ModuleContext{}
|
||||
if collectedFactAvailable(module.CollectedSPCConvectiveOutlooks, ctx) {
|
||||
if collectedFactAvailable(spcOutlooksRequirement, ctx) {
|
||||
t.Fatal("collectedFactAvailable() = true, want false without source")
|
||||
}
|
||||
|
||||
ctx.Collected = facts.CollectedFacts{SPCConvectiveOutlooks: &weatherdata.ConvectiveOutlookRun{}}
|
||||
if !collectedFactAvailable(module.CollectedSPCConvectiveOutlooks, ctx) {
|
||||
if !collectedFactAvailable(spcOutlooksRequirement, ctx) {
|
||||
t.Fatal("collectedFactAvailable() = false, want true with checked source")
|
||||
}
|
||||
}
|
||||
|
||||
func TestSPCConvectiveOutlookDerivedRequirementAvailability(t *testing.T) {
|
||||
ctx := ModuleContext{}
|
||||
if derivedFactAvailable(module.RequiresDerivedSPCConvectiveOutlooks, ctx) {
|
||||
if derivedFactAvailable(spcDerivedOutlooksRequirement, ctx) {
|
||||
t.Fatal("derivedFactAvailable() = true, want false without derived outlooks")
|
||||
}
|
||||
|
||||
ctx.Derived = facts.DerivedFacts{SPCConvectiveOutlooks: []weatherdata.ConvectiveOutlook{}}
|
||||
if !derivedFactAvailable(module.RequiresDerivedSPCConvectiveOutlooks, ctx) {
|
||||
if !derivedFactAvailable(spcDerivedOutlooksRequirement, ctx) {
|
||||
t.Fatal("derivedFactAvailable() = false, want true for checked empty derived outlooks")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user