package calendar import "testing" func raw(fields map[string]string) RawCelebration { return RawCelebration{Fields: fields, Variants: map[string]map[string]string{}} } func TestMergeLayers(t *testing.T) { base := Layer{ID: "universal", Cels: map[string]RawCelebration{ "assumption": raw(map[string]string{"rank": "solemnity", "colour": "white", "name.en": "Assumption"}), "st-x": raw(map[string]string{"rank": "optional", "date": "01-02"}), "drop-me": raw(map[string]string{"rank": "memorial", "date": "03-03"}), }} local := Layer{ID: "krakow", Cels: map[string]RawCelebration{ "st-x": raw(map[string]string{"rank": "feast"}), // elevate; keep date "drop-me": raw(map[string]string{"suppress": "true"}), // remove "st-new": raw(map[string]string{"rank": "solemnity", "date": "05-08"}), // add }} got := mergeLayers([]Layer{base, local}) if got["st-x"].Fields["rank"] != "feast" || got["st-x"].Fields["date"] != "01-02" { t.Errorf("st-x merge = %+v", got["st-x"].Fields) } if _, ok := got["drop-me"]; ok { t.Error("drop-me should be suppressed") } if got["st-new"].Fields["date"] != "05-08" { t.Error("st-new should be added") } if got["assumption"].Fields["name.en"] != "Assumption" { t.Error("untouched base entry lost") } }