-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathApiVersioningTests.cs
More file actions
67 lines (59 loc) · 2.61 KB
/
ApiVersioningTests.cs
File metadata and controls
67 lines (59 loc) · 2.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
using MeAjudaAi.E2E.Tests.Base;
namespace MeAjudaAi.E2E.Tests.Integration;
/// <summary>
/// Testes para validar o funcionamento do API Versioning usando segmentos de URL
/// Padrão: /api/v{version}/module (ex: /api/v1/users)
/// Essa abordagem é explícita, clara e evita a complexidade de múltiplos métodos de versionamento
/// </summary>
public class ApiVersioningTests : TestContainerTestBase
{
[Fact]
public async Task ApiVersioning_ShouldWork_ViaUrlSegment()
{
// Arrange & Act
var response = await ApiClient.GetAsync("/api/v1/users");
// Assert
// Não deve ser NotFound - indica que o versionamento por URL foi reconhecido e está funcionando
response.StatusCode.Should().NotBe(HttpStatusCode.NotFound);
// Respostas válidas: 200 (OK), 401 (Unauthorized) ou 400 (BadRequest com erros de validação)
response.StatusCode.Should().BeOneOf(HttpStatusCode.OK, HttpStatusCode.Unauthorized, HttpStatusCode.BadRequest);
}
[Fact]
public async Task ApiVersioning_ShouldReturnNotFound_ForInvalidPaths()
{
// Arrange & Act - Testa caminhos que NÃO devem funcionar sem versionamento na URL
var responses = new[]
{
await ApiClient.GetAsync("/api/users"), // Sem versão - deve ser 404
await ApiClient.GetAsync("/users"), // Sem prefixo api - deve ser 404
await ApiClient.GetAsync("/api/v2/users") // Versão não suportada - deve ser 404 ou 400
};
// Assert
foreach (var response in responses)
{
// Esses caminhos não devem ser encontrados pois só suportamos /api/v1/
response.StatusCode.Should().BeOneOf(HttpStatusCode.NotFound, HttpStatusCode.BadRequest);
}
}
[Fact]
public async Task ApiVersioning_ShouldWork_ForDifferentModules()
{
// Arrange - Configure authentication for API access
AuthenticateAsAdmin();
// Act - Test that versioning works for different module patterns
var responses = new[]
{
await ApiClient.GetAsync("/api/v1/users"),
// Adicione mais módulos quando existirem
// await HttpClient.GetAsync("/api/v1/services"),
// await HttpClient.GetAsync("/api/v1/orders"),
};
// Assert
foreach (var response in responses)
{
// Deve reconhecer o padrão de URL versionada
response.StatusCode.Should().NotBe(HttpStatusCode.NotFound);
response.StatusCode.Should().BeOneOf(HttpStatusCode.OK, HttpStatusCode.Unauthorized, HttpStatusCode.BadRequest);
}
}
}