diff --git a/examples/WireMock.Net.ConsoleApplication/MainApp.cs b/examples/WireMock.Net.ConsoleApplication/MainApp.cs index 4d4c7d97..6e889a6a 100644 --- a/examples/WireMock.Net.ConsoleApplication/MainApp.cs +++ b/examples/WireMock.Net.ConsoleApplication/MainApp.cs @@ -27,7 +27,7 @@ namespace WireMock.Net.ConsoleApplication server.SetBasicAuthentication("a", "b"); - server.AllowPartialMapping(); + // server.AllowPartialMapping(); server .Given(Request.Create().WithPath("/oauth2/access").UsingPost().WithBody("grant_type=password;username=u;password=p")) @@ -95,19 +95,55 @@ namespace WireMock.Net.ConsoleApplication .Given(Request.Create().WithPath("/partial").UsingPost().WithBody(new SimMetricsMatcher(new[] { "cat", "dog" }))) .RespondWith(Response.Create().WithStatusCode(200).WithBody("partial = 200")); - http://localhost:8080/any/any?start=1000&stop=1&stop=2 + // http://localhost:8080/any/any?start=1000&stop=1&stop=2 + //server + // .Given(Request.Create().WithPath("/*").UsingGet()) + // .WithGuid("90356dba-b36c-469a-a17e-669cd84f1f05") + // .AtPriority(server.Mappings.Count() + 1) + // .RespondWith(Response.Create() + // .WithStatusCode(200) + // .WithHeader("Content-Type", "application/json") + // .WithHeader("Transformed-Postman-Token", "token is {{request.headers.Postman-Token}}") + // .WithBody(@"{""msg"": ""Hello world CATCH-ALL on /*, {{request.path}}, bykey={{request.query.start}}, bykey={{request.query.stop}}, byidx0={{request.query.stop.[0]}}, byidx1={{request.query.stop.[1]}}"" }") + // .WithTransformer() + // .WithDelay(TimeSpan.FromMilliseconds(100)) + // ); + server - .Given(Request.Create().WithPath("/*").UsingGet()) - .WithGuid("90356dba-b36c-469a-a17e-669cd84f1f05") - .AtPriority(server.Mappings.Count() + 1) + .Given(Request.Create() + .WithPath("/state1") + .UsingGet()) + .InScenario("s1") + .WillSetStateTo("Test state 1") .RespondWith(Response.Create() - .WithStatusCode(200) - .WithHeader("Content-Type", "application/json") - .WithHeader("Transformed-Postman-Token", "token is {{request.headers.Postman-Token}}") - .WithBody(@"{""msg"": ""Hello world CATCH-ALL on /*, {{request.path}}, bykey={{request.query.start}}, bykey={{request.query.stop}}, byidx0={{request.query.stop.[0]}}, byidx1={{request.query.stop.[1]}}"" }") - .WithTransformer() - .WithDelay(TimeSpan.FromMilliseconds(100)) - ); + .WithBody("No state msg 1")); + + server + .Given(Request.Create() + .WithPath("/foostate1") + .UsingGet()) + .InScenario("s1") + .WhenStateIs("Test state 1") + .RespondWith(Response.Create() + .WithBody("Test state msg 1")); + + server + .Given(Request.Create() + .WithPath("/state2") + .UsingGet()) + .InScenario("s2") + .WillSetStateTo("Test state 2") + .RespondWith(Response.Create() + .WithBody("No state msg 2")); + + server + .Given(Request.Create() + .WithPath("/foostate2") + .UsingGet()) + .InScenario("s2") + .WhenStateIs("Test state 2") + .RespondWith(Response.Create() + .WithBody("Test state msg 2")); System.Console.WriteLine("Press any key to stop the server"); System.Console.ReadKey(); @@ -121,4 +157,4 @@ namespace WireMock.Net.ConsoleApplication System.Console.ReadKey(); } } -} +} \ No newline at end of file diff --git a/src/WireMock.Net/Admin/Mappings/MappingModel.cs b/src/WireMock.Net/Admin/Mappings/MappingModel.cs index b21c371e..62ddd6d8 100644 --- a/src/WireMock.Net/Admin/Mappings/MappingModel.cs +++ b/src/WireMock.Net/Admin/Mappings/MappingModel.cs @@ -31,6 +31,22 @@ namespace WireMock.Admin.Mappings /// public int? Priority { get; set; } + /// + /// Scenario. + /// + public string Scenario { get; set; } + + /// + /// Execution state condition for the current mapping. + /// + public object WhenStateIs { get; set; } + + /// + /// The next state which will be signaled after the current mapping execution. + /// In case the value is null state will not be changed. + /// + public object SetStateTo { get; set; } + /// /// Gets or sets the request. /// diff --git a/src/WireMock.Net/Matchers/Request/RequestMessageScenarioAndStateMatcher.cs b/src/WireMock.Net/Matchers/Request/RequestMessageScenarioAndStateMatcher.cs index 824f473c..a51dc1ec 100644 --- a/src/WireMock.Net/Matchers/Request/RequestMessageScenarioAndStateMatcher.cs +++ b/src/WireMock.Net/Matchers/Request/RequestMessageScenarioAndStateMatcher.cs @@ -5,7 +5,7 @@ namespace WireMock.Matchers.Request /// /// The scenario and state matcher. /// - public class RequestMessageScenarioAndStateMatcher : IRequestMatcher + internal class RequestMessageScenarioAndStateMatcher : IRequestMatcher { ///// ///// Scenario. diff --git a/src/WireMock.Net/Serialization/MappingConverter.cs b/src/WireMock.Net/Serialization/MappingConverter.cs index a06e8da8..48c3e567 100644 --- a/src/WireMock.Net/Serialization/MappingConverter.cs +++ b/src/WireMock.Net/Serialization/MappingConverter.cs @@ -32,6 +32,9 @@ namespace WireMock.Serialization Guid = mapping.Guid, Title = mapping.Title, Priority = mapping.Priority, + Scenario = mapping.Scenario, + WhenStateIs = mapping.ExecutionConditionState, + SetStateTo = mapping.NextState, Request = new RequestModel { ClientIP = clientIPMatchers != null && clientIPMatchers.Any() ? new ClientIPModel diff --git a/src/WireMock.Net/Server/FluentMockServer.Admin.cs b/src/WireMock.Net/Server/FluentMockServer.Admin.cs index c00445b1..aef64b9e 100644 --- a/src/WireMock.Net/Server/FluentMockServer.Admin.cs +++ b/src/WireMock.Net/Server/FluentMockServer.Admin.cs @@ -322,6 +322,13 @@ namespace WireMock.Server if (mappingModel.Priority != null) respondProvider = respondProvider.AtPriority(mappingModel.Priority.Value); + if (mappingModel.Scenario != null) + { + respondProvider = respondProvider.InScenario(mappingModel.Scenario); + respondProvider = respondProvider.WhenStateIs(mappingModel.WhenStateIs); + respondProvider = respondProvider.WillSetStateTo(mappingModel.SetStateTo); + } + respondProvider.RespondWith(responseBuilder); }