package pipeline import ( "strings" "testing" "evobgp/internal/birdfmt" "evobgp/internal/store" ) func TestBuildPreviewFragments_SamePrefixDifferentCommunity(t *testing.T) { m := store.NewMemory() m.SeedDemo() tenant, _, moduleIP, _, _ := m.DemoIDs() c1, err := m.CreateCommunity(tenant, &store.Community{Community: "65000:1", Title: "A", ValueJSON: "{}"}) if err != nil { t.Fatal(err) } c2, err := m.CreateCommunity(tenant, &store.Community{Community: "65000:2", Title: "B", ValueJSON: "{}"}) if err != nil { t.Fatal(err) } rows := []store.PrefixRow{ {Prefix: "203.0.113.0/24", CommunityID: &c1.ID, Source: "ip_range"}, {Prefix: "203.0.113.0/24", CommunityID: &c2.ID, Source: "cdn:test"}, } out, err := buildPreviewFragments(m, tenant, moduleIP, "test-revision", rows) if err != nil { t.Fatal(err) } staticV4 := out[birdfmt.FragmentIncludePath(birdfmt.FragmentPrefixesV4)] if !strings.Contains(staticV4, "protocol static evobgp_prefixes_v4_"+communityProtocolSuffix(c1.ID)) { t.Fatalf("expected dedicated static protocol for first community, got:\n%s", staticV4) } if !strings.Contains(staticV4, "protocol static evobgp_prefixes_v4_"+communityProtocolSuffix(c2.ID)) { t.Fatalf("expected dedicated static protocol for second community, got:\n%s", staticV4) } out2, err := buildPreviewFragments(m, tenant, moduleIP, "test-revision", rows) if err != nil { t.Fatal(err) } staticV4Second := out2[birdfmt.FragmentIncludePath(birdfmt.FragmentPrefixesV4)] if staticV4 != staticV4Second { t.Fatalf("expected deterministic static preview text, got first:\n%s\nsecond:\n%s", staticV4, staticV4Second) } }