using Elternbeirat.Web.Features.Home; namespace Elternbeirat.Web.Tests; /// /// Unit tests for taking the home page's body apart into heading, intro and /// buttons. Pure logic, no PocketBase needed. /// public class HomeIntroTests { [Fact] public void Body_splits_into_title_intro_and_buttons() { var intro = HomeIntro.Parse( "# Willkommen\n\nSchön, dass Sie da sind.\n\n[Kommende Termine](/events)\n[Kontakt aufnehmen](/contact)"); intro.Title.ShouldBe("Willkommen"); intro.IntroHtml.ShouldBe("

Schön, dass Sie da sind.

\n"); intro.Links.ShouldBe( [ new HomeLink("/events", "Kommende Termine"), new HomeLink("/contact", "Kontakt aufnehmen"), ]); } [Theory] [InlineData(null)] [InlineData("")] [InlineData(" ")] public void Empty_body_gives_the_fallback(string? markdown) => HomeIntro.Parse(markdown).ShouldBe(HomeIntro.Fallback); [Fact] public void Body_without_heading_keeps_the_fallback_title_and_all_text() { var intro = HomeIntro.Parse("Nur ein Absatz."); intro.Title.ShouldBe(HomeIntro.FallbackTitle); intro.IntroHtml.ShouldContain("Nur ein Absatz."); intro.Links.ShouldBeEmpty(); } [Fact] public void Last_paragraph_with_other_text_stays_intro() { // "oder" would get lost in a button row, so the paragraph stays text. var intro = HomeIntro.Parse("# Hallo\n\n[Termine](/events) oder [Kontakt](/contact)"); intro.Links.ShouldBeEmpty(); intro.IntroHtml.ShouldContain("href=\"/events\""); } [Fact] public void Link_paragraph_that_is_not_last_stays_intro() { var intro = HomeIntro.Parse("# Hallo\n\n[Termine](/events)\n\nSchlusssatz."); intro.Links.ShouldBeEmpty(); intro.IntroHtml.ShouldContain("Schlusssatz."); } [Fact] public void Heading_markup_is_reduced_to_its_text() { HomeIntro.Parse("# Willkommen beim **Elternbeirat**").Title.ShouldBe("Willkommen beim Elternbeirat"); } }