h2non / gock

HTTP traffic mocking and testing made easy in Go ༼ʘ̚ل͜ʘ̚༽
https://pkg.go.dev/github.com/h2non/gock
MIT License
2.09k stars 107 forks source link

Support for custom mime types #87

Closed cakejelly closed 3 years ago

cakejelly commented 3 years ago

I'm having trouble trying to write a mock that matches POST requests based on the request body and the issue seems to be a result of gock being a bit too strict when it comes to validating mime types.

From reading the source code I noticed that gock checks to see if the request content type header value matches a fixed list of supported mime types: https://github.com/h2non/gock/blob/f77fde839b2a8bd6e8de3e89f2a47a2baa1fb6ce/matchers.go#L21-L28 but the problem is that the API i'm writing a mock for uses a custom json mime type like application/vnd.apiname.v1+json, so it never matches.

Do you have any suggestions on how I could workaround this?

h2non commented 3 years ago

This is a hard limitation, but ideally, the matcher should also accept potentially text-based MIME types or explicitly defined text-based MIME types via a new API mock method, e.g: mock.BodyTypes("application/vnd.apiname.v1+json")

Would you like to send a PR? That would possibly be the faster way to proceed forward.

cakejelly commented 3 years ago

@h2non Thanks for the quick reply. After submitting the issue I discovered the ability to add custom matchers, which allowed me to workaround this limitation pretty easily. I think the new method you're suggesting would be a nice addition though and I'd be happy to submit a PR.

If I understand your suggestion correctly, this new method would be used in conjunction with a body matcher? E.g. something like:

gock.New("http://foo.com").
    Post("/bar").
    BodyTypes("application/vnd.apiname.v1+json").
    BodyString(`{"foo": "bar"}`).
    Reply(200).
    JSON(map[string]string{"foo": "bar"})
h2non commented 3 years ago

That's exactly it. Happy to review and merge the PR!

cakejelly commented 3 years ago

Closing as this is fixed now

https://github.com/h2non/gock/pull/88 https://github.com/h2non/gock/releases/tag/v1.1.1