public void EnsureProviderApiHonoursPactWithConsumer() { // Arrange var config = new PactVerifierConfig { // NOTE: We default to using a ConsoleOutput, // however xUnit 2 does not capture the console output, // so a custom outputter is required. Outputters = new List <IOutput> { new ConsoleOutput() }, // Output verbose verification logs to the test output Verbose = true, PublishVerificationResults = true, ProviderVersion = System.Environment.GetEnvironmentVariable("TRAVIS_COMMIT") }; IPactVerifier pactVerifier = new PactVerifier(config); string pactUrl = System.Environment.GetEnvironmentVariable("PACT_URL"); pactVerifier .ProviderState($"{_pactServiceUri}/provider-states") .ServiceProvider("pactflow-example-provider-dotnet", _providerUri); if (pactUrl != "" && pactUrl != null) { // Webhook path - verify the specific pact pactVerifier.PactUri(pactUrl, new PactUriOptions(System.Environment.GetEnvironmentVariable("PACT_BROKER_TOKEN"))); } else { // Standard verification path - run the pactVerifier.PactBroker(System.Environment.GetEnvironmentVariable("PACT_BROKER_BASE_URL"), uriOptions: new PactUriOptions(System.Environment.GetEnvironmentVariable("PACT_BROKER_TOKEN")), consumerVersionTags: new List <string> { "master", "prod" }); } // Act / Assert pactVerifier.Verify(); }
//[Ignore("PACT BROKER")] public void EnsurePactDemoProviderHobnoursPactWithPactDemoConsumerUsingPactBroker() { var wipSinceDate = "2020-01-01"; var token = Environment.GetEnvironmentVariable("PACT_BROKER_TOKEN"); var pactBrokerBaseUrl = "https://expandtesting.pact.dius.com.au"; var pactUriOptions = new PactUriOptions(token); // fake Git HashCode (only for demo) var version = "11bb818"; var config = new PactVerifierConfig { ProviderVersion = version, PublishVerificationResults = true, Verbose = true }; var consumerVersionSelectors = new List <VersionTagSelector> { new VersionTagSelector("master", null, null, false, true), }; var pactVerifier = new PactVerifier(config); pactVerifier.ProviderState($"{pactServiceUri}/provider-states"); pactVerifier.ServiceProvider(providerName, $"{providerServiceUri}"); var providerVersionTags = new List <string> { "master" }; // Verify pactVerifier.PactBroker(pactBrokerBaseUrl, uriOptions: pactUriOptions, enablePending: false, includeWipPactsSince: wipSinceDate, providerVersionTags: providerVersionTags, consumerVersionSelectors: consumerVersionSelectors) .Verify(); }
public void PactflowWebhook_EnsureProviderApiHonorsContractsWithPublishedPact() { // arrange // setup mocked Foo API const string guidRegex = "[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}"; _fooApiMock.ClearInteractions(); _fooApiMock .Given("There is a foo with some-guid") .UponReceiving("A GET request to retrieve foo") .With(new ProviderServiceRequest { Method = HttpVerb.Get, Path = "/foos", Query = Match.Regex("name=00000000-0000-0000-0000-000000000000", $"^name={guidRegex}$"), Headers = new Dictionary <string, object> { { "Accept", "application/json" } } }) .WillRespondWith(new ProviderServiceResponse { Status = 200, Headers = new Dictionary <string, object> { { "Content-Type", "application/json; charset=utf-8" } }, Body = new[] { new { id = "some id", name = "some name", description = "some description" } } }); // get environment variables DotNetEnv.Env.TraversePath().Load(); bool isRunningInPipeline = "true".Equals(Environment.GetEnvironmentVariable("CI")); string pactBrokerBaseUrl = Environment.GetEnvironmentVariable("PACT_BROKER_BASE_URL"); string pactBrokerApiToken = Environment.GetEnvironmentVariable("PACT_BROKER_API_TOKEN"); string pactProviderTag = Environment.GetEnvironmentVariable("PACT_PROVIDER_TAG"); string pactUrl = Environment.GetEnvironmentVariable("PACT_URL"); string gitCommitShortSha = Environment.GetEnvironmentVariable("GIT_COMMIT_SHORT_SHA"); var pactVerifier = new PactVerifier(new PactVerifierConfig { ProviderVersion = gitCommitShortSha, PublishVerificationResults = isRunningInPipeline, Outputters = new[] { new XUnitOutput(_outputHelper) }, Verbose = true }); PactUriOptions pactUriOptions = new PactUriOptions().SetBearerAuthentication(pactBrokerApiToken); pactVerifier .ProviderState($"{TestServiceBaseUri}/provider-states") .ServiceProvider("Provider API", TestServiceBaseUri); // pactUrl is provided to pipeline triggered by pactflow webhook indicating what specific pact should be verified // if value is missing then default verification is performed for all consumers with tags: main, dev, uat, prod bool isVerifyingSpecificPact = !string.IsNullOrWhiteSpace(pactUrl); if (isVerifyingSpecificPact) { pactVerifier.PactUri(pactUrl, pactUriOptions); } else { var consumerVersionSelectors = new List <VersionTagSelector> { new VersionTagSelector("refs/heads/main", latest: true), new VersionTagSelector("dev", latest: true), new VersionTagSelector("uat", latest: true), new VersionTagSelector("prod", latest: true) }; pactVerifier.PactBroker(pactBrokerBaseUrl, pactUriOptions, true, providerVersionTags: new[] { pactProviderTag }, consumerVersionSelectors: consumerVersionSelectors); } // act // assert pactVerifier.Verify(); }