From 71daa77aa495195b553db6a948ab3d5c95a8fa6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Drzyma=C5=82a?= Date: Wed, 8 Jan 2025 17:05:47 +0100 Subject: [PATCH] chore: support application/vnd.api+json content type --- internal/app/pactproxy/interaction.go | 11 ++++++----- internal/app/pactproxy/proxy.go | 9 +++++---- internal/app/proxy_test.go | 6 ++++++ 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/internal/app/pactproxy/interaction.go b/internal/app/pactproxy/interaction.go index d84dde9..e770b6b 100644 --- a/internal/app/pactproxy/interaction.go +++ b/internal/app/pactproxy/interaction.go @@ -14,10 +14,11 @@ import ( ) const ( - mediaTypeJSON = "application/json" - mediaTypeText = "text/plain" - mediaTypeXml = "application/xml" - mediaTypeCsv = "text/csv" + mediaTypeJSON = "application/json" + mediaTypeJSONAPI = "application/vnd.api+json" + mediaTypeText = "text/plain" + mediaTypeXml = "application/xml" + mediaTypeCsv = "text/csv" ) type pathMatcher interface { @@ -116,7 +117,7 @@ func LoadInteraction(data []byte, alias string) (*Interaction, error) { } switch mediaType { - case mediaTypeJSON: + case mediaTypeJSON, mediaTypeJSONAPI: interaction.addJSONConstraintsFromPact("$.body", propertiesWithMatchingRule, requestBody) return interaction, nil case mediaTypeText, mediaTypeCsv, mediaTypeXml: diff --git a/internal/app/pactproxy/proxy.go b/internal/app/pactproxy/proxy.go index 6ac226a..352f353 100644 --- a/internal/app/pactproxy/proxy.go +++ b/internal/app/pactproxy/proxy.go @@ -36,10 +36,11 @@ type Config struct { } var supportedMediaTypes = map[string]func([]byte, *url.URL) (requestDocument, error){ - mediaTypeJSON: ParseJSONRequest, - mediaTypeText: ParsePlainTextRequest, - mediaTypeCsv: ParsePlainTextRequest, - mediaTypeXml: ParsePlainTextRequest, + mediaTypeJSON: ParseJSONRequest, + mediaTypeJSONAPI: ParseJSONRequest, + mediaTypeText: ParsePlainTextRequest, + mediaTypeCsv: ParsePlainTextRequest, + mediaTypeXml: ParsePlainTextRequest, } type api struct { diff --git a/internal/app/proxy_test.go b/internal/app/proxy_test.go index 3f3f9fa..8fc1fdd 100644 --- a/internal/app/proxy_test.go +++ b/internal/app/proxy_test.go @@ -296,6 +296,12 @@ func createNonJsonTestCases() map[string]nonJsonTestCase { respContentType: "application/json", respBody: `{"status":"ok"}`, }, + "application/vnd.api+json request and application/json response": { + reqContentType: "application/vnd.api+json", + reqBody: `{"firstname":"foo"}`, + respContentType: "application/json", + respBody: `{"status":"ok"}`, + }, } }