using System.Net; using System.Net.Http.Json; using BigRegister.Api.Contracts; using Microsoft.AspNetCore.Mvc.Testing; namespace BigRegister.Tests; /// /// The stamdata maintenance reads (ADR-0004): admin-only, generic (schema + rows), and the /// valid-time peildatum filter. The editor consumes these; the edit itself lands as a PR. /// public class StamdataEndpointTests(TestWebApplicationFactory factory) : IClassFixture { private readonly HttpClient _client = factory.CreateClient(); private HttpRequestMessage Req(HttpMethod method, string path, string? role = null) { var req = new HttpRequestMessage(method, path); if (role is not null) req.Headers.Add("X-Role", role); return req; } [Fact] public async Task Stamdata_reads_are_admin_only() { Assert.Equal(HttpStatusCode.Forbidden, (await _client.SendAsync(Req(HttpMethod.Get, "/api/v1/stamdata"))).StatusCode); Assert.Equal(HttpStatusCode.Forbidden, (await _client.SendAsync(Req(HttpMethod.Get, "/api/v1/stamdata/professions", role: "drafter"))).StatusCode); } [Fact] public async Task Table_list_exposes_the_reflected_schema() { var res = await _client.SendAsync(Req(HttpMethod.Get, "/api/v1/stamdata", role: "admin")); res.EnsureSuccessStatusCode(); var tables = (await res.Content.ReadFromJsonAsync>())!; var professions = tables.Single(t => t.Id == "professions"); Assert.True(professions.Temporal); Assert.True(professions.Columns[0].IsKey); Assert.Equal("program", professions.Columns[0].Name); Assert.Contains(professions.Columns, c => c.Name == "geldigVan" && c.Type == "date"); } [Fact] public async Task Table_returns_all_rows_without_a_peildatum() { var res = await _client.SendAsync(Req(HttpMethod.Get, "/api/v1/stamdata/professions", role: "admin")); res.EnsureSuccessStatusCode(); var table = (await res.Content.ReadFromJsonAsync())!; Assert.Equal(5, table.Rows.Count); } [Fact] public async Task Peildatum_before_the_seed_windows_hides_every_row() { // Seed mappings start 2000-01-01; a 1999 peildatum yields none (valid-time filter works). var res = await _client.SendAsync(Req(HttpMethod.Get, "/api/v1/stamdata/professions?peildatum=1999-01-01", role: "admin")); res.EnsureSuccessStatusCode(); var table = (await res.Content.ReadFromJsonAsync())!; Assert.Empty(table.Rows); } [Fact] public async Task Unknown_table_is_404() { var res = await _client.SendAsync(Req(HttpMethod.Get, "/api/v1/stamdata/nope", role: "admin")); Assert.Equal(HttpStatusCode.NotFound, res.StatusCode); } }