public void Handle_WithAPostRequestToPactAndInteractionsHaveBeenRegistered_ReturnsResponseWithPactFileJson() { var pactDetails = new PactDetails { Consumer = new Party { Name = "Consumer" }, Provider = new Party { Name = "Provider" } }; var interactions = new List <ProviderServiceInteraction> { new ProviderServiceInteraction { Description = "My description", Request = new ProviderServiceRequest { Method = HttpVerb.Get, Path = "/test" }, Response = new ProviderServiceResponse { Status = (int)HttpStatusCode.NoContent } } }; var pactFile = new ProviderServicePactFile { Provider = pactDetails.Provider, Consumer = pactDetails.Consumer, Interactions = interactions }; var pactFileJson = JsonConvert.SerializeObject(pactFile, JsonConfig.PactFileSerializerSettings); var pactDetailsJson = JsonConvert.SerializeObject(pactDetails, JsonConfig.ApiSerializerSettings); var jsonStream = new MemoryStream(Encoding.UTF8.GetBytes(pactDetailsJson)); var requestStream = new RequestStream(jsonStream, jsonStream.Length, true); var context = new NancyContext { Request = new Request("POST", new Url("http://localhost/pact"), requestStream) }; var handler = GetSubject(); _mockProviderRepository.Interactions.Returns(interactions); var response = handler.Handle(context); Assert.Equal("application/json", response.Headers["Content-Type"]); Assert.Equal(pactFileJson, ReadResponseContent(response.Contents)); }
public void Handle_WithAPostRequestToPactAndInteractionsHaveBeenRegistered_NewPactFileIsSavedWithInteractions() { var pactDetails = new PactDetails { Consumer = new Party { Name = "Consumer" }, Provider = new Party { Name = "Provider" } }; var interactions = new List <ProviderServiceInteraction> { new ProviderServiceInteraction { Description = "My description", Request = new ProviderServiceRequest { Method = HttpVerb.Get, Path = "/test" }, Response = new ProviderServiceResponse { Status = (int)HttpStatusCode.NoContent } } }; var pactFile = new ProviderServicePactFile { Provider = pactDetails.Provider, Consumer = pactDetails.Consumer, Interactions = interactions }; var pactFileJson = JsonConvert.SerializeObject(pactFile, JsonConfig.PactFileSerializerSettings); var pactDetailsJson = JsonConvert.SerializeObject(pactDetails, JsonConfig.ApiSerializerSettings); var jsonStream = new MemoryStream(Encoding.UTF8.GetBytes(pactDetailsJson)); var requestStream = new RequestStream(jsonStream, jsonStream.Length, true); var context = new NancyContext { Request = new Request("POST", new Url("http://localhost/pact"), requestStream) }; var handler = GetSubject(); _mockProviderRepository.Interactions.Returns(interactions); handler.Handle(context); _mockFileSystem.File.Received(1).WriteAllText(Path.Combine(Constants.DefaultPactFileDirectory, pactDetails.GeneratePactFileName()), pactFileJson); }
GeneratePactFileName_WhenConsumerNameAndProviderNameHaveNotBeenSet_ReturnsFileNameWithNoConsumerAndProviderNameAndDoesNotThrow() { var details = new PactDetails { Consumer = new Pacticipant(), Provider = new Pacticipant() }; var fileName = details.GeneratePactFileName(); Assert.Equal("-.json", fileName); }
public void GeneratePactFileName_WhenConsumerNameAndProviderNameHaveBeenSet_ReturnsFileName() { var details = new PactDetails { Consumer = new Pacticipant { Name = "My Consumer" }, Provider = new Pacticipant { Name = "My Provider" } }; var fileName = details.GeneratePactFileName(); Assert.Equal("my_consumer-my_provider.json", fileName); }
private void PersistPactFile() { if (String.IsNullOrEmpty(ConsumerName)) { throw new InvalidOperationException( "ConsumerName has not been set, please supply a consumer name using the ServiceConsumer method."); } if (String.IsNullOrEmpty(ProviderName)) { throw new InvalidOperationException( "ProviderName has not been set, please supply a provider name using the HasPactWith method."); } var pactDetails = new PactDetails { Provider = new Pacticipant { Name = ProviderName }, Consumer = new Pacticipant { Name = ConsumerName } }; var pactFilePath = Path.Combine(pactConfig.PactDir, pactDetails.GeneratePactFileName()); var pactFile = new MessagePactFile { Provider = pactDetails.Provider, Consumer = pactDetails.Consumer, Messages = mockMq.Interactions() }; var pactFileJson = JsonConvert.SerializeObject(pactFile, JsonConfig.PactFileSerializerSettings); try { File.WriteAllText(pactFilePath, pactFileJson); } catch (DirectoryNotFoundException) { Directory.CreateDirectory(pactConfig.PactDir); File.WriteAllText(pactFilePath, pactFileJson); } }
private void AssertPactTagRequest( HttpRequestMessage httpRequest, string httpRequestContent, string brokerBaseUri, PactDetails expectedPactDetails, string expectedConsumerVersion, string expectedTag, PactUriOptions expectedPactUriOptions = null) { if (expectedPactUriOptions != null) { Assert.Equal(expectedPactUriOptions.AuthorizationScheme, httpRequest.Headers.Authorization.Scheme); Assert.Equal(expectedPactUriOptions.AuthorizationValue, httpRequest.Headers.Authorization.Parameter); } string expectedUri = $"{brokerBaseUri}/pacticipants/{Uri.EscapeDataString(expectedPactDetails.Consumer.Name)}/versions/{expectedConsumerVersion}/tags/{Uri.EscapeDataString(expectedTag)}"; Assert.Equal(HttpMethod.Put, httpRequest.Method); Assert.Equal(expectedUri, httpRequest.RequestUri.OriginalString); Assert.Equal(string.Empty, httpRequestContent); Assert.Equal("application/json", httpRequest.Content.Headers.ContentType.MediaType); Assert.Equal("utf-8", httpRequest.Content.Headers.ContentType.CharSet); }
private void PersistPactFile() { if (String.IsNullOrEmpty(ConsumerName)) { throw new InvalidOperationException("ConsumerName has not been set, please supply a consumer name using the ServiceConsumer method."); } if (String.IsNullOrEmpty(ProviderName)) { throw new InvalidOperationException("ProviderName has not been set, please supply a provider name using the HasPactWith method."); } var pactDetails = new PactDetails { Provider = new Pacticipant { Name = ProviderName }, Consumer = new Pacticipant { Name = ConsumerName } }; _mockProviderService.SendAdminHttpRequest(HttpVerb.Post, Constants.PactPath, pactDetails); }
private bool ValidPactTagRequest( HttpRequestMessage httpRequest, string httpRequestContent, string brokerBaseUri, PactDetails expectedPactDetails, string expectedConsumerVersion, string expectedTag, PactUriOptions expectedPactUriOptions = null) { var authHeadersCorrect = false; if (expectedPactUriOptions != null) { if (httpRequest.Headers.Authorization.Scheme == expectedPactUriOptions.AuthorizationScheme && httpRequest.Headers.Authorization.Parameter == expectedPactUriOptions.AuthorizationValue) { authHeadersCorrect = true; } } else if (httpRequest.Headers.Authorization == null) { authHeadersCorrect = true; } if (httpRequest.Method == HttpMethod.Put && httpRequest.RequestUri.OriginalString == $"{brokerBaseUri}/pacticipants/{Uri.EscapeDataString(expectedPactDetails.Consumer.Name)}/versions/{expectedConsumerVersion}/tags/{Uri.EscapeDataString(expectedTag)}" && httpRequestContent == "" && httpRequest.Content.Headers.ContentType.MediaType == "application/json" && httpRequest.Content.Headers.ContentType.CharSet == "utf-8" && authHeadersCorrect) { return(true); } return(false); }
public void Handle_WithAPostRequestToPactAndNoInteractionsHaveBeenRegistered_NewPactFileIsSavedWithNoInteractions() { var pactDetails = new PactDetails { Consumer = new Party { Name = "Consumer" }, Provider = new Party { Name = "Provider" } }; var pactFile = new ProviderServicePactFile { Provider = pactDetails.Provider, Consumer = pactDetails.Consumer, Interactions = new ProviderServiceInteraction[0] }; var pactFileJson = JsonConvert.SerializeObject(pactFile, JsonConfig.PactFileSerializerSettings); var pactDetailsJson = JsonConvert.SerializeObject(pactDetails, JsonConfig.ApiSerializerSettings); var jsonStream = new MemoryStream(Encoding.UTF8.GetBytes(pactDetailsJson)); var requestStream = new RequestStream(jsonStream, jsonStream.Length, true); var context = new NancyContext { Request = new Request("POST", new Url("http://localhost/pact"), requestStream) }; var handler = GetSubject(); handler.Handle(context); _mockFileSystem.File.Received(1).WriteAllText(Path.Combine(Constants.DefaultPactFileDirectory, pactDetails.GeneratePactFileName()), pactFileJson); }
public void Handle_WithAPostRequestToPactAndDirectoryDoesNotExist_DirectoryIsCreatedAndNewPactFileIsSavedWithInteractions() { var pactDetails = new PactDetails { Consumer = new Pacticipant { Name = "Consumer" }, Provider = new Pacticipant { Name = "Provider" } }; var interactions = new List <ProviderServiceInteraction> { new ProviderServiceInteraction { Description = "My description", Request = new ProviderServiceRequest { Method = HttpVerb.Get, Path = "/test" }, Response = new ProviderServiceResponse { Status = (int)HttpStatusCode.NoContent } } }; var pactFile = new ProviderServicePactFile { Provider = pactDetails.Provider, Consumer = pactDetails.Consumer, Interactions = interactions }; var pactFileJson = JsonConvert.SerializeObject(pactFile, JsonConfig.PactFileSerializerSettings); var pactDetailsJson = JsonConvert.SerializeObject(pactDetails, JsonConfig.ApiSerializerSettings); var jsonStream = new MemoryStream(Encoding.UTF8.GetBytes(pactDetailsJson)); var requestStream = new RequestStream(jsonStream, jsonStream.Length, true); var context = new NancyContext { Request = new Request("POST", new Url("http://localhost/pact"), requestStream) }; var filePath = Path.Combine(Constants.DefaultPactDir, pactDetails.GeneratePactFileName()); var handler = GetSubject(); _mockProviderRepository.Interactions.Returns(interactions); var writeAllTextCount = 0; _mockFileSystem.File .When(x => x.WriteAllText(filePath, pactFileJson)) .Do(x => { writeAllTextCount++; if (writeAllTextCount == 1) { throw new DirectoryNotFoundException("It doesn't exist"); } }); handler.Handle(context); _mockFileSystem.File.Received(2).WriteAllText(filePath, pactFileJson); }