diff --git a/Directory.Packages.props b/Directory.Packages.props index 6be60de4..c753b767 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -28,7 +28,7 @@ - + diff --git a/tests/Identity/PANiXiDA.TacticalHeroes.Identity.FunctionalTests/Presentation/Features/OAuth/OpenApi/IdentityOpenApiDocumentTests.cs b/tests/Identity/PANiXiDA.TacticalHeroes.Identity.FunctionalTests/Presentation/Features/OAuth/OpenApi/IdentityOpenApiDocumentTests.cs new file mode 100644 index 00000000..308ed355 --- /dev/null +++ b/tests/Identity/PANiXiDA.TacticalHeroes.Identity.FunctionalTests/Presentation/Features/OAuth/OpenApi/IdentityOpenApiDocumentTests.cs @@ -0,0 +1,37 @@ +using System.Text.Json; + +using Microsoft.Extensions.Hosting; + +namespace PANiXiDA.TacticalHeroes.Identity.FunctionalTests.Presentation.Features.OAuth.OpenApi; + +public sealed class IdentityOpenApiDocumentTests(FunctionalTestFixture fixture) + : FunctionalTestBase(fixture) +{ + [Fact(DisplayName = "GET Identity OpenAPI document should include OAuth endpoints when requested")] + public async Task GetIdentityOpenApiDocument_Should_IncludeOAuthEndpoints_When_Requested() + { + var cancellationToken = TestContext.Current.CancellationToken; + using var client = Fixture.CreateClient(Environments.Development); + + using var response = await client.GetAsync( + "/openapi/identity.json", + cancellationToken); + var responseBody = await response.Content.ReadAsStringAsync(cancellationToken); + + response.StatusCode.ShouldBe(HttpStatusCode.OK, responseBody); + using var document = JsonDocument.Parse(responseBody); + var paths = document.RootElement + .GetProperty("paths") + .EnumerateObject() + .Select(path => path.Name) + .ToArray(); + + paths.ShouldContain("/connect/authorize"); + paths.ShouldContain("/connect/introspect"); + paths.ShouldContain("/connect/logout"); + paths.ShouldContain("/connect/par"); + paths.ShouldContain("/connect/revoke"); + paths.ShouldContain("/connect/token"); + paths.ShouldContain("/connect/userinfo"); + } +} diff --git a/tests/Identity/PANiXiDA.TacticalHeroes.Identity.FunctionalTests/Presentation/FunctionalTestFixture.cs b/tests/Identity/PANiXiDA.TacticalHeroes.Identity.FunctionalTests/Presentation/FunctionalTestFixture.cs index 0d16f05f..976bbf30 100644 --- a/tests/Identity/PANiXiDA.TacticalHeroes.Identity.FunctionalTests/Presentation/FunctionalTestFixture.cs +++ b/tests/Identity/PANiXiDA.TacticalHeroes.Identity.FunctionalTests/Presentation/FunctionalTestFixture.cs @@ -56,6 +56,17 @@ public HttpClient CreateClient(WebApplicationFactoryClientOptions options) return client; } + public HttpClient CreateClient(string environmentName) + { + var factory = new FunctionalTestWebApplicationFactory(environmentName); + _factories.Add(factory); + + var client = factory.CreateClient(); + _clients.Add(client); + + return client; + } + private void CreateCurrentClient() { _factory = new FunctionalTestWebApplicationFactory(); diff --git a/tests/Identity/PANiXiDA.TacticalHeroes.Identity.FunctionalTests/Presentation/FunctionalTestWebApplicationFactory.cs b/tests/Identity/PANiXiDA.TacticalHeroes.Identity.FunctionalTests/Presentation/FunctionalTestWebApplicationFactory.cs index 82650748..252be3ea 100644 --- a/tests/Identity/PANiXiDA.TacticalHeroes.Identity.FunctionalTests/Presentation/FunctionalTestWebApplicationFactory.cs +++ b/tests/Identity/PANiXiDA.TacticalHeroes.Identity.FunctionalTests/Presentation/FunctionalTestWebApplicationFactory.cs @@ -12,14 +12,14 @@ namespace PANiXiDA.TacticalHeroes.Identity.FunctionalTests.Presentation; -internal sealed class FunctionalTestWebApplicationFactory +internal sealed class FunctionalTestWebApplicationFactory(string environmentName = "Test") : WebApplicationFactory { public CapturingEventBus EventBus { get; } = new(); protected override void ConfigureWebHost(IWebHostBuilder builder) { - builder.UseEnvironment("Test"); + builder.UseEnvironment(environmentName); builder.ConfigureLogging(logging => logging.ClearProviders()); builder.ConfigureServices(services => {