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",
];
[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);
}
}