- 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>
67 lines
2.4 KiB
C#
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);
|
|
}
|
|
}
|