From f718679516b57651f106b8b9786d7cfd73adc5b9 Mon Sep 17 00:00:00 2001 From: Matt Fellows Date: Tue, 28 Jun 2022 22:35:15 +1000 Subject: [PATCH] refactor: rename builder func signature struct names to reduce noise in API --- consumer/http_v2.go | 48 +++++++-------- consumer/http_v3.go | 48 +++++++-------- consumer/http_v4.go | 58 +++++++++---------- consumer/http_v4_test.go | 4 +- examples/basic_test.go | 2 +- examples/consumer_v2_test.go | 8 +-- examples/consumer_v3_test.go | 4 +- examples/consumer_v4_test.go | 4 +- .../pacts/PactGoV4Consumer-V4Provider.json | 2 +- examples/pacts/grpcconsumer-grpcprovider.json | 2 +- message/v4/synchronous_message.go | 8 +-- 11 files changed, 94 insertions(+), 94 deletions(-) diff --git a/consumer/http_v2.go b/consumer/http_v2.go index 31ef7c8e3..a1cb59051 100644 --- a/consumer/http_v2.go +++ b/consumer/http_v2.go @@ -65,9 +65,9 @@ type V2InteractionWithRequest struct { provider *V2HTTPMockProvider } -type V2RequestBuilder func(*V2InteractionWithRequestBuilder) +type V2RequestBuilderFunc func(*V2RequestBuilder) -type V2InteractionWithRequestBuilder struct { +type V2RequestBuilder struct { interaction *Interaction provider *V2HTTPMockProvider } @@ -106,16 +106,16 @@ func (i *V2InteractionWithCompleteRequest) WithCompleteResponse(response Respons } // WithRequest provides a builder for the expected request -func (i *UnconfiguredV2Interaction) WithRequest(method Method, path string, builders ...V2RequestBuilder) *V2InteractionWithRequest { +func (i *UnconfiguredV2Interaction) WithRequest(method Method, path string, builders ...V2RequestBuilderFunc) *V2InteractionWithRequest { return i.WithRequestPathMatcher(method, matchers.String(path), builders...) } // WithRequestPathMatcher allows a matcher in the expected request path -func (i *UnconfiguredV2Interaction) WithRequestPathMatcher(method Method, path matchers.Matcher, builders ...V2RequestBuilder) *V2InteractionWithRequest { +func (i *UnconfiguredV2Interaction) WithRequestPathMatcher(method Method, path matchers.Matcher, builders ...V2RequestBuilderFunc) *V2InteractionWithRequest { i.interaction.interaction.WithRequest(string(method), path) for _, builder := range builders { - builder(&V2InteractionWithRequestBuilder{ + builder(&V2RequestBuilder{ interaction: i.interaction, provider: i.provider, }) @@ -128,28 +128,28 @@ func (i *UnconfiguredV2Interaction) WithRequestPathMatcher(method Method, path m } // Query specifies any query string on the expect request -func (i *V2InteractionWithRequestBuilder) Query(key string, values ...matchers.Matcher) *V2InteractionWithRequestBuilder { +func (i *V2RequestBuilder) Query(key string, values ...matchers.Matcher) *V2RequestBuilder { i.interaction.interaction.WithQuery(keyValuesToMapStringArrayInterface(key, values...)) return i } // Header adds a header to the expected request -func (i *V2InteractionWithRequestBuilder) Header(key string, values ...matchers.Matcher) *V2InteractionWithRequestBuilder { +func (i *V2RequestBuilder) Header(key string, values ...matchers.Matcher) *V2RequestBuilder { i.interaction.interaction.WithRequestHeaders(keyValuesToMapStringArrayInterface(key, values...)) return i } // Headers sets the headers on the expected request -func (i *V2InteractionWithRequestBuilder) Headers(headers matchers.HeadersMatcher) *V2InteractionWithRequestBuilder { +func (i *V2RequestBuilder) Headers(headers matchers.HeadersMatcher) *V2RequestBuilder { i.interaction.interaction.WithRequestHeaders(headersMatcherToNativeHeaders(headers)) return i } // JSONBody adds a JSON body to the expected request -func (i *V2InteractionWithRequestBuilder) JSONBody(body interface{}) *V2InteractionWithRequestBuilder { +func (i *V2RequestBuilder) JSONBody(body interface{}) *V2RequestBuilder { // TODO: Don't like panic, but not sure if there is a better builder experience? if err := validateMatchers(i.interaction.specificationVersion, body); err != nil { panic(err) @@ -172,21 +172,21 @@ func (i *V2InteractionWithRequestBuilder) JSONBody(body interface{}) *V2Interact } // BinaryBody adds a binary body to the expected request -func (i *V2InteractionWithRequestBuilder) BinaryBody(body []byte) *V2InteractionWithRequestBuilder { +func (i *V2RequestBuilder) BinaryBody(body []byte) *V2RequestBuilder { i.interaction.interaction.WithBinaryRequestBody(body) return i } // MultipartBody adds a multipart body to the expected request -func (i *V2InteractionWithRequestBuilder) MultipartBody(contentType string, filename string, mimePartName string) *V2InteractionWithRequestBuilder { +func (i *V2RequestBuilder) MultipartBody(contentType string, filename string, mimePartName string) *V2RequestBuilder { i.interaction.interaction.WithRequestMultipartFile(contentType, filename, mimePartName) return i } // Body adds general body to the expected request -func (i *V2InteractionWithRequestBuilder) Body(contentType string, body []byte) *V2InteractionWithRequestBuilder { +func (i *V2RequestBuilder) Body(contentType string, body []byte) *V2RequestBuilder { // Check if someone tried to add an object as a string representation // as per original allowed implementation, e.g. // { "foo": "bar", "baz": like("bat") } @@ -202,19 +202,19 @@ func (i *V2InteractionWithRequestBuilder) Body(contentType string, body []byte) } // BodyMatch uses struct tags to automatically determine matchers from the given struct -func (i *V2InteractionWithRequestBuilder) BodyMatch(body interface{}) *V2InteractionWithRequestBuilder { +func (i *V2RequestBuilder) BodyMatch(body interface{}) *V2RequestBuilder { i.interaction.interaction.WithJSONRequestBody(matchers.MatchV2(body)) return i } // WillRespondWith sets the expected status and provides a response builder -func (i *V2InteractionWithRequest) WillRespondWith(status int, builders ...V2ResponseBuilder) *V2InteractionWithResponse { +func (i *V2InteractionWithRequest) WillRespondWith(status int, builders ...V2ResponseBuilderFunc) *V2InteractionWithResponse { i.interaction.interaction.WithStatus(status) for _, builder := range builders { - builder(&V2InteractionWithResponseBuilder{ + builder(&V2ResponseBuilder{ interaction: i.interaction, provider: i.provider, }) @@ -226,9 +226,9 @@ func (i *V2InteractionWithRequest) WillRespondWith(status int, builders ...V2Res } } -type V2ResponseBuilder func(*V2InteractionWithResponseBuilder) +type V2ResponseBuilderFunc func(*V2ResponseBuilder) -type V2InteractionWithResponseBuilder struct { +type V2ResponseBuilder struct { interaction *Interaction provider *V2HTTPMockProvider } @@ -239,21 +239,21 @@ type V2InteractionWithResponse struct { } // Header adds a header to the expected response -func (i *V2InteractionWithResponseBuilder) Header(key string, values ...matchers.Matcher) *V2InteractionWithResponseBuilder { +func (i *V2ResponseBuilder) Header(key string, values ...matchers.Matcher) *V2ResponseBuilder { i.interaction.interaction.WithResponseHeaders(keyValuesToMapStringArrayInterface(key, values...)) return i } // Headers sets the headers on the expected response -func (i *V2InteractionWithResponseBuilder) Headers(headers matchers.HeadersMatcher) *V2InteractionWithResponseBuilder { +func (i *V2ResponseBuilder) Headers(headers matchers.HeadersMatcher) *V2ResponseBuilder { i.interaction.interaction.WithResponseHeaders(headersMatcherToNativeHeaders(headers)) return i } // JSONBody adds a JSON body to the expected response -func (i *V2InteractionWithResponseBuilder) JSONBody(body interface{}) *V2InteractionWithResponseBuilder { +func (i *V2ResponseBuilder) JSONBody(body interface{}) *V2ResponseBuilder { // TODO: Don't like panic, how to build a better builder here - nil return + log? if err := validateMatchers(i.interaction.specificationVersion, body); err != nil { panic(err) @@ -275,28 +275,28 @@ func (i *V2InteractionWithResponseBuilder) JSONBody(body interface{}) *V2Interac } // BinaryBody adds a binary body to the expected response -func (i *V2InteractionWithResponseBuilder) BinaryBody(body []byte) *V2InteractionWithResponseBuilder { +func (i *V2ResponseBuilder) BinaryBody(body []byte) *V2ResponseBuilder { i.interaction.interaction.WithBinaryResponseBody(body) return i } // MultipartBody adds a multipart body to the expected response -func (i *V2InteractionWithResponseBuilder) MultipartBody(contentType string, filename string, mimePartName string) *V2InteractionWithResponseBuilder { +func (i *V2ResponseBuilder) MultipartBody(contentType string, filename string, mimePartName string) *V2ResponseBuilder { i.interaction.interaction.WithResponseMultipartFile(contentType, filename, mimePartName) return i } // Body adds general body to the expected request -func (i *V2InteractionWithResponseBuilder) Body(contentType string, body []byte) *V2InteractionWithResponseBuilder { +func (i *V2ResponseBuilder) Body(contentType string, body []byte) *V2ResponseBuilder { i.interaction.interaction.WithResponseBody(contentType, body) return i } // BodyMatch uses struct tags to automatically determine matchers from the given struct -func (i *V2InteractionWithResponseBuilder) BodyMatch(body interface{}) *V2InteractionWithResponseBuilder { +func (i *V2ResponseBuilder) BodyMatch(body interface{}) *V2ResponseBuilder { i.interaction.interaction.WithJSONResponseBody(matchers.MatchV2(body)) return i diff --git a/consumer/http_v3.go b/consumer/http_v3.go index 61ba0e473..242b48748 100644 --- a/consumer/http_v3.go +++ b/consumer/http_v3.go @@ -76,9 +76,9 @@ type V3InteractionWithRequest struct { provider *V3HTTPMockProvider } -type V3RequestBuilder func(*V3InteractionWithRequestBuilder) +type V3RequestBuilderFunc func(*V3RequestBuilder) -type V3InteractionWithRequestBuilder struct { +type V3RequestBuilder struct { interaction *Interaction provider *V3HTTPMockProvider } @@ -92,16 +92,16 @@ func (i *UnconfiguredV3Interaction) UponReceiving(description string) *Unconfigu } // WithRequest provides a builder for the expected request -func (i *UnconfiguredV3Interaction) WithRequest(method Method, path string, builders ...V3RequestBuilder) *V3InteractionWithRequest { +func (i *UnconfiguredV3Interaction) WithRequest(method Method, path string, builders ...V3RequestBuilderFunc) *V3InteractionWithRequest { return i.WithRequestPathMatcher(method, matchers.String(path), builders...) } // WithRequestPathMatcher allows a matcher in the expected request path -func (i *UnconfiguredV3Interaction) WithRequestPathMatcher(method Method, path matchers.Matcher, builders ...V3RequestBuilder) *V3InteractionWithRequest { +func (i *UnconfiguredV3Interaction) WithRequestPathMatcher(method Method, path matchers.Matcher, builders ...V3RequestBuilderFunc) *V3InteractionWithRequest { i.interaction.interaction.WithRequest(string(method), path) for _, builder := range builders { - builder(&V3InteractionWithRequestBuilder{ + builder(&V3RequestBuilder{ interaction: i.interaction, provider: i.provider, }) @@ -114,28 +114,28 @@ func (i *UnconfiguredV3Interaction) WithRequestPathMatcher(method Method, path m } // Query specifies any query string on the expect request -func (i *V3InteractionWithRequestBuilder) Query(key string, values ...matchers.Matcher) *V3InteractionWithRequestBuilder { +func (i *V3RequestBuilder) Query(key string, values ...matchers.Matcher) *V3RequestBuilder { i.interaction.interaction.WithQuery(keyValuesToMapStringArrayInterface(key, values...)) return i } // Header adds a header to the expected request -func (i *V3InteractionWithRequestBuilder) Header(key string, values ...matchers.Matcher) *V3InteractionWithRequestBuilder { +func (i *V3RequestBuilder) Header(key string, values ...matchers.Matcher) *V3RequestBuilder { i.interaction.interaction.WithRequestHeaders(keyValuesToMapStringArrayInterface(key, values...)) return i } // Headers sets the headers on the expected request -func (i *V3InteractionWithRequestBuilder) Headers(headers matchers.HeadersMatcher) *V3InteractionWithRequestBuilder { +func (i *V3RequestBuilder) Headers(headers matchers.HeadersMatcher) *V3RequestBuilder { i.interaction.interaction.WithRequestHeaders(headersMatcherToNativeHeaders(headers)) return i } // JSONBody adds a JSON body to the expected request -func (i *V3InteractionWithRequestBuilder) JSONBody(body interface{}) *V3InteractionWithRequestBuilder { +func (i *V3RequestBuilder) JSONBody(body interface{}) *V3RequestBuilder { // TODO: Don't like panic, but not sure if there is a better builder experience? if err := validateMatchers(i.interaction.specificationVersion, body); err != nil { panic(err) @@ -158,21 +158,21 @@ func (i *V3InteractionWithRequestBuilder) JSONBody(body interface{}) *V3Interact } // BinaryBody adds a binary body to the expected request -func (i *V3InteractionWithRequestBuilder) BinaryBody(body []byte) *V3InteractionWithRequestBuilder { +func (i *V3RequestBuilder) BinaryBody(body []byte) *V3RequestBuilder { i.interaction.interaction.WithBinaryRequestBody(body) return i } // MultipartBody adds a multipart body to the expected request -func (i *V3InteractionWithRequestBuilder) MultipartBody(contentType string, filename string, mimePartName string) *V3InteractionWithRequestBuilder { +func (i *V3RequestBuilder) MultipartBody(contentType string, filename string, mimePartName string) *V3RequestBuilder { i.interaction.interaction.WithRequestMultipartFile(contentType, filename, mimePartName) return i } // Body adds general body to the expected request -func (i *V3InteractionWithRequestBuilder) Body(contentType string, body []byte) *V3InteractionWithRequestBuilder { +func (i *V3RequestBuilder) Body(contentType string, body []byte) *V3RequestBuilder { // Check if someone tried to add an object as a string representation // as per original allowed implementation, e.g. // { "foo": "bar", "baz": like("bat") } @@ -188,19 +188,19 @@ func (i *V3InteractionWithRequestBuilder) Body(contentType string, body []byte) } // BodyMatch uses struct tags to automatically determine matchers from the given struct -func (i *V3InteractionWithRequestBuilder) BodyMatch(body interface{}) *V3InteractionWithRequestBuilder { +func (i *V3RequestBuilder) BodyMatch(body interface{}) *V3RequestBuilder { i.interaction.interaction.WithJSONRequestBody(matchers.MatchV2(body)) return i } // WillRespondWith sets the expected status and provides a response builder -func (i *V3InteractionWithRequest) WillRespondWith(status int, builders ...V3ResponseBuilder) *V3InteractionWithResponse { +func (i *V3InteractionWithRequest) WillRespondWith(status int, builders ...V3ResponseBuilderFunc) *V3InteractionWithResponse { i.interaction.interaction.WithStatus(status) for _, builder := range builders { - builder(&V3InteractionWithResponseBuilder{ + builder(&V3ResponseBuilder{ interaction: i.interaction, provider: i.provider, }) @@ -212,9 +212,9 @@ func (i *V3InteractionWithRequest) WillRespondWith(status int, builders ...V3Res } } -type V3ResponseBuilder func(*V3InteractionWithResponseBuilder) +type V3ResponseBuilderFunc func(*V3ResponseBuilder) -type V3InteractionWithResponseBuilder struct { +type V3ResponseBuilder struct { interaction *Interaction provider *V3HTTPMockProvider } @@ -225,21 +225,21 @@ type V3InteractionWithResponse struct { } // Header adds a header to the expected response -func (i *V3InteractionWithResponseBuilder) Header(key string, values ...matchers.Matcher) *V3InteractionWithResponseBuilder { +func (i *V3ResponseBuilder) Header(key string, values ...matchers.Matcher) *V3ResponseBuilder { i.interaction.interaction.WithResponseHeaders(keyValuesToMapStringArrayInterface(key, values...)) return i } // Headers sets the headers on the expected response -func (i *V3InteractionWithResponseBuilder) Headers(headers matchers.HeadersMatcher) *V3InteractionWithResponseBuilder { +func (i *V3ResponseBuilder) Headers(headers matchers.HeadersMatcher) *V3ResponseBuilder { i.interaction.interaction.WithResponseHeaders(headersMatcherToNativeHeaders(headers)) return i } // JSONBody adds a JSON body to the expected response -func (i *V3InteractionWithResponseBuilder) JSONBody(body interface{}) *V3InteractionWithResponseBuilder { +func (i *V3ResponseBuilder) JSONBody(body interface{}) *V3ResponseBuilder { // TODO: Don't like panic, how to build a better builder here - nil return + log? if err := validateMatchers(i.interaction.specificationVersion, body); err != nil { panic(err) @@ -261,28 +261,28 @@ func (i *V3InteractionWithResponseBuilder) JSONBody(body interface{}) *V3Interac } // BinaryBody adds a binary body to the expected response -func (i *V3InteractionWithResponseBuilder) BinaryBody(body []byte) *V3InteractionWithResponseBuilder { +func (i *V3ResponseBuilder) BinaryBody(body []byte) *V3ResponseBuilder { i.interaction.interaction.WithBinaryResponseBody(body) return i } // MultipartBody adds a multipart body to the expected response -func (i *V3InteractionWithResponseBuilder) MultipartBody(contentType string, filename string, mimePartName string) *V3InteractionWithResponseBuilder { +func (i *V3ResponseBuilder) MultipartBody(contentType string, filename string, mimePartName string) *V3ResponseBuilder { i.interaction.interaction.WithResponseMultipartFile(contentType, filename, mimePartName) return i } // Body adds general body to the expected request -func (i *V3InteractionWithResponseBuilder) Body(contentType string, body []byte) *V3InteractionWithResponseBuilder { +func (i *V3ResponseBuilder) Body(contentType string, body []byte) *V3ResponseBuilder { i.interaction.interaction.WithResponseBody(contentType, body) return i } // BodyMatch uses struct tags to automatically determine matchers from the given struct -func (i *V3InteractionWithResponseBuilder) BodyMatch(body interface{}) *V3InteractionWithResponseBuilder { +func (i *V3ResponseBuilder) BodyMatch(body interface{}) *V3ResponseBuilder { i.interaction.interaction.WithJSONResponseBody(matchers.MatchV2(body)) return i diff --git a/consumer/http_v4.go b/consumer/http_v4.go index b25d3d189..e6a9028b1 100644 --- a/consumer/http_v4.go +++ b/consumer/http_v4.go @@ -76,9 +76,9 @@ type V4InteractionWithRequest struct { provider *V4HTTPMockProvider } -type V4RequestBuilder func(*V4InteractionWithRequestBuilder) +type V4RequestBuilderFunc func(*V4RequestBuilder) -type V4InteractionWithRequestBuilder struct { +type V4RequestBuilder struct { interaction *Interaction provider *V4HTTPMockProvider } @@ -98,16 +98,16 @@ func (i *V4UnconfiguredInteraction) UponReceiving(description string) *V4Unconfi // TODO: all in one? // WithRequest provides a builder for the expected request -func (i *V4UnconfiguredInteraction) WithRequest(method Method, path string, builders ...V4RequestBuilder) *V4InteractionWithRequest { +func (i *V4UnconfiguredInteraction) WithRequest(method Method, path string, builders ...V4RequestBuilderFunc) *V4InteractionWithRequest { return i.WithRequestPathMatcher(method, matchers.String(path), builders...) } // WithRequestPathMatcher allows a matcher in the expected request path -func (i *V4UnconfiguredInteraction) WithRequestPathMatcher(method Method, path matchers.Matcher, builders ...V4RequestBuilder) *V4InteractionWithRequest { +func (i *V4UnconfiguredInteraction) WithRequestPathMatcher(method Method, path matchers.Matcher, builders ...V4RequestBuilderFunc) *V4InteractionWithRequest { i.interaction.interaction.WithRequest(string(method), path) for _, builder := range builders { - builder(&V4InteractionWithRequestBuilder{ + builder(&V4RequestBuilder{ interaction: i.interaction, provider: i.provider, }) @@ -120,28 +120,28 @@ func (i *V4UnconfiguredInteraction) WithRequestPathMatcher(method Method, path m } // Query specifies any query string on the expect request -func (i *V4InteractionWithRequestBuilder) Query(key string, values ...matchers.Matcher) *V4InteractionWithRequestBuilder { +func (i *V4RequestBuilder) Query(key string, values ...matchers.Matcher) *V4RequestBuilder { i.interaction.interaction.WithQuery(keyValuesToMapStringArrayInterface(key, values...)) return i } // Header adds a header to the expected request -func (i *V4InteractionWithRequestBuilder) Header(key string, values ...matchers.Matcher) *V4InteractionWithRequestBuilder { +func (i *V4RequestBuilder) Header(key string, values ...matchers.Matcher) *V4RequestBuilder { i.interaction.interaction.WithRequestHeaders(keyValuesToMapStringArrayInterface(key, values...)) return i } // Headers sets the headers on the expected request -func (i *V4InteractionWithRequestBuilder) Headers(headers matchers.HeadersMatcher) *V4InteractionWithRequestBuilder { +func (i *V4RequestBuilder) Headers(headers matchers.HeadersMatcher) *V4RequestBuilder { i.interaction.interaction.WithRequestHeaders(headersMatcherToNativeHeaders(headers)) return i } // JSONBody adds a JSON body to the expected request -func (i *V4InteractionWithRequestBuilder) JSONBody(body interface{}) *V4InteractionWithRequestBuilder { +func (i *V4RequestBuilder) JSONBody(body interface{}) *V4RequestBuilder { // TODO: Don't like panic, but not sure if there is a better builder experience? if err := validateMatchers(i.interaction.specificationVersion, body); err != nil { panic(err) @@ -164,21 +164,21 @@ func (i *V4InteractionWithRequestBuilder) JSONBody(body interface{}) *V4Interact } // BinaryBody adds a binary body to the expected request -func (i *V4InteractionWithRequestBuilder) BinaryBody(body []byte) *V4InteractionWithRequestBuilder { +func (i *V4RequestBuilder) BinaryBody(body []byte) *V4RequestBuilder { i.interaction.interaction.WithBinaryRequestBody(body) return i } // MultipartBody adds a multipart body to the expected request -func (i *V4InteractionWithRequestBuilder) MultipartBody(contentType string, filename string, mimePartName string) *V4InteractionWithRequestBuilder { +func (i *V4RequestBuilder) MultipartBody(contentType string, filename string, mimePartName string) *V4RequestBuilder { i.interaction.interaction.WithRequestMultipartFile(contentType, filename, mimePartName) return i } // Body adds general body to the expected request -func (i *V4InteractionWithRequestBuilder) Body(contentType string, body []byte) *V4InteractionWithRequestBuilder { +func (i *V4RequestBuilder) Body(contentType string, body []byte) *V4RequestBuilder { // Check if someone tried to add an object as a string representation // as per original allowed implementation, e.g. // { "foo": "bar", "baz": like("bat") } @@ -194,19 +194,19 @@ func (i *V4InteractionWithRequestBuilder) Body(contentType string, body []byte) } // BodyMatch uses struct tags to automatically determine matchers from the given struct -func (i *V4InteractionWithRequestBuilder) BodyMatch(body interface{}) *V4InteractionWithRequestBuilder { +func (i *V4RequestBuilder) BodyMatch(body interface{}) *V4RequestBuilder { i.interaction.interaction.WithJSONRequestBody(matchers.MatchV2(body)) return i } // WillRespondWith sets the expected status and provides a response builder -func (i *V4InteractionWithRequest) WillRespondWith(status int, builders ...V4ResponseBuilder) *V4InteractionWithResponse { +func (i *V4InteractionWithRequest) WillRespondWith(status int, builders ...V4ResponseBuilderFunc) *V4InteractionWithResponse { i.interaction.interaction.WithStatus(status) for _, builder := range builders { - builder(&V4InteractionWithResponseBuilder{ + builder(&V4ResponseBuilder{ interaction: i.interaction, provider: i.provider, }) @@ -218,9 +218,9 @@ func (i *V4InteractionWithRequest) WillRespondWith(status int, builders ...V4Res } } -type V4ResponseBuilder func(*V4InteractionWithResponseBuilder) +type V4ResponseBuilderFunc func(*V4ResponseBuilder) -type V4InteractionWithResponseBuilder struct { +type V4ResponseBuilder struct { interaction *Interaction provider *V4HTTPMockProvider } @@ -231,21 +231,21 @@ type V4InteractionWithResponse struct { } // Header adds a header to the expected response -func (i *V4InteractionWithResponseBuilder) Header(key string, values ...matchers.Matcher) *V4InteractionWithResponseBuilder { +func (i *V4ResponseBuilder) Header(key string, values ...matchers.Matcher) *V4ResponseBuilder { i.interaction.interaction.WithResponseHeaders(keyValuesToMapStringArrayInterface(key, values...)) return i } // Headers sets the headers on the expected response -func (i *V4InteractionWithResponseBuilder) Headers(headers matchers.HeadersMatcher) *V4InteractionWithResponseBuilder { +func (i *V4ResponseBuilder) Headers(headers matchers.HeadersMatcher) *V4ResponseBuilder { i.interaction.interaction.WithResponseHeaders(headersMatcherToNativeHeaders(headers)) return i } // JSONBody adds a JSON body to the expected response -func (i *V4InteractionWithResponseBuilder) JSONBody(body interface{}) *V4InteractionWithResponseBuilder { +func (i *V4ResponseBuilder) JSONBody(body interface{}) *V4ResponseBuilder { // TODO: Don't like panic, how to build a better builder here - nil return + log? if err := validateMatchers(i.interaction.specificationVersion, body); err != nil { panic(err) @@ -267,28 +267,28 @@ func (i *V4InteractionWithResponseBuilder) JSONBody(body interface{}) *V4Interac } // BinaryBody adds a binary body to the expected response -func (i *V4InteractionWithResponseBuilder) BinaryBody(body []byte) *V4InteractionWithResponseBuilder { +func (i *V4ResponseBuilder) BinaryBody(body []byte) *V4ResponseBuilder { i.interaction.interaction.WithBinaryResponseBody(body) return i } // MultipartBody adds a multipart body to the expected response -func (i *V4InteractionWithResponseBuilder) MultipartBody(contentType string, filename string, mimePartName string) *V4InteractionWithResponseBuilder { +func (i *V4ResponseBuilder) MultipartBody(contentType string, filename string, mimePartName string) *V4ResponseBuilder { i.interaction.interaction.WithResponseMultipartFile(contentType, filename, mimePartName) return i } // Body adds general body to the expected request -func (i *V4InteractionWithResponseBuilder) Body(contentType string, body []byte) *V4InteractionWithResponseBuilder { +func (i *V4ResponseBuilder) Body(contentType string, body []byte) *V4ResponseBuilder { i.interaction.interaction.WithResponseBody(contentType, body) return i } // BodyMatch uses struct tags to automatically determine matchers from the given struct -func (i *V4InteractionWithResponseBuilder) BodyMatch(body interface{}) *V4InteractionWithResponseBuilder { +func (i *V4ResponseBuilder) BodyMatch(body interface{}) *V4ResponseBuilder { i.interaction.interaction.WithJSONResponseBody(matchers.MatchV2(body)) return i @@ -343,14 +343,14 @@ type V4InteractionWithPluginRequest struct { provider *V4HTTPMockProvider } -type PluginRequestBuilder func(*V4InteractionWithPluginRequestBuilder) +type PluginRequestBuilderFunc func(*V4InteractionWithPluginRequestBuilder) type V4InteractionWithPluginRequestBuilder struct { interaction *Interaction } // WithRequest provides a builder for the expected request -func (i *V4InteractionWithPlugin) WithRequest(method Method, path string, builders ...PluginRequestBuilder) *V4InteractionWithPluginRequest { +func (i *V4InteractionWithPlugin) WithRequest(method Method, path string, builders ...PluginRequestBuilderFunc) *V4InteractionWithPluginRequest { i.interaction.interaction.WithRequest(string(method), matchers.String(path)) for _, builder := range builders { @@ -366,7 +366,7 @@ func (i *V4InteractionWithPlugin) WithRequest(method Method, path string, builde } // WithRequestPathMatcher allows a matcher in the expected request path -func (i *V4InteractionWithPlugin) WithRequestPathMatcher(method Method, path matchers.Matcher, builders ...PluginRequestBuilder) *V4InteractionWithPluginRequest { +func (i *V4InteractionWithPlugin) WithRequestPathMatcher(method Method, path matchers.Matcher, builders ...PluginRequestBuilderFunc) *V4InteractionWithPluginRequest { i.interaction.interaction.WithRequest(string(method), path) for _, builder := range builders { @@ -382,7 +382,7 @@ func (i *V4InteractionWithPlugin) WithRequestPathMatcher(method Method, path mat } // WillResponseWithContent provides a builder for the expected response -func (i *V4InteractionWithPluginRequest) WillRespondWith(status int, builders ...PluginResponseBuilder) *V4InteractionWithPluginResponse { +func (i *V4InteractionWithPluginRequest) WillRespondWith(status int, builders ...PluginResponseBuilderFunc) *V4InteractionWithPluginResponse { i.interaction.interaction.WithStatus(status) for _, builder := range builders { @@ -398,7 +398,7 @@ func (i *V4InteractionWithPluginRequest) WillRespondWith(status int, builders .. } } -type PluginResponseBuilder func(*V4InteractionWithPluginResponseBuilder) +type PluginResponseBuilderFunc func(*V4InteractionWithPluginResponseBuilder) type V4InteractionWithPluginResponseBuilder struct { interaction *Interaction diff --git a/consumer/http_v4_test.go b/consumer/http_v4_test.go index 0883e91d6..9bd924a39 100644 --- a/consumer/http_v4_test.go +++ b/consumer/http_v4_test.go @@ -18,7 +18,7 @@ func TestHttpV4TypeSystem(t *testing.T) { err = p.AddInteraction(). Given("some state"). UponReceiving("some scenario"). - WithRequest("GET", "/", func(b *V4InteractionWithRequestBuilder) { + WithRequest("GET", "/", func(b *V4RequestBuilder) { b. Header("Content-Type", S("application/json")). Header("Authorization", Like("Bearer 1234")). @@ -30,7 +30,7 @@ func TestHttpV4TypeSystem(t *testing.T) { "lastName": Like("billy"), }) }). - WillRespondWith(200, func(b *V4InteractionWithResponseBuilder) { + WillRespondWith(200, func(b *V4ResponseBuilder) { b. Header("Content-Type", Regex("application/json", "application\\/json")). JSONBody(Map{ diff --git a/examples/basic_test.go b/examples/basic_test.go index 52f48ba87..7257b665b 100644 --- a/examples/basic_test.go +++ b/examples/basic_test.go @@ -28,7 +28,7 @@ func TestProductAPIClient(t *testing.T) { Given("A product with ID 10 exists"). UponReceiving("A request for Product 10"). WithRequest("GET", "/products/10"). - WillRespondWith(200, func(b *consumer.V2InteractionWithResponseBuilder) { + WillRespondWith(200, func(b *consumer.V2ResponseBuilder) { b.BodyMatch(&Product{}) }). ExecuteTest(t, func(config consumer.MockServerConfig) error { diff --git a/examples/consumer_v2_test.go b/examples/consumer_v2_test.go index 8c4cb11b9..553d701c2 100644 --- a/examples/consumer_v2_test.go +++ b/examples/consumer_v2_test.go @@ -51,7 +51,7 @@ func TestConsumerV2(t *testing.T) { AddInteraction(). Given("User foo exists"). UponReceiving("A request to do a foo"). - WithRequestPathMatcher("POST", Regex("/foobar", `\/foo.*`), func(b *consumer.V2InteractionWithRequestBuilder) { + WithRequestPathMatcher("POST", Regex("/foobar", `\/foo.*`), func(b *consumer.V2RequestBuilder) { b. Header("Content-Type", S("application/json")). Header("Authorization", Like("Bearer 1234")). @@ -64,7 +64,7 @@ func TestConsumerV2(t *testing.T) { // "equality": Equality("a thing"), // Add this in and watch me panic }) }). - WillRespondWith(200, func(b *consumer.V2InteractionWithResponseBuilder) { + WillRespondWith(200, func(b *consumer.V2ResponseBuilder) { b.Header("Content-Type", Regex("application/json", "application\\/json")) b.JSONBody(Map{ "datetime": Regex("2020-01-01", "[0-9\\-]+"), @@ -95,14 +95,14 @@ func TestConsumerV2_Match(t *testing.T) { AddInteraction(). Given("User foo exists"). UponReceiving("A request to do a foo"). - WithRequest("POST", "/foobar", func(b *consumer.V2InteractionWithRequestBuilder) { + WithRequest("POST", "/foobar", func(b *consumer.V2RequestBuilder) { b.Header("Content-Type", S("application/json")) b.Header("Authorization", Like("Bearer 1234")) b.Query("baz", Regex("bar", "[a-z]+"), Regex("bat", "[a-z]+"), Regex("baz", "[a-z]+")) b.BodyMatch(&User{}) }). - WillRespondWith(200, func(b *consumer.V2InteractionWithResponseBuilder) { + WillRespondWith(200, func(b *consumer.V2ResponseBuilder) { b.Header("Content-Type", Regex("application/json", "application\\/json")) b.BodyMatch(&User{}) }). diff --git a/examples/consumer_v3_test.go b/examples/consumer_v3_test.go index 61287864c..ff828aafd 100644 --- a/examples/consumer_v3_test.go +++ b/examples/consumer_v3_test.go @@ -51,7 +51,7 @@ func TestConsumerV3(t *testing.T) { }, }). UponReceiving("A request to do a foo"). - WithRequest("POST", "/foobar", func(b *consumer.V3InteractionWithRequestBuilder) { + WithRequest("POST", "/foobar", func(b *consumer.V3RequestBuilder) { b. Header("Content-Type", S("application/json")). Header("Authorization", Like("Bearer 1234")). @@ -64,7 +64,7 @@ func TestConsumerV3(t *testing.T) { }) }). - WillRespondWith(200, func(b *consumer.V3InteractionWithResponseBuilder) { + WillRespondWith(200, func(b *consumer.V3ResponseBuilder) { b. Header("Content-Type", S("application/json")). JSONBody(Map{ diff --git a/examples/consumer_v4_test.go b/examples/consumer_v4_test.go index 732eefc8d..cbc036193 100644 --- a/examples/consumer_v4_test.go +++ b/examples/consumer_v4_test.go @@ -35,7 +35,7 @@ func TestConsumerV4(t *testing.T) { }, }). UponReceiving("A request to do a foo"). - WithRequest("POST", "/foobar", func(b *consumer.V4InteractionWithRequestBuilder) { + WithRequest("POST", "/foobar", func(b *consumer.V4RequestBuilder) { b. Header("Content-Type", S("application/json")). Header("Authorization", Like("Bearer 1234")). @@ -48,7 +48,7 @@ func TestConsumerV4(t *testing.T) { }) }). - WillRespondWith(200, func(b *consumer.V4InteractionWithResponseBuilder) { + WillRespondWith(200, func(b *consumer.V4ResponseBuilder) { b. Header("Content-Type", S("application/json")). JSONBody(Map{ diff --git a/examples/pacts/PactGoV4Consumer-V4Provider.json b/examples/pacts/PactGoV4Consumer-V4Provider.json index ae2064415..5a06ee796 100644 --- a/examples/pacts/PactGoV4Consumer-V4Provider.json +++ b/examples/pacts/PactGoV4Consumer-V4Provider.json @@ -5,7 +5,7 @@ "interactions": [ { "description": "A request to do a foo", - "key": "8cd0c6d19eb44457", + "key": "21200bba91aaf98b", "pending": false, "providerStates": [ { diff --git a/examples/pacts/grpcconsumer-grpcprovider.json b/examples/pacts/grpcconsumer-grpcprovider.json index de5fa87ae..bd7d48a7f 100644 --- a/examples/pacts/grpcconsumer-grpcprovider.json +++ b/examples/pacts/grpcconsumer-grpcprovider.json @@ -9,7 +9,7 @@ "markup": "```protobuf\nmessage Feature {\n string name = 1;\n message .routeguide.Point location = 2;\n}\n```\n", "markupType": "COMMON_MARK" }, - "key": "474c0e1ab003dafb", + "key": "d81a62841ce862db", "pending": false, "pluginConfiguration": { "protobuf": { diff --git a/message/v4/synchronous_message.go b/message/v4/synchronous_message.go index 212e2a590..ee9f5f789 100644 --- a/message/v4/synchronous_message.go +++ b/message/v4/synchronous_message.go @@ -76,7 +76,7 @@ func (m *SynchronousMessageWithPlugin) UsingPlugin(config PluginConfig) *Synchro } // AddMessage creates a new asynchronous consumer expectation -func (m *UnconfiguredSynchronousMessageBuilder) WithRequest(r RequestBuilder) *SynchronousMessageWithRequest { +func (m *UnconfiguredSynchronousMessageBuilder) WithRequest(r RequestBuilderFunc) *SynchronousMessageWithRequest { r(&SynchronousMessageWithRequestBuilder{ messageHandle: m.messageHandle, pact: m.pact, @@ -93,7 +93,7 @@ type SynchronousMessageWithRequest struct { pact *SynchronousPact } -type RequestBuilder func(*SynchronousMessageWithRequestBuilder) +type RequestBuilderFunc func(*SynchronousMessageWithRequestBuilder) type SynchronousMessageWithRequestBuilder struct { messageHandle *native.Message @@ -132,7 +132,7 @@ func (m *SynchronousMessageWithRequestBuilder) WithJSONContent(content interface } // AddMessage creates a new asynchronous consumer expectation -func (m *SynchronousMessageWithRequest) WithResponse(builder ResponseBuilder) *SynchronousMessageWithResponse { +func (m *SynchronousMessageWithRequest) WithResponse(builder ResponseBuilderFunc) *SynchronousMessageWithResponse { builder(&SynchronousMessageWithResponseBuilder{ messageHandle: m.messageHandle, pact: m.pact, @@ -149,7 +149,7 @@ type SynchronousMessageWithResponse struct { pact *SynchronousPact } -type ResponseBuilder func(*SynchronousMessageWithResponseBuilder) +type ResponseBuilderFunc func(*SynchronousMessageWithResponseBuilder) type SynchronousMessageWithResponseBuilder struct { messageHandle *native.Message