WireMock.Net icon indicating copy to clipboard operation
WireMock.Net copied to clipboard

Introduce a flag to strictly enforce the http method

Open StefH opened this issue 5 years ago • 8 comments

https://github.com/WireMock-Net/WireMock.Net/issues/504

I did notice something else about partial match scores that seemed off. (probably requires a little redesign). For our team to continue using wiremock.net we need to trust that the Http VERB is ALWAYS respected. I've been noticing that, even when a post call is fired, Get matches are being favored (given higher scores) over POST calls (in this case because of the bug mentioned above, the POST call has a lower score because it is failing to match on the body matcher). This seems off. It should match on the highest score, for only a single verb type. I can't imagine a scenario where someone is okay with a get request/response being returned for a post call in an integration test??? That would be a broken integration test to me. Can we introduce a flag to strictly enforce just the verb?

StefH avatar Oct 12 '20 18:10 StefH

@RiccoFerraro in this scenario ; do you use "AllowPartialMapping"? https://github.com/WireMock-Net/WireMock.Net/wiki/Settings#allowpartialmapping

StefH avatar Oct 12 '20 18:10 StefH

Hi @StefH. Yes that is the case.

RiccoFerraro avatar Oct 12 '20 18:10 RiccoFerraro

Partial mapping is very useful, but I need to have partial mapping, only for the correct verb type

RiccoFerraro avatar Oct 12 '20 18:10 RiccoFerraro

Also @StefH would AllowPartialMapping = false ever work for a POST request with a json body given https://github.com/WireMock-Net/WireMock.Net/issues/504? It seems to return a 0 or the body matcher and reject all strict mapping when I try that

RiccoFerraro avatar Oct 12 '20 19:10 RiccoFerraro

Normally you would not use AllowPartialMapping (set it to false), only use AllowPartialMapping in special cases/scenarios.

If you have troubles matching a POST request with a JSON body --> please provide a full example project, so that I can investigate it because it should work as designed.

StefH avatar Oct 12 '20 19:10 StefH

Hello @RiccoFerraro ,

Maybe as a work-around, you can define the Priority? See https://github.com/WireMock-Net/WireMock.Net/wiki/Stubbing#stub-priority

And https://app.swaggerhub.com/apis/StefHeyenrath/WireMock/1.0.13.0#/MappingModel

StefH avatar Oct 26 '20 06:10 StefH

Hi @StefH , thanks for the response and for the idea. That is really cool. However, I'm not sure it works with my use case. I'm really trying to use record playback functionality as much as possible. In our case, Record/Playback is preferable because it allows us to mitigate unstable dependencies (api's). Stubbing out the endpoints becomes a maintenance nightmare with api's that change frequently. Is priority something that could be set for record playback as a flag somehow? I think the (probably) better solution that you already alluded to is going to be to refactor our integration tests which use wiremock's partial mapping to instead use strict mapping. That is dependent on post body request properties being correctly matched though. Is the fix for that published to nuget.org yet?

RiccoFerraro avatar Oct 27 '20 05:10 RiccoFerraro

About your last question : check the https://github.com/WireMock-Net/WireMock.Net/blob/master/CHANGELOG.md for that.

StefH avatar Oct 27 '20 07:10 StefH