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 =>
{