using System.Net; using Microsoft.AspNetCore.Mvc.Testing; namespace Elternbeirat.Web.Tests; /// /// Smoke tests: every known route must return 200, unknown routes must return /// 404. This catches broken content files, renamed slugs or routing regressions /// before a deploy. /// public sealed class RouteSmokeTests : IClassFixture> { private readonly WebApplicationFactory _factory; public RouteSmokeTests(WebApplicationFactory factory) { _factory = factory; } /// /// Every route that a visitor can reach through the navigation, the FAQ hub /// or the news section. /// public static TheoryData KnownRoutes => [ "/", "/vorstandsteam", "/foerderverein", "/faq", "/faq-mensa", "/faq-schliessfach", "/faq-elterneuro", "/faq-elternarbeit", "/downloads", "/kontakt", "/impressum", "/datenschutz", "/beitraege", "/beitraege/neuer-vorstand-gewaehlt", "/beitraege/neue-sporthalle-eroeffnet", "/termine", "/termine.ics", ]; [Theory] [MemberData(nameof(KnownRoutes))] public async Task Known_route_returns_200(string route) { var client = _factory.CreateClient(); var response = await client.GetAsync(route); Assert.Equal(HttpStatusCode.OK, response.StatusCode); } [Theory] [InlineData("/gibt-es-nicht")] [InlineData("/beitraege/gibt-es-nicht")] public async Task Unknown_route_returns_404(string route) { var client = _factory.CreateClient(); var response = await client.GetAsync(route); Assert.Equal(HttpStatusCode.NotFound, response.StatusCode); } }