package notifications import ( "strings" "testing" ) func TestBucketFor(t *testing.T) { cases := []struct { lead int want string }{ {-1, "today"}, {0, "today"}, {1, "tomorrow"}, {2, "days"}, {7, "days"}, } for _, c := range cases { if got := bucketFor(c.lead); got != c.want { t.Errorf("bucketFor(%d) = %q, want %q", c.lead, got, c.want) } } } func TestRender_GermanParentsToday(t *testing.T) { subject, body := Render("fortbildung", "parents", 0, "de", Vars{ Title: "SCHILF", DatePretty: "10.10.2026", ClassName: "5a", }) if !strings.Contains(subject, "Heute") || !strings.Contains(subject, "SCHILF") { t.Errorf("expected today + title in subject, got %q", subject) } if !strings.Contains(body, "Liebe Eltern") { t.Errorf("expected greeting in body, got %q", body) } if !strings.Contains(body, "(5a)") { t.Errorf("expected class suffix, got %q", body) } } func TestRender_TurkishStudentTomorrow(t *testing.T) { subject, _ := Render("schulfeier", "students", 1, "tr", Vars{ Title: "Yaz şenliği", DatePretty: "12.06.2026", }) if !strings.Contains(subject, "Yarın") || !strings.Contains(subject, "Yaz şenliği") { t.Errorf("expected Turkish 'tomorrow' subject, got %q", subject) } } func TestRender_FallbackLanguage(t *testing.T) { // 'xx' isn't supported → falls back to de. subject, _ := Render("klassenfahrt", "parents", 7, "xx", Vars{ Title: "Wattenmeer", DatePretty: "15.05.2026", ClassName: "6b", }) if !strings.Contains(subject, "In 7 Tagen") { t.Errorf("expected German fallback, got %q", subject) } } func TestRender_FallbackEventType(t *testing.T) { // 'unknown_type' falls back to 'andere'. subject, _ := Render("unknown_type", "parents", 0, "de", Vars{ Title: "Sondertermin", }) if !strings.Contains(subject, "Heute") || !strings.Contains(subject, "Sondertermin") { t.Errorf("expected today subject after fallback, got %q", subject) } } func TestSubstitute_DropsClassSuffixWhenEmpty(t *testing.T) { out := substitute("X{{class_suffix}}Y", 0, Vars{ClassName: ""}) if out != "XY" { t.Errorf("expected XY (no suffix), got %q", out) } out = substitute("X{{class_suffix}}Y", 0, Vars{ClassName: "5a"}) if out != "X (5a)Y" { t.Errorf("expected ' (5a)' suffix, got %q", out) } }