package imap import ( "strings" "testing" ) func TestSnippetFromBodies_skipsStyleBlock(t *testing.T) { html := `
Meta for Business vous informe des nouveautés publicitaires.
` got := SnippetFromBodies("", html, 200) if strings.Contains(got, ":root") || strings.Contains(got, "color-scheme") { t.Fatalf("snippet = %q, want body text not CSS", got) } if !strings.Contains(got, "nouveautés") { t.Fatalf("snippet = %q, want meaningful body", got) } } func TestSnippetFromBodies_skipsViewInBrowser(t *testing.T) { html := `Webinar J-14 : boostez la recherche de vos données matériaux.
` got := SnippetFromBodies("", html, 200) lower := strings.ToLower(got) if strings.Contains(lower, "afficher dans le navigateur") { t.Fatalf("snippet = %q, want to skip boilerplate", got) } if !strings.Contains(got, "Webinar") { t.Fatalf("snippet = %q, want real content", got) } } func TestSnippetFromBodies_skipsViewInBrowserBracketedStored(t *testing.T) { stored := "[ Afficher dans le navigateur ]..." html := `Contenu utile sur le webinar matériaux.
` got := RepairSnippetWithBodies(stored, "", html) if strings.Contains(strings.ToLower(got), "afficher dans le navigateur") { t.Fatalf("snippet = %q", got) } if !strings.Contains(got, "webinar") { t.Fatalf("snippet = %q, want body content", got) } } func TestSnippetFromBodies_skipsSeparatorLine(t *testing.T) { text := "----------------------------------------------------------------\nUn festival rétro au Château de Tilloloy arrive cet été." got := SnippetFromBodies(text, "", 200) if strings.HasPrefix(got, "---") { t.Fatalf("snippet = %q, want content after separator", got) } if !strings.Contains(got, "festival") { t.Fatalf("snippet = %q", got) } } func TestSnippetFromBodies_skipsSeparatorOnlyLine(t *testing.T) { stored := "--------------------------------------- * U..." html := `Un festival rétro au Château de Tilloloy arrive cet été.
` got := RepairSnippetWithBodies(stored, "", html) if strings.Contains(got, "---") { t.Fatalf("snippet = %q, want no separator line", got) } if !strings.Contains(got, "festival") { t.Fatalf("snippet = %q", got) } } func TestSnippetFromBodies_skipsOVHFooter(t *testing.T) { stored := "SAS OVH - https://www.ovh.com/ 2 rue Kellermann BP 80157..." html := `Votre facture OVH est disponible dans l'espace client.
` got := RepairSnippetWithBodies(stored, "", html) if strings.Contains(got, "Kellermann") { t.Fatalf("snippet = %q, want no legal footer", got) } if !strings.Contains(got, "facture") { t.Fatalf("snippet = %q", got) } } func TestSnippetFromBodies_skipsFontFaceCSS(t *testing.T) { stored := "@font-face { font-family: 'Playfair Display'; font-style: normal;..." html := `Découvrez notre collection printemps.
` got := RepairSnippetWithBodies(stored, "", html) if strings.Contains(got, "@font-face") { t.Fatalf("snippet = %q", got) } if !strings.Contains(got, "collection") { t.Fatalf("snippet = %q", got) } } func TestSnippetFromBodies_stripsHTMLTags(t *testing.T) { text := "Bonjour Eliott, votre commande est prête." got := SnippetFromBodies(text, "", 200) if strings.Contains(got, "<") || strings.Contains(got, ">") { t.Fatalf("snippet = %q, want plain text without tags", got) } if !strings.Contains(got, "Bonjour") || !strings.Contains(got, "commande") { t.Fatalf("snippet = %q, want readable text", got) } } func TestRepairSnippetWithBodies_stripsStoredHTMLTags(t *testing.T) { stored := "Offre limitée & exclusive" got := RepairSnippetWithBodies(stored, "", "") if strings.Contains(got, "<") { t.Fatalf("snippet = %q, want tags stripped", got) } if !strings.Contains(got, "Offre") || !strings.Contains(got, "&") { t.Fatalf("snippet = %q, want unescaped text", got) } } func TestStripSnippetMarkup_decodesEntitiesAndCSSTail(t *testing.T) { raw := "Victoria vient d'activer son compte sur passbolt /*//||//..." got := stripSnippetMarkup(raw) if strings.Contains(got, "'") || strings.Contains(got, "'") { t.Fatalf("snippet = %q, want decoded apostrophe", got) } if !strings.Contains(got, "d'activer") { t.Fatalf("snippet = %q, want apostrophe", got) } if strings.Contains(got, "/*") || strings.Contains(got, "||//") { t.Fatalf("snippet = %q, want CSS tail removed", got) } } func TestSnippetLooksLowQuality_encodedEntities(t *testing.T) { if !SnippetLooksLowQuality("Hello d'activer") { t.Fatal("expected encoded entities to be low quality") } } func TestRepairSnippetWithBodies_replacesCSSPreview(t *testing.T) { stored := "FacebookMeta for Business :root { color-scheme: light dark;" html := `Inclure automatiquement des informations plus détaillées sur le compte.
` got := RepairSnippetWithBodies(stored, "", html) if strings.Contains(got, ":root") { t.Fatalf("snippet = %q", got) } if !strings.Contains(got, "automatiquement") { t.Fatalf("snippet = %q, want rebuilt from html", got) } } func TestIsSnippetBoilerplate_userReportedCases(t *testing.T) { cases := []string{ "--------------------------------------- * U...", "[ Afficher dans le navigateur ]...", "SAS OVH - https://www.ovh.com/ 2 rue Kellermann BP 80157...", "FacebookMeta for Business :root { Color-scheme: light dark;...", "@font-face { font-family: 'Playfair Display'; font-style: normal;...", } for _, c := range cases { if !isSnippetBoilerplate(c) { t.Fatalf("expected boilerplate for %q", c) } } }