public void GetBlob_WhenCalledWithId_Succeeds() { ContextInfo.SetTestContextName(GetType().Name); //Arrange var blobId = Guid.Parse("38C3976B-5AE8-4F2F-A8EC-46F6AEE826E2"); var bytes = Encoding.UTF8.GetBytes("This is a test"); _mockProviderService.UponReceiving("a request to get a new blob by id") .With(new ProviderServiceRequest { Method = HttpVerb.Get, Path = String.Format("/blobs/{0}", blobId) }) .WillRespondWith(new ProviderServiceResponse { Status = 200, Headers = new Dictionary <string, string> { { "Content-Type", "text/plain" } }, Body = "This is a test" }); var consumer = new EventsApiClient(_mockProviderServiceBaseUri); //Act / Assert var content = consumer.GetBlob(blobId); Assert.True(bytes.SequenceEqual(content)); _mockProviderService.VerifyInteractions(); }
public void WhenRegisteringAnInteractionThatIsSentMultipleTimes_ThenPactFailureExceptionIsThrown() { ContextInfo.SetTestContextName(GetType().Name); _mockProviderService .UponReceiving("A GET request to retrieve a thing") .With(new ProviderServiceRequest { Method = HttpVerb.Get, Path = "/things/1234" }) .WillRespondWith(new ProviderServiceResponse { Status = 200 }); var httpClient = new HttpClient { BaseAddress = new Uri(_mockProviderServiceBaseUri) }; var request1 = new HttpRequestMessage(HttpMethod.Get, "/things/1234"); var request2 = new HttpRequestMessage(HttpMethod.Get, "/things/1234"); var response1 = httpClient.SendAsync(request1).Result; var response2 = httpClient.SendAsync(request2).Result; if (response1.StatusCode != HttpStatusCode.OK || response2.StatusCode != HttpStatusCode.OK) { throw new Exception(String.Format("Wrong status code '{0} and {1}' was returned", response1.StatusCode, response2.StatusCode)); } Assert.Throws <PactFailureException>(() => _mockProviderService.VerifyInteractions()); }
public void CreateBlob_WhenCalledWithBlob_Succeeds() { ContextInfo.SetTestContextName(GetType().Name); //Arrange var blobId = Guid.Parse("38C3976B-5AE8-4F2F-A8EC-46F6AEE826E2"); var bytes = Encoding.UTF8.GetBytes("This is a test"); _mockProviderService.UponReceiving("a request to create a new blob") .With(new ProviderServiceRequest { Method = HttpVerb.Post, Path = String.Format("/blobs/{0}", blobId), Headers = new Dictionary <string, string> { { "Content-Type", "application/octet-stream" } }, Body = bytes }) .WillRespondWith(new ProviderServiceResponse { Status = 201 }); var consumer = new EventsApiClient(_mockProviderServiceBaseUri); //Act / Assert consumer.CreateBlob(blobId, bytes, "test.txt"); _mockProviderService.VerifyInteractions(); }
public void WhenRegisteringAnInteractionThatIsNeverSent_ThenPactFailureExceptionIsThrown() { ContextInfo.SetTestContextName(GetType().Name); _mockProviderService .UponReceiving("A POST request to create a new thing") .With(new ProviderServiceRequest { Method = HttpVerb.Post, Path = "/things", Headers = new Dictionary <string, string> { { "Content-Type", "application/json; charset=utf-8" } }, Body = new { thingId = 1234, type = "Awesome" } }) .WillRespondWith(new ProviderServiceResponse { Status = 201 }); Assert.Throws <PactFailureException>(() => _mockProviderService.VerifyInteractions()); }
public void WillRespondWith_WithValidInteraction_PerformsAdminInteractionsPostRequestWithTestContext() { ContextInfo.SetTestContextName(GetType().Name); var providerState = "My provider state"; var description = "My description"; var request = new ProviderServiceRequest { Method = HttpVerb.Head, Path = "/tester/testing/1" }; var response = new ProviderServiceResponse { Status = (int)HttpStatusCode.ProxyAuthenticationRequired }; var mockService = GetSubject(); mockService.Start(); mockService .Given(providerState) .UponReceiving(description) .With(request) .WillRespondWith(response); var actualRequest = _fakeHttpMessageHandler.RequestsReceived.Single(); Assert.True(actualRequest.Headers.Single(x => x.Key == Constants.AdministrativeRequestTestContextHeaderKey).Value.Single().EndsWith("MockProviderServiceTests.WillRespondWith_WithValidInteraction_PerformsAdminInteractionsPostRequestWithTestContext")); }
public void GetEventsByType_WhenOneEventWithTheTypeExists_ReturnsEvent() { ContextInfo.SetTestContextName(GetType().Name); //Arrange const string eventType = "DetailsView"; _mockProviderService.Given(String.Format("there is one event with type '{0}'", eventType)) .UponReceiving(String.Format("a request to retrieve events with type '{0}'", eventType)) .With(new ProviderServiceRequest { Method = HttpVerb.Get, Path = "/events", Query = "type=" + eventType, Headers = new Dictionary <string, string> { { "Accept", "application/json" } }, Body = null }) .WillRespondWith(new ProviderServiceResponse { Status = 200, Headers = new Dictionary <string, string> { { "Content-Type", "application/json; charset=utf-8" } }, Body = new [] { new { eventType = eventType } } }); var consumer = new EventsApiClient(_mockProviderServiceBaseUri); //Act var result = consumer.GetEventsByType(eventType); //Assert Assert.Equal(eventType, result.First().EventType); _mockProviderService.VerifyInteractions(); }
public void IsAlive_WhenApiIsAlive_ReturnsTrue() { ContextInfo.SetTestContextName(GetType().Name); //Arrange _mockProviderService.UponReceiving("a request to check the api status") .With(new ProviderServiceRequest { Method = HttpVerb.Get, Headers = new Dictionary <string, string> { { "Accept", "application/json" } }, Path = "/stats/status" }) .WillRespondWith(new ProviderServiceResponse { Status = 200, Headers = new Dictionary <string, string> { { "Content-Type", "application/json; charset=utf-8" } }, Body = new { alive = true, _links = new { uptime = new { href = "/stats/uptime" } } } }); var consumer = new EventsApiClient(_mockProviderServiceBaseUri); //Act var result = consumer.IsAlive(); //Assert Assert.Equal(true, result); _mockProviderService.VerifyInteractions(); }
public void GetEventById_WhenTheEventExists_ReturnsEvent() { ContextInfo.SetTestContextName(GetType().Name); //Arrange var eventId = Guid.Parse("83F9262F-28F1-4703-AB1A-8CFD9E8249C9"); _mockProviderService.Given(String.Format("there is an event with id '{0}'", eventId)) .UponReceiving(String.Format("a request to retrieve event with id '{0}'", eventId)) .With(new ProviderServiceRequest { Method = HttpVerb.Get, Path = "/events/" + eventId, Headers = new Dictionary <string, string> { { "Accept", "application/json" } } }) .WillRespondWith(new ProviderServiceResponse { Status = 200, Headers = new Dictionary <string, string> { { "Content-Type", "application/json; charset=utf-8" } }, Body = new { eventId = eventId } }); var consumer = new EventsApiClient(_mockProviderServiceBaseUri); //Act var result = consumer.GetEventById(eventId); //Assert Assert.Equal(eventId, result.EventId); _mockProviderService.VerifyInteractions(); }
public void CreateEvent_WhenCalledWithEvent_Succeeds() { ContextInfo.SetTestContextName(GetType().Name); //Arrange var eventId = Guid.Parse("1F587704-2DCC-4313-A233-7B62B4B469DB"); var dateTime = new DateTime(2011, 07, 01, 01, 41, 03); DateTimeFactory.Now = () => dateTime; _mockProviderService.UponReceiving("a request to create a new event") .With(new ProviderServiceRequest { Method = HttpVerb.Post, Path = "/events", Headers = new Dictionary <string, string> { { "Content-Type", "application/json; charset=utf-8" } }, Body = new { eventId, timestamp = dateTime.ToString("O"), eventType = "DetailsView" } }) .WillRespondWith(new ProviderServiceResponse { Status = 201 }); var consumer = new EventsApiClient(_mockProviderServiceBaseUri); //Act / Assert consumer.CreateEvent(eventId); _mockProviderService.VerifyInteractions(); }
public void EnsureEventApiHonoursPactWithConsumer() { ContextInfo.SetTestContextName(GetType().Name); //Arrange var outputter = new CustomOutputter(); var config = new PactVerifierConfig(); config.ReportOutputters.Add(outputter); IPactVerifier pactVerifier = new PactVerifier(() => {}, () => {}, config); pactVerifier .ProviderState( "there are events with ids '45D80D13-D5A2-48D7-8353-CBB4C0EAABF5', '83F9262F-28F1-4703-AB1A-8CFD9E8249C9' and '3E83A96B-2A0C-49B1-9959-26DF23F83AEB'", setUp: InsertEventsIntoDatabase) .ProviderState("there is an event with id '83f9262f-28f1-4703-ab1a-8cfd9e8249c9'", setUp: InsertEventIntoDatabase) .ProviderState("there is one event with type 'DetailsView'", setUp: EnsureOneDetailsViewEventExists); // todo (HACK): Find a better way to inject pact config into MockProviderNancyBootstrapper MockProviderNancyBootstrapper.PactConfig = new PactConfig(); var builder = new WebHostBuilder(); builder.UseStartup <Startup4ProviderRun>(); _server = new TestServer(builder); //Act / Assert pactVerifier .ServiceProvider("Event API", _server.CreateClient()) .HonoursPactWith("Consumer") .PactUri("../../../Consumer.Tests/pacts/consumer-event_api.json") .Verify(); // Verify that verifaction log is also sent to additional reporters defined in the config Assert.Contains("Verifying a Pact between Consumer and Event API", outputter.Output); }
public void Given_WithProviderState_SetsProviderState() { ContextInfo.SetTestContextName(GetType().Name); const string providerState = "My provider state"; var mockService = GetSubject(); mockService.Start(); mockService .Given(providerState) .UponReceiving("My description") .With(new ProviderServiceRequest { Method = HttpVerb.Get }) .WillRespondWith(new ProviderServiceResponse { Status = (int)HttpStatusCode.OK }); var interaction = Deserialise <ProviderServiceInteraction>(_fakeHttpMessageHandler.RequestContentReceived.Single()); Assert.Equal(providerState, interaction.ProviderState); }
public void ProviderApiWeb_ClientPact_Compliance() { ContextInfo.SetTestContextName(GetType().Name); //Arrange var outputter = new CustomOutputter(); var config = new PactVerifierConfig() { LogDir = @"c:\logs\PactNetCore" }; config.ReportOutputters.Add(outputter); IPactVerifier pactVerifier = new PactVerifier(() => { }, () => { }, config); pactVerifier .ProviderState( "there are events with ids '45D80D13-D5A2-48D7-8353-CBB4C0EAABF5', '83F9262F-28F1-4703-AB1A-8CFD9E8249C9' and '3E83A96B-2A0C-49B1-9959-26DF23F83AEB'", setUp: InsertEventsIntoDatabase) .ProviderState("there is an event with id '83f9262f-28f1-4703-ab1a-8cfd9e8249c9'", setUp: InsertEventIntoDatabase) .ProviderState("there is one event with type 'DetailsView'", setUp: EnsureOneDetailsViewEventExists); var pactUri = @"C:\Users\kharshaw\Documents\GitHub\Pact-Net-Core\Samples\EventApi\Provider.Api.Web.Tests\Consumer.Tests\pacts\consumer-event_api.json"; //Act / Assert pactVerifier .ServiceProvider("Event API", _client) .HonoursPactWith("Consumer") .PactUri(pactUri) .Verify(); // Verify that verifaction log is also sent to additional reporters defined in the config Assert.Contains("Verifying a Pact between Consumer and Event API", outputter.Output); }
public void GetAllEvents_WithNoAuthorizationToken_ShouldFail() { ContextInfo.SetTestContextName(GetType().Name); //Arrange _mockProviderService.Given("there are events with ids '45D80D13-D5A2-48D7-8353-CBB4C0EAABF5', '83F9262F-28F1-4703-AB1A-8CFD9E8249C9' and '3E83A96B-2A0C-49B1-9959-26DF23F83AEB'") .UponReceiving("a request to retrieve all events with no authorization") .With(new ProviderServiceRequest { Method = HttpVerb.Get, Path = "/events", Headers = new Dictionary <string, string> { { "Accept", "application/json" } } }) .WillRespondWith(new ProviderServiceResponse { Status = 401, Headers = new Dictionary <string, string> { { "Content-Type", "application/json; charset=utf-8" } }, Body = new { message = "Authorization has been denied for this request." } }); var consumer = new EventsApiClient(_mockProviderServiceBaseUri); //Act //Assert Assert.Throws <HttpRequestException>(() => consumer.GetAllEvents()); _mockProviderService.VerifyInteractions(); }
public void WhenRegisteringAnInteractionWhereTheRequestDoesNotExactlyMatchTheActualRequest_ThenStatusCodeReturnedIs500AndPactFailureExceptionIsThrown() { ContextInfo.SetTestContextName(GetType().Name); _mockProviderService .UponReceiving("A GET request to retrieve things by type") .With(new ProviderServiceRequest { Method = HttpVerb.Get, Path = "/things", Query = "type=awesome", Headers = new Dictionary <string, string> { { "Accept", "application/json; charset=utf-8" } }, }) .WillRespondWith(new ProviderServiceResponse { Status = 200 }); var httpClient = new HttpClient { BaseAddress = new Uri(_mockProviderServiceBaseUri) }; var request = new HttpRequestMessage(HttpMethod.Get, "/things?type=awesome"); var response = httpClient.SendAsync(request).Result; if (response.StatusCode != HttpStatusCode.InternalServerError) { throw new Exception(String.Format("Wrong status code '{0}' was returned", response.StatusCode)); } Assert.Throws <PactFailureException>(() => _mockProviderService.VerifyInteractions()); }
public void UpSince_WhenApiIsAliveAndWeRetrieveUptime_ReturnsUpSinceDate() { ContextInfo.SetTestContextName(GetType().Name); //Arrange var upSinceDate = new DateTime(2014, 6, 27, 23, 51, 12, DateTimeKind.Utc); _mockProviderService.UponReceiving("a request to check the api status") .With(new ProviderServiceRequest { Method = HttpVerb.Get, Headers = new Dictionary <string, string> { { "Accept", "application/json" } }, Path = "/stats/status" }) .WillRespondWith(new ProviderServiceResponse { Status = 200, Headers = new Dictionary <string, string> { { "Content-Type", "application/json; charset=utf-8" } }, Body = new { alive = true, _links = new { uptime = new { href = "/stats/uptime" } } } }); _mockProviderService .UponReceiving("a request to check the api uptime") .With(new ProviderServiceRequest { Method = HttpVerb.Get, Headers = new Dictionary <string, string> { { "Accept", "application/json" } }, Path = "/stats/uptime" }) .WillRespondWith(new ProviderServiceResponse { Status = 200, Headers = new Dictionary <string, string> { { "Content-Type", "application/json; charset=utf-8" } }, Body = new { upSince = upSinceDate } }); var consumer = new EventsApiClient(_mockProviderServiceBaseUri); //Act var result = consumer.UpSince(); //Assert Assert.Equal(upSinceDate.ToString("O"), result.Value.ToString("O")); _mockProviderService.VerifyInteractions(); }
public void WhenNotRegisteringAnyInteractions_VerificationSucceeds() { ContextInfo.SetTestContextName(GetType().Name); _mockProviderService.VerifyInteractions(); }
public void GetAllEvents_WhenCalled_ReturnsAllEvents() { ContextInfo.SetTestContextName(GetType().Name); //Arrange var testAuthToken = "SomeValidAuthToken"; _mockProviderService.Given("there are events with ids '45D80D13-D5A2-48D7-8353-CBB4C0EAABF5', '83F9262F-28F1-4703-AB1A-8CFD9E8249C9' and '3E83A96B-2A0C-49B1-9959-26DF23F83AEB'") .UponReceiving("a request to retrieve all events") .With(new ProviderServiceRequest { Method = HttpVerb.Get, Path = "/events", Headers = new Dictionary <string, string> { { "Accept", "application/json" }, { "Authorization", $"Bearer {testAuthToken}" } } }) .WillRespondWith(new ProviderServiceResponse { Status = 200, Headers = new Dictionary <string, string> { { "Content-Type", "application/json; charset=utf-8" } }, Body = new [] { new { eventId = Guid.Parse("45D80D13-D5A2-48D7-8353-CBB4C0EAABF5"), timestamp = "2014-06-30T01:37:41.0660548", eventType = "SearchView" }, new { eventId = Guid.Parse("83F9262F-28F1-4703-AB1A-8CFD9E8249C9"), timestamp = "2014-06-30T01:37:52.2618864", eventType = "DetailsView" }, new { eventId = Guid.Parse("3E83A96B-2A0C-49B1-9959-26DF23F83AEB"), timestamp = "2014-06-30T01:38:00.8518952", eventType = "SearchView" } } }); var consumer = new EventsApiClient(_mockProviderServiceBaseUri, testAuthToken); //Act var events = consumer.GetAllEvents(); //Assert Assert.NotEmpty(events); Assert.Equal(3, events.Count()); _mockProviderService.VerifyInteractions(); }