Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
StefH committed Aug 8, 2018
1 parent 36866d9 commit 5ee25fb
Show file tree
Hide file tree
Showing 7 changed files with 323 additions and 271 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,12 @@
<ApplicationIcon>../../WireMock.Net-Logo.ico</ApplicationIcon>
</PropertyGroup>

<ItemGroup>
<None Remove="__admin\mappings\826aff7c-6208-4a3c-923d-575248907db4.json" />
</ItemGroup>

<ItemGroup>
<Compile Include="..\WireMock.Net.ConsoleApplication\MainApp.cs" Link="MainApp.cs" />
</ItemGroup>

<ItemGroup>
<Content Include="__admin\mappings\11111110-a633-40e8-a244-5cb80bc0ab66.json">
<Content Include="__admin\mappings\*.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"Guid": "873d495f-940e-4b86-a1f4-4f0fc7be8b8b",
"Priority": 4,
"Request": {
"Path": {},
"Methods": [
"get"
]
},
"Response": {
"StatusCode": 200,
"BodyDestination": "SameAsSource",
"Body": "NO PATH OR URL",
"UseTransformer": false,
"Headers": {
"Content-Type": "application/json"
}
}
}
510 changes: 255 additions & 255 deletions examples/WireMock.Net.ConsoleApplication/MainApp.cs

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,9 @@
<Content Include="__admin\mappings\11111110-a633-40e8-a244-5cb80bc0ab66.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<None Include="__admin\mappings\873d495f-940e-4b86-a1f4-4f0fc7be8b8b.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\WireMock.Net.StandAlone\WireMock.Net.StandAlone.csproj">
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"Guid": "873d495f-940e-4b86-a1f4-4f0fc7be8b8b",
"Priority": 4,
"Request": {
"Path": {},
"Methods": [
"get"
]
},
"Response": {
"StatusCode": 200,
"BodyDestination": "SameAsSource",
"Body": "NO PATH OR URL",
"UseTransformer": false,
"Headers": {
"Content-Type": "application/json"
}
}
}
6 changes: 3 additions & 3 deletions src/WireMock.Net/Serialization/MatcherMapper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public static IMatcher Map([CanBeNull] MatcherModel matcher)
string matcherName = parts[0];
string matcherType = parts.Length > 1 ? parts[1] : null;

string[] stringPatterns = matcher.Patterns != null ? matcher.Patterns.Cast<string>().ToArray() : new [] { matcher.Pattern as string };
string[] stringPatterns = matcher.Patterns != null ? matcher.Patterns.Cast<string>().ToArray() : new[] { matcher.Pattern as string };
MatchBehaviour matchBehaviour = matcher.RejectOnMatch == true ? MatchBehaviour.RejectOnMatch : MatchBehaviour.AcceptOnMatch;

switch (matcherName)
Expand All @@ -39,7 +39,7 @@ public static IMatcher Map([CanBeNull] MatcherModel matcher)
return new JsonPathMatcher(matchBehaviour, stringPatterns);

case "XPathMatcher":
return new XPathMatcher(matchBehaviour, (string) matcher.Pattern);
return new XPathMatcher(matchBehaviour, (string)matcher.Pattern);

case "WildcardMatcher":
return new WildcardMatcher(matchBehaviour, stringPatterns, matcher.IgnoreCase == true);
Expand All @@ -51,7 +51,7 @@ public static IMatcher Map([CanBeNull] MatcherModel matcher)
throw new NotSupportedException($"Matcher '{matcherName}' with Type '{matcherType}' is not supported.");
}

return new SimMetricsMatcher(matchBehaviour, (string) matcher.Pattern, type);
return new SimMetricsMatcher(matchBehaviour, (string)matcher.Pattern, type);

default:
throw new NotSupportedException($"Matcher '{matcherName}' is not supported.");
Expand Down
31 changes: 23 additions & 8 deletions src/WireMock.Net/Server/FluentMockServer.Admin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -316,9 +316,9 @@ private ResponseMessage MappingPut(RequestMessage requestMessage)
Guid guid = Guid.Parse(requestMessage.Path.TrimStart(AdminMappings.ToCharArray()));

var mappingModel = DeserializeObject<MappingModel>(requestMessage);
DeserializeAndAddOrUpdateMapping(mappingModel, guid);
Guid? guidFromPut = DeserializeAndAddOrUpdateMapping(mappingModel, guid);

return ResponseMessageBuilder.Create("Mapping added or updated", 200, guid);
return ResponseMessageBuilder.Create("Mapping added or updated", 200, guidFromPut);
}

private ResponseMessage MappingDelete(RequestMessage requestMessage)
Expand Down Expand Up @@ -401,13 +401,18 @@ private ResponseMessage MappingsPost(RequestMessage requestMessage)
return ResponseMessageBuilder.Create("Mapping added", 201, guid);
}

private Guid DeserializeAndAddOrUpdateMapping(MappingModel mappingModel, Guid? guid = null, string path = null)
private Guid? DeserializeAndAddOrUpdateMapping(MappingModel mappingModel, Guid? guid = null, string path = null)
{
Check.NotNull(mappingModel, nameof(mappingModel));
Check.NotNull(mappingModel.Request, nameof(mappingModel.Request));
Check.NotNull(mappingModel.Response, nameof(mappingModel.Response));

var requestBuilder = InitRequestBuilder(mappingModel.Request);
var requestBuilder = InitRequestBuilder(mappingModel.Request, true);
if (requestBuilder == null)
{
return null;
}

var responseBuilder = InitResponseBuilder(mappingModel.Response);

var respondProvider = Given(requestBuilder);
Expand Down Expand Up @@ -511,7 +516,7 @@ private ResponseMessage RequestsFind(RequestMessage requestMessage)
{
var requestModel = DeserializeObject<RequestModel>(requestMessage);

var request = (Request)InitRequestBuilder(requestModel);
var request = (Request)InitRequestBuilder(requestModel, false);

var dict = new Dictionary<LogEntry, RequestMatchResult>();
foreach (var logEntry in LogEntries.Where(le => !le.RequestMessage.Path.StartsWith("/__admin/")))
Expand Down Expand Up @@ -551,7 +556,7 @@ private ResponseMessage ScenariosReset(RequestMessage requestMessage)
}
#endregion

private IRequestBuilder InitRequestBuilder(RequestModel requestModel)
private IRequestBuilder InitRequestBuilder(RequestModel requestModel, bool pathOrUrlRequired)
{
IRequestBuilder requestBuilder = Request.Create();

Expand All @@ -571,38 +576,48 @@ private IRequestBuilder InitRequestBuilder(RequestModel requestModel)
}
}

bool pathOrUrlmatchersValid = false;
if (requestModel.Path != null)
{
if (requestModel.Path is string path)
{
requestBuilder = requestBuilder.WithPath(path);
pathOrUrlmatchersValid = true;
}
else
{
var pathModel = JsonUtils.ParseJTokenToObject<PathModel>(requestModel.Path);
if (pathModel?.Matchers != null)
{
requestBuilder = requestBuilder.WithPath(pathModel.Matchers.Select(MatcherMapper.Map).Cast<IStringMatcher>().ToArray());
pathOrUrlmatchersValid = true;
}
}
}

if (requestModel.Url != null)
else if (requestModel.Url != null)
{
if (requestModel.Url is string url)
{
requestBuilder = requestBuilder.WithUrl(url);
pathOrUrlmatchersValid = true;
}
else
{
var urlModel = JsonUtils.ParseJTokenToObject<UrlModel>(requestModel.Url);
if (urlModel?.Matchers != null)
{
requestBuilder = requestBuilder.WithUrl(urlModel.Matchers.Select(MatcherMapper.Map).Cast<IStringMatcher>().ToArray());
pathOrUrlmatchersValid = true;
}
}
}

if (pathOrUrlRequired && !pathOrUrlmatchersValid)
{
_logger.Error("Path or Url matcher is missing for this mapping, this mapping will not be added.");
return null;
}

if (requestModel.Methods != null)
{
requestBuilder = requestBuilder.UsingMethod(requestModel.Methods);
Expand Down

0 comments on commit 5ee25fb

Please sign in to comment.