public void GeneratePactFileName_WhenConsumerAndProviderHaveNotBeenSet_ReturnsFileNameWithNoConsumerAndProviderNameAndDoesNotThrow() { var details = new PactDetails(); 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); }
public void Handle_WithAPostRequestToPactAndPactDirIsDifferentFromDefault_NewPactFileIsSavedWithInteractionsInTheSpecifiedPath() { 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 config = new PactConfig { PactDir = @"C:\temp" }; var filePath = Path.Combine(config.PactDir, pactDetails.GeneratePactFileName()); 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(config); _mockProviderRepository.Interactions.Returns(interactions); var response = handler.Handle(context); _mockFileSystem.File.Received(1).WriteAllText(filePath, pactFileJson); }
public void Handle_WithAPostRequestToPactAndNoInteractionsHaveBeenRegistered_NewPactFileIsSavedWithNoInteractions() { var pactDetails = new PactDetails { Consumer = new Pacticipant { Name = "Consumer" }, Provider = new Pacticipant { 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.DefaultPactDir, pactDetails.GeneratePactFileName()), pactFileJson); }
public void Handle_WithAPostRequestToPactAndInteractionsHaveBeenRegistered_ReturnsResponseWithPactFileJson() { 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 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_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); }
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); }