using StellaOps.Microservice; using StellaOps.Router.Integration.Tests.Fixtures; namespace StellaOps.Router.Integration.Tests; /// /// Integration tests for path matching and routing. /// [Collection("Microservice Integration")] public sealed class PathMatchingIntegrationTests { private readonly MicroserviceIntegrationFixture _fixture; public PathMatchingIntegrationTests(MicroserviceIntegrationFixture fixture) { _fixture = fixture; } #region Exact Path Matching Tests [Theory] [InlineData("POST", "/echo")] [InlineData("POST", "/users")] [InlineData("POST", "/slow")] [InlineData("POST", "/fail")] [InlineData("POST", "/stream")] [InlineData("DELETE", "/admin/reset")] [InlineData("GET", "/quick")] public void PathMatching_ExactPaths_MatchCorrectly(string method, string path) { // Arrange var registry = _fixture.EndpointRegistry; // Act var found = registry.TryMatch(method, path, out var match); // Assert found.Should().BeTrue(); match.Should().NotBeNull(); } #endregion #region Parameterized Path Tests [Theory] [InlineData("/users/123", "/users/{userId}")] [InlineData("/users/abc-def", "/users/{userId}")] [InlineData("/users/user_001", "/users/{userId}")] public void PathMatching_ParameterizedPaths_MatchCorrectly(string requestPath, string expectedPattern) { // Arrange var registry = _fixture.EndpointRegistry; // Act var found = registry.TryMatch("GET", requestPath, out var match); // Assert found.Should().BeTrue(); match!.Endpoint.Path.Should().Be(expectedPattern); } [Fact] public void PathMatching_PostUsersPath_MatchesCreateEndpoint() { // Arrange var registry = _fixture.EndpointRegistry; // Act var found = registry.TryMatch("POST", "/users", out var match); // Assert found.Should().BeTrue(); match!.Endpoint.HandlerType.Should().Be(typeof(CreateUserEndpoint)); } #endregion #region Non-Matching Path Tests [Theory] [InlineData("GET", "/nonexistent")] [InlineData("POST", "/unknown/path")] [InlineData("PUT", "/echo")] // Wrong method [InlineData("GET", "/admin/reset")] // Wrong method public void PathMatching_NonMatchingPaths_ReturnFalse(string method, string path) { // Arrange var registry = _fixture.EndpointRegistry; // Act var found = registry.TryMatch(method, path, out var match); // Assert found.Should().BeFalse(); match.Should().BeNull(); } #endregion #region Method Matching Tests [Fact] public void PathMatching_SamePathDifferentMethods_MatchCorrectEndpoint() { // Arrange var registry = _fixture.EndpointRegistry; // Act registry.TryMatch("POST", "/users", out var postMatch); registry.TryMatch("GET", "/users/123", out var getMatch); // Assert postMatch.Should().NotBeNull(); postMatch!.Endpoint.HandlerType.Should().Be(typeof(CreateUserEndpoint)); getMatch.Should().NotBeNull(); getMatch!.Endpoint.HandlerType.Should().Be(typeof(GetUserEndpoint)); } #endregion }