From dae8c6fd36499f9de31e5bff39f591302666c876 Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Sat, 7 Oct 2017 17:35:07 +0200 Subject: [PATCH] Created Scenarios and Statefull behaviour (markdown) --- Scenarios-and-Statefull-behaviour.md | 50 ++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 Scenarios-and-Statefull-behaviour.md diff --git a/Scenarios-and-Statefull-behaviour.md b/Scenarios-and-Statefull-behaviour.md new file mode 100644 index 0000000..f1a554e --- /dev/null +++ b/Scenarios-and-Statefull-behaviour.md @@ -0,0 +1,50 @@ +# Scenarios + +WireMock.net supports state via the notion of scenarios. A scenario is essentially a state machine whose states can be arbitrarily assigned. Stub mappings can be configured to match on scenario state, such that stub A can be returned initially, then stub B once the next scenario state has been triggered. + +For example, suppose we’re writing a to-do list application consisting of a rich client of some kind talking to a REST service. We want to test that our UI can read the to-do list, add an item and refresh itself, showing the updated list. + +Example test code: +```c# +// Assign +_server = FluentMockServer.Start(); + +_server + .Given(Request.Create() + .WithPath("/todo/items") + .UsingGet()) + .InScenario("To do list") + .WillSetStateTo("TodoList State Started") + .RespondWith(Response.Create() + .WithBody("Buy milk")); + +_server + .Given(Request.Create() + .WithPath("/todo/items") + .UsingPost()) + .InScenario("To do list") + .WhenStateIs("TodoList State Started") + .WillSetStateTo("Cancel newspaper item added") + .RespondWith(Response.Create() + .WithStatusCode(201)); + +_server + .Given(Request.Create() + .WithPath("/todo/items") + .UsingGet()) + .InScenario("To do list") + .WhenStateIs("Cancel newspaper item added") + .RespondWith(Response.Create() + .WithBody("Buy milk;Cancel newspaper subscription")); + +// Act and Assert +string url = "http://localhost:" + _server.Ports[0]; +string getResponse1 = await new HttpClient().GetStringAsync(url + "/todo/items"); +Check.That(getResponse1).Equals("Buy milk"); + +var postResponse = await new HttpClient().PostAsync(url + "/todo/items", new StringContent("Cancel newspaper subscription")); +Check.That(postResponse.StatusCode).Equals(HttpStatusCode.Created); + +string getResponse2 = await new HttpClient().GetStringAsync(url + "/todo/items"); +Check.That(getResponse2).Equals("Buy milk;Cancel newspaper subscription"); +```