Files
Geradores/UnitTest/ApiTests.cs
Marco Santos d7ea8a9b9e Reescrita dos geradores: biblioteca IGenerator, minimal API e novo frontend
- GeradoresService: cada tipo passa a ser um IGenerator (NIF, NIPC, NISS, CC,
  passaporte, IBAN, NIB, cartões, referência MB, pessoa, telefone, código postal,
  email, matrícula, EAN, UUID) registado em GeneratorRegistry; remove DAL/EF
- GeradoresWS: minimal APIs em /api/v1 com OpenAPI + Scalar e health check
- UnitTest: testes de ida e volta, valores conhecidos, detecção e API
- geradoresfe: UI construída a partir dos metadados da API, validador livre,
  exportação CSV/JSON/TXT, nginx com API_UPSTREAM configurável
- Docker, docker-compose e Jenkinsfile actualizados

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 23:51:39 +01:00

67 lines
2.4 KiB
C#

using System.Net;
using System.Net.Http.Json;
using System.Text.Json;
using Microsoft.AspNetCore.Mvc.Testing;
namespace UnitTest;
public class ApiTests(WebApplicationFactory<Program> factory) : IClassFixture<WebApplicationFactory<Program>>
{
private readonly HttpClient _client = factory.CreateClient();
[Fact]
public async Task Lists_generators()
{
var json = await _client.GetFromJsonAsync<JsonElement>("/api/v1/generators");
Assert.Contains(json.EnumerateArray(), g => g.GetProperty("id").GetString() == "nif");
}
[Fact]
public async Task Generates_batch_with_options()
{
var json = await _client.GetFromJsonAsync<JsonElement>("/api/v1/generators/nif/generate?count=25&tipo=5&seed=1");
var items = json.GetProperty("items").EnumerateArray().ToList();
Assert.Equal(25, items.Count);
Assert.All(items, i => Assert.StartsWith("5", i.GetProperty("value").GetString()));
}
[Theory]
[InlineData("/api/v1/generators/nif/generate?count=0")]
[InlineData("/api/v1/generators/nif/generate?count=5000")]
[InlineData("/api/v1/generators/nif/generate?tipo=xpto")]
[InlineData("/api/v1/generators/nif/generate?desconhecida=1")]
public async Task Bad_requests(string url)
{
var response = await _client.GetAsync(url);
Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
}
[Fact]
public async Task Unknown_generator_is_404()
{
var response = await _client.GetAsync("/api/v1/generators/xpto/generate");
Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
}
[Fact]
public async Task Validates_value()
{
var json = await _client.GetFromJsonAsync<JsonElement>("/api/v1/generators/nif/validate?value=123456789");
Assert.True(json.GetProperty("isValid").GetBoolean());
}
[Fact]
public async Task Detects_value()
{
var json = await _client.GetFromJsonAsync<JsonElement>("/api/v1/validate?value=" + Uri.EscapeDataString("PT50 0002 0123 1234 5678 9015 4"));
Assert.Equal("iban", json.GetProperty("matches")[0].GetProperty("generatorId").GetString());
}
[Fact]
public async Task OpenApi_and_health_are_exposed()
{
Assert.Equal(HttpStatusCode.OK, (await _client.GetAsync("/openapi/v1.json")).StatusCode);
Assert.Equal(HttpStatusCode.OK, (await _client.GetAsync("/health")).StatusCode);
}
}