Expose scenario states (#168)

* Scenarios (WIP)

* Update ToJson and StatefulBehaviorTests

* fix tests

* Update comment
This commit is contained in:
Stef Heyenrath
2018-07-18 21:29:49 +02:00
committed by GitHub
parent 6b0924029f
commit 8f34291ea9
15 changed files with 136 additions and 58 deletions

View File

@@ -9,6 +9,7 @@ using JetBrains.Annotations;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using WireMock.Admin.Mappings;
using WireMock.Admin.Scenarios;
using WireMock.Admin.Settings;
using WireMock.Http;
using WireMock.Logging;
@@ -41,7 +42,13 @@ namespace WireMock.Server
private readonly JsonSerializerSettings _settings = new JsonSerializerSettings
{
Formatting = Formatting.Indented,
NullValueHandling = NullValueHandling.Ignore,
NullValueHandling = NullValueHandling.Ignore
};
private readonly JsonSerializerSettings _settingsIncludeNullValues = new JsonSerializerSettings
{
Formatting = Formatting.Indented,
NullValueHandling = NullValueHandling.Include
};
#region InitAdmin
@@ -525,13 +532,15 @@ namespace WireMock.Server
#region Scenarios
private ResponseMessage ScenariosGet(RequestMessage requestMessage)
{
var scenarios = Scenarios.ToArray().Select(s => new
var scenariosStates = Scenarios.Values.Select(s => new ScenarioStateModel
{
Name = s.Key,
Started = s.Value != null,
NextState = s.Value
Name = s.Name,
NextState = s.NextState,
Started = s.Started,
Finished = s.Finished
});
return ToJson(scenarios);
return ToJson(scenariosStates, true);
}
private ResponseMessage ScenariosReset(RequestMessage requestMessage)
@@ -706,11 +715,11 @@ namespace WireMock.Server
return responseBuilder;
}
private ResponseMessage ToJson<T>(T result)
private ResponseMessage ToJson<T>(T result, bool keepNullValues = false)
{
return new ResponseMessage
{
Body = JsonConvert.SerializeObject(result, _settings),
Body = JsonConvert.SerializeObject(result, keepNullValues ? _settingsIncludeNullValues : _settings),
StatusCode = 200,
Headers = new Dictionary<string, WireMockList<string>> { { HttpKnownHeaderNames.ContentType, new WireMockList<string>("application/json") } }
};

View File

@@ -56,7 +56,7 @@ namespace WireMock.Server
/// Gets the scenarios.
/// </summary>
[PublicAPI]
public ConcurrentDictionary<string, object> Scenarios => new ConcurrentDictionary<string, object>(_options.Scenarios);
public ConcurrentDictionary<string, ScenarioState> Scenarios => new ConcurrentDictionary<string, ScenarioState>(_options.Scenarios);
#region IDisposable Members
/// <summary>

View File

@@ -66,13 +66,13 @@ namespace WireMock.Server
/// </summary>
/// <param name="state">Any object which identifies the current state</param>
/// <returns>The <see cref="IRespondWithAProvider"/>.</returns>
IRespondWithAProvider WhenStateIs(object state);
IRespondWithAProvider WhenStateIs(string state);
/// <summary>
/// Once this mapping is executed the state will be changed to specified one.
/// </summary>
/// <param name="state">Any object which identifies the new state</param>
/// <returns>The <see cref="IRespondWithAProvider"/>.</returns>
IRespondWithAProvider WillSetStateTo(object state);
IRespondWithAProvider WillSetStateTo(string state);
}
}

View File

@@ -12,8 +12,8 @@ namespace WireMock.Server
private int _priority;
private string _title;
private string _path;
private object _executionConditionState;
private object _nextState;
private string _executionConditionState;
private string _nextState;
private string _scenario;
private readonly RegistrationCallback _registrationCallback;
private readonly IRequestMatcher _requestMatcher;
@@ -87,25 +87,20 @@ namespace WireMock.Server
}
/// <see cref="IRespondWithAProvider.WhenStateIs"/>
public IRespondWithAProvider WhenStateIs(object state)
public IRespondWithAProvider WhenStateIs(string state)
{
if (string.IsNullOrEmpty(_scenario))
{
throw new NotSupportedException("Unable to set state condition when no scenario is defined.");
}
//if (_nextState != null)
//{
// throw new NotSupportedException("Unable to set state condition when next state is defined.");
//}
_executionConditionState = state;
return this;
}
/// <see cref="IRespondWithAProvider.WillSetStateTo"/>
public IRespondWithAProvider WillSetStateTo(object state)
public IRespondWithAProvider WillSetStateTo(string state)
{
if (string.IsNullOrEmpty(_scenario))
{