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);
}