From d4b105bdfbd7d6c6f24c0a84c441924f69593841 Mon Sep 17 00:00:00 2001 From: Adam Rodger Date: Sun, 9 Apr 2023 16:44:38 +0100 Subject: [PATCH 1/5] test(449): Add a test to reproduce issue #449 --- src/PactNet/RequestBuilder.cs | 2 +- .../Drivers/FfiIntegrationTests.cs | 54 +++++++++++++++++++ ...3-server-numeric-provider-state-param.json | 43 +++++++++++++++ 3 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 tests/PactNet.Tests/data/v3-server-numeric-provider-state-param.json diff --git a/src/PactNet/RequestBuilder.cs b/src/PactNet/RequestBuilder.cs index 617f743d..67af2a31 100644 --- a/src/PactNet/RequestBuilder.cs +++ b/src/PactNet/RequestBuilder.cs @@ -277,7 +277,7 @@ internal RequestBuilder Given(string providerState) /// /// Provider state description /// Provider state parameters - /// Flient builder + /// Fluent builder internal RequestBuilder Given(string providerState, IDictionary parameters) { foreach (var param in parameters) diff --git a/tests/PactNet.Tests/Drivers/FfiIntegrationTests.cs b/tests/PactNet.Tests/Drivers/FfiIntegrationTests.cs index 81ab072e..7904797b 100644 --- a/tests/PactNet.Tests/Drivers/FfiIntegrationTests.cs +++ b/tests/PactNet.Tests/Drivers/FfiIntegrationTests.cs @@ -130,5 +130,59 @@ public void MessageInteraction_v3_CreatesPactFile() string expectedPactContent = File.ReadAllText("data/v3-message-integration.json").TrimEnd(); pactContents.Should().Be(expectedPactContent); } + + [Fact] + [Trait("issue", "449")] + public async Task HttpInteraction_NumericProviderStateParameter_CreatesPactFile() + { + var driver = new PactDriver(); + + try + { + IHttpPactDriver pact = driver.NewHttpPact("NativeDriverTests-Consumer-NumericProviderStateParam", + "NativeDriverTests-Provider", + PactSpecification.V3); + + IHttpInteractionDriver interaction = pact.NewHttpInteraction("an interaction with a numeric provider state param"); + + interaction.GivenWithParam("state with param", "issue", "449"); + interaction.WithRequest("GET", "/path"); + + interaction.WithResponseStatus((ushort)HttpStatusCode.OK); + interaction.WithResponseBody("application/json", @"{""foo"":42}"); + + using IMockServerDriver mockServer = pact.CreateMockServer("127.0.0.1", null, false); + + var client = new HttpClient { BaseAddress = mockServer.Uri }; + + HttpResponseMessage result = await client.GetAsync("/path"); + result.StatusCode.Should().Be(HttpStatusCode.OK); + + string content = await result.Content.ReadAsStringAsync(); + content.Should().Be(@"{""foo"":42}"); + + mockServer.MockServerMismatches().Should().Be("[]"); + + string logs = mockServer.MockServerLogs(); + logs.Should().NotBeEmpty(); + + this.output.WriteLine("Mock Server Logs"); + this.output.WriteLine("----------------"); + this.output.WriteLine(logs); + + pact.WritePactFile(Environment.CurrentDirectory); + } + finally + { + this.WriteDriverLogs(driver); + } + + var file = new FileInfo("NativeDriverTests-Consumer-NumericProviderStateParam-NativeDriverTests-Provider.json"); + file.Exists.Should().BeTrue(); + + string pactContents = File.ReadAllText(file.FullName).TrimEnd(); + string expectedPactContent = File.ReadAllText("data/v3-server-numeric-provider-state-param.json").TrimEnd(); + pactContents.Should().Be(expectedPactContent); + } } } diff --git a/tests/PactNet.Tests/data/v3-server-numeric-provider-state-param.json b/tests/PactNet.Tests/data/v3-server-numeric-provider-state-param.json new file mode 100644 index 00000000..ac457848 --- /dev/null +++ b/tests/PactNet.Tests/data/v3-server-numeric-provider-state-param.json @@ -0,0 +1,43 @@ +{ + "consumer": { + "name": "NativeDriverTests-Consumer-NumericProviderStateParam" + }, + "interactions": [ + { + "description": "an interaction with a numeric provider state param", + "providerStates": [ + { + "name": "state with param", + "params": { + "issue": "449" + } + } + ], + "request": { + "method": "GET", + "path": "/path" + }, + "response": { + "body": { + "foo": 42 + }, + "headers": { + "Content-Type": "application/json" + }, + "status": 200 + } + } + ], + "metadata": { + "pactRust": { + "ffi": "0.4.0", + "models": "1.0.4" + }, + "pactSpecification": { + "version": "3.0.0" + } + }, + "provider": { + "name": "NativeDriverTests-Provider" + } +} \ No newline at end of file From 34e66e0c31bd56678c0834d08196e630d130f7b7 Mon Sep 17 00:00:00 2001 From: Yousaf Nabi Date: Mon, 27 May 2024 23:28:37 +0100 Subject: [PATCH 2/5] fix: pactffi_given_with_param, convert value to json --- src/PactNet/Drivers/HttpInteractionDriver.cs | 8 ++++++-- src/PactNet/Drivers/MessageInteractionDriver.cs | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/PactNet/Drivers/HttpInteractionDriver.cs b/src/PactNet/Drivers/HttpInteractionDriver.cs index a91d6b4f..087148ca 100644 --- a/src/PactNet/Drivers/HttpInteractionDriver.cs +++ b/src/PactNet/Drivers/HttpInteractionDriver.cs @@ -1,6 +1,7 @@ using System; using PactNet.Interop; - +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; namespace PactNet.Drivers { /// @@ -38,7 +39,10 @@ public void Given(string description) /// Parameter value /// Success public void GivenWithParam(string description, string name, string value) - => NativeInterop.GivenWithParam(this.interaction, description, name, value).CheckInteropSuccess(); + { + var jsonValue = JsonConvert.SerializeObject(value); + NativeInterop.GivenWithParam(this.interaction, description, name, jsonValue).CheckInteropSuccess(); + } /// /// Add a request to the interaction diff --git a/src/PactNet/Drivers/MessageInteractionDriver.cs b/src/PactNet/Drivers/MessageInteractionDriver.cs index 035f8f4c..46d2b923 100644 --- a/src/PactNet/Drivers/MessageInteractionDriver.cs +++ b/src/PactNet/Drivers/MessageInteractionDriver.cs @@ -1,7 +1,8 @@ using System; using System.Runtime.InteropServices; using PactNet.Interop; - +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; namespace PactNet.Drivers { /// @@ -35,7 +36,10 @@ public void Given(string description) /// Parameter name /// Parameter value public void GivenWithParam(string description, string name, string value) - => NativeInterop.GivenWithParam(this.interaction, description, name, value).CheckInteropSuccess(); + { + var jsonValue = JsonConvert.SerializeObject(value); + NativeInterop.GivenWithParam(this.interaction, description, name, jsonValue).CheckInteropSuccess(); + } /// /// Set the description of the message interaction From 7d5560d13d1552454da1d5049570adc7890eed02 Mon Sep 17 00:00:00 2001 From: Yousaf Nabi Date: Mon, 27 May 2024 23:30:10 +0100 Subject: [PATCH 3/5] ci: switch to macos-12 for x64 --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a5a4aaad..e28351a7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,7 +16,7 @@ jobs: os: - windows-latest - ubuntu-latest - - macos-latest + - macos-12 runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v3 From 0996c4ed5f36bae78a62f1396119d7e32966fc84 Mon Sep 17 00:00:00 2001 From: Yousaf Nabi Date: Wed, 29 May 2024 17:08:35 +0100 Subject: [PATCH 4/5] ci: allow workflow_dispatch to trigger build manually see if we get flakey tests prior to implementing PR with musl support --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 42c6291e..b236a5dd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,6 +1,6 @@ name: CI -on: [push, pull_request] +on: [push, pull_request, workflow_dispatch] env: DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true From 93abcbfcb1c0417c228e02b23ec1b078189fc5aa Mon Sep 17 00:00:00 2001 From: Yousaf Nabi Date: Mon, 10 Jun 2024 00:18:42 +0100 Subject: [PATCH 5/5] !fix: update Given to accept new Dictionary rather that this allows for passing of simple string, int and json payloads, rather than simply string --- .../Consumer.Tests/OrdersClientTests.cs | 4 +- src/PactNet.Abstractions/IMessageBuilder.cs | 4 +- src/PactNet.Abstractions/IRequestBuilder.cs | 4 +- src/PactNet.Abstractions/ProviderState.cs | 2 +- src/PactNet/Drivers/HttpInteractionDriver.cs | 7 +-- src/PactNet/Drivers/IProviderStateDriver.cs | 2 +- .../Drivers/MessageInteractionDriver.cs | 7 +-- src/PactNet/MessageBuilder.cs | 6 +- src/PactNet/RequestBuilder.cs | 6 +- .../Drivers/FfiIntegrationTests.cs | 56 ++++++++++++++++++- tests/PactNet.Tests/MessageBuilderTests.cs | 2 +- tests/PactNet.Tests/PactExtensionsTests.cs | 12 ++-- tests/PactNet.Tests/RequestBuilderTests.cs | 2 +- ...3-server-numeric-provider-state-param.json | 6 +- ...v3-server-string-provider-state-param.json | 43 ++++++++++++++ 15 files changed, 129 insertions(+), 34 deletions(-) create mode 100644 tests/PactNet.Tests/data/v3-server-string-provider-state-param.json diff --git a/samples/OrdersApi/Consumer.Tests/OrdersClientTests.cs b/samples/OrdersApi/Consumer.Tests/OrdersClientTests.cs index a9127c1b..c99642cf 100644 --- a/samples/OrdersApi/Consumer.Tests/OrdersClientTests.cs +++ b/samples/OrdersApi/Consumer.Tests/OrdersClientTests.cs @@ -51,7 +51,7 @@ public async Task GetOrderAsync_WhenCalled_ReturnsOrder() this.pact .UponReceiving("a request for an order by ID") - .Given("an order with ID {id} exists", new Dictionary { ["id"] = "1" }) + .Given("an order with ID {id} exists", new Dictionary { ["id"] = 1 }) .WithRequest(HttpMethod.Get, "/api/orders/1") .WithHeader("Accept", "application/json") .WillRespond() @@ -121,7 +121,7 @@ public async Task UpdateOrderAsync_WhenCalled_UpdatesOrder() { this.pact .UponReceiving("a request to update the status of an order") - .Given("an order with ID {id} exists", new Dictionary { ["id"] = "1" }) + .Given("an order with ID {id} exists", new Dictionary { ["id"] = 1 }) .WithRequest(HttpMethod.Put, "/api/orders/1/status") .WithJsonBody(Match.Regex(OrderStatus.Fulfilling.ToString(), string.Join("|", Enum.GetNames()))) .WillRespond() diff --git a/src/PactNet.Abstractions/IMessageBuilder.cs b/src/PactNet.Abstractions/IMessageBuilder.cs index 22ddacf7..2bbc6e8d 100644 --- a/src/PactNet.Abstractions/IMessageBuilder.cs +++ b/src/PactNet.Abstractions/IMessageBuilder.cs @@ -21,7 +21,7 @@ public interface IMessageBuilderV3 /// Provider state description /// Provider state parameters /// Fluent builder - IMessageBuilderV3 Given(string providerState, IDictionary parameters); + IMessageBuilderV3 Given(string providerState, IDictionary parameters); /// /// Set the metadata @@ -65,7 +65,7 @@ public interface IMessageBuilderV4 /// Provider state description /// Provider state parameters /// Fluent builder - IMessageBuilderV4 Given(string providerState, IDictionary parameters); + IMessageBuilderV4 Given(string providerState, IDictionary parameters); /// /// Set the metadata diff --git a/src/PactNet.Abstractions/IRequestBuilder.cs b/src/PactNet.Abstractions/IRequestBuilder.cs index 357ea8ab..07edb8d4 100644 --- a/src/PactNet.Abstractions/IRequestBuilder.cs +++ b/src/PactNet.Abstractions/IRequestBuilder.cs @@ -123,7 +123,7 @@ public interface IRequestBuilderV3 /// Provider state description /// Provider state parameters /// Fluent builder - IRequestBuilderV3 Given(string providerState, IDictionary parameters); + IRequestBuilderV3 Given(string providerState, IDictionary parameters); /// /// Set the request @@ -242,7 +242,7 @@ public interface IRequestBuilderV4 /// Provider state description /// Provider state parameters /// Fluent builder - IRequestBuilderV4 Given(string providerState, IDictionary parameters); + IRequestBuilderV4 Given(string providerState, IDictionary parameters); /// /// Set the request diff --git a/src/PactNet.Abstractions/ProviderState.cs b/src/PactNet.Abstractions/ProviderState.cs index cded228e..648a53ca 100644 --- a/src/PactNet.Abstractions/ProviderState.cs +++ b/src/PactNet.Abstractions/ProviderState.cs @@ -15,6 +15,6 @@ public class ProviderState /// /// State parameters /// - public IDictionary Params { get; set; } + public IDictionary Params { get; set; } } } diff --git a/src/PactNet/Drivers/HttpInteractionDriver.cs b/src/PactNet/Drivers/HttpInteractionDriver.cs index 087148ca..f27c9374 100644 --- a/src/PactNet/Drivers/HttpInteractionDriver.cs +++ b/src/PactNet/Drivers/HttpInteractionDriver.cs @@ -1,7 +1,6 @@ using System; using PactNet.Interop; -using Newtonsoft.Json; -using Newtonsoft.Json.Serialization; +using System.Text.Json.Serialization; namespace PactNet.Drivers { /// @@ -38,9 +37,9 @@ public void Given(string description) /// Parameter name /// Parameter value /// Success - public void GivenWithParam(string description, string name, string value) + public void GivenWithParam(string description, string name, object value) { - var jsonValue = JsonConvert.SerializeObject(value); + var jsonValue = System.Text.Json.JsonSerializer.Serialize(value); NativeInterop.GivenWithParam(this.interaction, description, name, jsonValue).CheckInteropSuccess(); } diff --git a/src/PactNet/Drivers/IProviderStateDriver.cs b/src/PactNet/Drivers/IProviderStateDriver.cs index 4c992d07..1b53794d 100644 --- a/src/PactNet/Drivers/IProviderStateDriver.cs +++ b/src/PactNet/Drivers/IProviderStateDriver.cs @@ -17,6 +17,6 @@ internal interface IProviderStateDriver /// Provider state description /// Parameter name /// Parameter value - void GivenWithParam(string description, string name, string value); + void GivenWithParam(string description, string name, object value); } } diff --git a/src/PactNet/Drivers/MessageInteractionDriver.cs b/src/PactNet/Drivers/MessageInteractionDriver.cs index 46d2b923..08dead9e 100644 --- a/src/PactNet/Drivers/MessageInteractionDriver.cs +++ b/src/PactNet/Drivers/MessageInteractionDriver.cs @@ -1,8 +1,7 @@ using System; using System.Runtime.InteropServices; using PactNet.Interop; -using Newtonsoft.Json; -using Newtonsoft.Json.Serialization; +using System.Text.Json.Serialization; namespace PactNet.Drivers { /// @@ -35,9 +34,9 @@ public void Given(string description) /// Provider state description /// Parameter name /// Parameter value - public void GivenWithParam(string description, string name, string value) + public void GivenWithParam(string description, string name, object value) { - var jsonValue = JsonConvert.SerializeObject(value); + var jsonValue = System.Text.Json.JsonSerializer.Serialize(value); NativeInterop.GivenWithParam(this.interaction, description, name, jsonValue).CheckInteropSuccess(); } diff --git a/src/PactNet/MessageBuilder.cs b/src/PactNet/MessageBuilder.cs index 83c7cffe..f505b434 100644 --- a/src/PactNet/MessageBuilder.cs +++ b/src/PactNet/MessageBuilder.cs @@ -35,7 +35,7 @@ IMessageBuilderV3 IMessageBuilderV3.Given(string providerState) => Given(providerState); /// - IMessageBuilderV3 IMessageBuilderV3.Given(string providerState, IDictionary parameters) + IMessageBuilderV3 IMessageBuilderV3.Given(string providerState, IDictionary parameters) => Given(providerState, parameters); /// @@ -59,7 +59,7 @@ IMessageBuilderV4 IMessageBuilderV4.Given(string providerState) => Given(providerState); /// - IMessageBuilderV4 IMessageBuilderV4.Given(string providerState, IDictionary parameters) + IMessageBuilderV4 IMessageBuilderV4.Given(string providerState, IDictionary parameters) => Given(providerState, parameters); /// @@ -96,7 +96,7 @@ internal MessageBuilder Given(string providerState) /// Provider state description /// Provider state parameters /// Fluent builder - internal MessageBuilder Given(string providerState, IDictionary parameters) + internal MessageBuilder Given(string providerState, IDictionary parameters) { foreach (var param in parameters) { diff --git a/src/PactNet/RequestBuilder.cs b/src/PactNet/RequestBuilder.cs index 50dd4e89..fc90bdf0 100644 --- a/src/PactNet/RequestBuilder.cs +++ b/src/PactNet/RequestBuilder.cs @@ -158,7 +158,7 @@ IRequestBuilderV3 IRequestBuilderV3.Given(string providerState) /// Provider state description /// Provider state parameters /// Flient builder - IRequestBuilderV3 IRequestBuilderV3.Given(string providerState, IDictionary parameters) + IRequestBuilderV3 IRequestBuilderV3.Given(string providerState, IDictionary parameters) => this.Given(providerState, parameters); /// @@ -287,7 +287,7 @@ IRequestBuilderV4 IRequestBuilderV4.Given(string providerState) /// Provider state description /// Provider state parameters /// Flient builder - IRequestBuilderV4 IRequestBuilderV4.Given(string providerState, IDictionary parameters) + IRequestBuilderV4 IRequestBuilderV4.Given(string providerState, IDictionary parameters) => this.Given(providerState, parameters); /// @@ -417,7 +417,7 @@ internal RequestBuilder Given(string providerState) /// Provider state description /// Provider state parameters /// Fluent builder - internal RequestBuilder Given(string providerState, IDictionary parameters) + internal RequestBuilder Given(string providerState, IDictionary parameters) { foreach (var param in parameters) { diff --git a/tests/PactNet.Tests/Drivers/FfiIntegrationTests.cs b/tests/PactNet.Tests/Drivers/FfiIntegrationTests.cs index 7904797b..57b725d1 100644 --- a/tests/PactNet.Tests/Drivers/FfiIntegrationTests.cs +++ b/tests/PactNet.Tests/Drivers/FfiIntegrationTests.cs @@ -145,7 +145,7 @@ public async Task HttpInteraction_NumericProviderStateParameter_CreatesPactFile( IHttpInteractionDriver interaction = pact.NewHttpInteraction("an interaction with a numeric provider state param"); - interaction.GivenWithParam("state with param", "issue", "449"); + interaction.GivenWithParam("state with param", "issue", 449); interaction.WithRequest("GET", "/path"); interaction.WithResponseStatus((ushort)HttpStatusCode.OK); @@ -184,5 +184,59 @@ public async Task HttpInteraction_NumericProviderStateParameter_CreatesPactFile( string expectedPactContent = File.ReadAllText("data/v3-server-numeric-provider-state-param.json").TrimEnd(); pactContents.Should().Be(expectedPactContent); } + + [Fact] + [Trait("issue", "449")] + public async Task HttpInteraction_StringProviderStateParameter_CreatesPactFile() + { + var driver = new PactDriver(); + + try + { + IHttpPactDriver pact = driver.NewHttpPact("NativeDriverTests-Consumer-StringProviderStateParam", + "NativeDriverTests-Provider", + PactSpecification.V3); + + IHttpInteractionDriver interaction = pact.NewHttpInteraction("an interaction with a string provider state param"); + + interaction.GivenWithParam("state with param", "issue", "449"); + interaction.WithRequest("GET", "/path"); + + interaction.WithResponseStatus((ushort)HttpStatusCode.OK); + interaction.WithResponseBody("application/json", @"{""foo"":42}"); + + using IMockServerDriver mockServer = pact.CreateMockServer("127.0.0.1", null, false); + + var client = new HttpClient { BaseAddress = mockServer.Uri }; + + HttpResponseMessage result = await client.GetAsync("/path"); + result.StatusCode.Should().Be(HttpStatusCode.OK); + + string content = await result.Content.ReadAsStringAsync(); + content.Should().Be(@"{""foo"":42}"); + + mockServer.MockServerMismatches().Should().Be("[]"); + + string logs = mockServer.MockServerLogs(); + logs.Should().NotBeEmpty(); + + this.output.WriteLine("Mock Server Logs"); + this.output.WriteLine("----------------"); + this.output.WriteLine(logs); + + pact.WritePactFile(Environment.CurrentDirectory); + } + finally + { + this.WriteDriverLogs(driver); + } + + var file = new FileInfo("NativeDriverTests-Consumer-StringProviderStateParam-NativeDriverTests-Provider.json"); + file.Exists.Should().BeTrue(); + + string pactContents = File.ReadAllText(file.FullName).TrimEnd(); + string expectedPactContent = File.ReadAllText("data/v3-server-string-provider-state-param.json").TrimEnd(); + pactContents.Should().Be(expectedPactContent); + } } } diff --git a/tests/PactNet.Tests/MessageBuilderTests.cs b/tests/PactNet.Tests/MessageBuilderTests.cs index 4fa72c5c..4b1a13b1 100644 --- a/tests/PactNet.Tests/MessageBuilderTests.cs +++ b/tests/PactNet.Tests/MessageBuilderTests.cs @@ -45,7 +45,7 @@ public void Given_WhenCalled_AddsProviderState() public void Given_WithParams_AddsProviderState() { this.builder.Given("provider state", - new Dictionary + new Dictionary { ["foo"] = "bar", ["baz"] = "bash", diff --git a/tests/PactNet.Tests/PactExtensionsTests.cs b/tests/PactNet.Tests/PactExtensionsTests.cs index 160205b9..713ede2f 100644 --- a/tests/PactNet.Tests/PactExtensionsTests.cs +++ b/tests/PactNet.Tests/PactExtensionsTests.cs @@ -113,7 +113,7 @@ public async Task WithHttpInteractions_V3_CreatesExpectedPactFile() builder.UponReceiving("a sample request") .Given("a provider state") .Given("another provider state") - .Given("a provider state with params", new Dictionary + .Given("a provider state with params", new Dictionary { ["foo"] = "bar", ["baz"] = "bash" @@ -150,7 +150,7 @@ public async Task WithHttpInteractions_V4_CreatesExpectedPactFile() builder.UponReceiving("a sample request") .Given("a provider state") .Given("another provider state") - .Given("a provider state with params", new Dictionary + .Given("a provider state with params", new Dictionary { ["foo"] = "bar", ["baz"] = "bash" @@ -189,7 +189,7 @@ public void WithMessageInteractions_V3_CreatesExpectedPactFile() .ExpectsToReceive("a sample request") .Given("a provider state") .Given("another provider state") - .Given("a provider state with params", new Dictionary + .Given("a provider state with params", new Dictionary { ["foo"] = "bar", ["baz"] = "bash" @@ -215,7 +215,7 @@ public void WithMessageInteractions_V4_CreatesExpectedPactFile() .ExpectsToReceive("a sample request") .Given("a provider state") .Given("another provider state") - .Given("a provider state with params", new Dictionary + .Given("a provider state with params", new Dictionary { ["foo"] = "bar", ["baz"] = "bash" @@ -241,7 +241,7 @@ public async Task CombinedHttpAndMessageInteractions_v4_CreatesExpectedPactFile( http.UponReceiving("a HTTP request") .Given("a provider state") .Given("another provider state") - .Given("a provider state with params", new Dictionary + .Given("a provider state with params", new Dictionary { ["foo"] = "bar", ["baz"] = "bash" @@ -271,7 +271,7 @@ await http.VerifyAsync(async ctx => .ExpectsToReceive("a message") .Given("a provider state") .Given("another provider state") - .Given("a provider state with params", new Dictionary + .Given("a provider state with params", new Dictionary { ["foo"] = "bar", ["baz"] = "bash" diff --git a/tests/PactNet.Tests/RequestBuilderTests.cs b/tests/PactNet.Tests/RequestBuilderTests.cs index d4be9624..7464c0c1 100644 --- a/tests/PactNet.Tests/RequestBuilderTests.cs +++ b/tests/PactNet.Tests/RequestBuilderTests.cs @@ -39,7 +39,7 @@ public void Given_WhenCalled_AddsProviderState() public void Given_WithParams_AddsProviderState() { this.builder.Given("provider state", - new Dictionary + new Dictionary { ["foo"] = "bar", ["baz"] = "bash", diff --git a/tests/PactNet.Tests/data/v3-server-numeric-provider-state-param.json b/tests/PactNet.Tests/data/v3-server-numeric-provider-state-param.json index ac457848..798ea60f 100644 --- a/tests/PactNet.Tests/data/v3-server-numeric-provider-state-param.json +++ b/tests/PactNet.Tests/data/v3-server-numeric-provider-state-param.json @@ -9,7 +9,7 @@ { "name": "state with param", "params": { - "issue": "449" + "issue": 449 } } ], @@ -30,8 +30,8 @@ ], "metadata": { "pactRust": { - "ffi": "0.4.0", - "models": "1.0.4" + "ffi": "0.4.16", + "models": "1.1.19" }, "pactSpecification": { "version": "3.0.0" diff --git a/tests/PactNet.Tests/data/v3-server-string-provider-state-param.json b/tests/PactNet.Tests/data/v3-server-string-provider-state-param.json new file mode 100644 index 00000000..d441d7ca --- /dev/null +++ b/tests/PactNet.Tests/data/v3-server-string-provider-state-param.json @@ -0,0 +1,43 @@ +{ + "consumer": { + "name": "NativeDriverTests-Consumer-StringProviderStateParam" + }, + "interactions": [ + { + "description": "an interaction with a string provider state param", + "providerStates": [ + { + "name": "state with param", + "params": { + "issue": "449" + } + } + ], + "request": { + "method": "GET", + "path": "/path" + }, + "response": { + "body": { + "foo": 42 + }, + "headers": { + "Content-Type": "application/json" + }, + "status": 200 + } + } + ], + "metadata": { + "pactRust": { + "ffi": "0.4.16", + "models": "1.1.19" + }, + "pactSpecification": { + "version": "3.0.0" + } + }, + "provider": { + "name": "NativeDriverTests-Provider" + } +} \ No newline at end of file