public void Ctor_WithTearDownAction_SetsTearDownAction() { Action tearDown = () => { }; var providerStates = new ProviderStates(tearDown: tearDown); Assert.Equal(tearDown, providerStates.TearDown); }
public void Ctor_WithSetUpAction_SetsSetUpAction() { Action setUp = () => { }; var providerStates = new ProviderStates(setUp: setUp); Assert.Equal(setUp, providerStates.SetUp); }
public void Validate_ProviderStatesTearDownDefined_TearDownActionIsInvokedForEachInteraction() { var actionInvocationCount = 0; var pact = new ProviderServicePactFile { Consumer = new Pacticipant { Name = "My client" }, Provider = new Pacticipant { Name = "My Provider" }, Interactions = new List<ProviderServiceInteraction> { new ProviderServiceInteraction { Description = "My interaction" }, new ProviderServiceInteraction { Description = "My interaction 2" } } }; var providerStates = new ProviderStates(setUp: null, tearDown: () => { actionInvocationCount++; }); var validator = GetSubject(); validator.Validate(pact, providerStates); Assert.Equal(pact.Interactions.Count(), actionInvocationCount); }
public void Validate_ProviderStatesTearDownDefined_TearDownActionIsInvoked() { var actionInkoved = false; var pact = new ProviderServicePactFile { Consumer = new Party { Name = "My client" }, Provider = new Party { Name = "My Provider" }, Interactions = new List<ProviderServiceInteraction> { new ProviderServiceInteraction { Description = "My interaction" } } }; var providerStates = new ProviderStates(setUp: null, tearDown: () => { actionInkoved = true; }); var mockProviderServiceResponseComparer = Substitute.For<IProviderServiceResponseComparer>(); var fakeHttpClient = new FakeHttpClient(); var mockHttpRequestMessageMapper = Substitute.For<IHttpRequestMessageMapper>(); var mockProviderServiceResponseMapper = Substitute.For<IProviderServiceResponseMapper>(); var providerServiceValidator = new ProviderServiceValidator( mockProviderServiceResponseComparer, fakeHttpClient, mockHttpRequestMessageMapper, mockProviderServiceResponseMapper, new Reporter(new NoOpReportOutputter())); providerServiceValidator.Validate(pact, providerStates); Assert.True(actionInkoved, "Provider states pact tearDown action is invoked"); }
public void Find_WithNoAddedProviderStates_ReturnsNull() { var providerStates = new ProviderStates(); var actualProviderState = providerStates.Find("my provider state"); Assert.Null(actualProviderState); }
public void Add_WithAndAlreadyAddedProviderState_ThrowsArgumentException() { const string providerStateDescription = "my provider state"; var providerState1 = new ProviderState(providerStateDescription); var providerState2 = new ProviderState(providerStateDescription); var providerStates = new ProviderStates(); providerStates.Add(providerState1); Assert.Throws<ArgumentException>(() => providerStates.Add(providerState2)); }
public void Add_WithProviderState_AddsProviderState() { const string providerStateDescription = "my provider state"; var providerState = new ProviderState(providerStateDescription); var providerStates = new ProviderStates(); providerStates.Add(providerState); Assert.Equal(providerState, providerStates.Find(providerStateDescription)); }
public void Find_WithProviderStateThatHasBeenAdded_ReturnsProviderState() { const string providerStateDescription = "my provider state 2"; var providerState1 = new ProviderState("my provider state"); var providerState2 = new ProviderState(providerStateDescription); var providerStates = new ProviderStates(); providerStates.Add(providerState1); providerStates.Add(providerState2); var actualProviderState = providerStates.Find(providerStateDescription); Assert.Equal(providerState2, actualProviderState); }
public void Find_WithProviderStateThatDoesNotMatchProviderStates_ReturnsNull() { const string providerStateDescription = "my provider state 2"; var providerState1 = new ProviderState("my provider state"); var providerState2 = new ProviderState(providerStateDescription); var providerStates = new ProviderStates(); providerStates.Add(providerState1); providerStates.Add(providerState2); var actualProviderState = providerStates.Find("something else"); Assert.Null(actualProviderState); }
internal PactVerifier( Action setUp, Action tearDown, IFileSystem fileSystem, Func<IHttpRequestSender, IProviderServiceValidator> providerServiceValidatorFactory, HttpClient httpClient) { _fileSystem = fileSystem; _providerServiceValidatorFactory = providerServiceValidatorFactory; _httpClient = httpClient; ProviderStates = new ProviderStates(setUp, tearDown); }
internal PactVerifier( Action setUp, Action tearDown, IFileSystem fileSystem, Func<IHttpRequestSender, IReporter, PactVerifierConfig, IProviderServiceValidator> providerServiceValidatorFactory, HttpClient httpClient, PactVerifierConfig config) { _fileSystem = fileSystem; _providerServiceValidatorFactory = providerServiceValidatorFactory; _httpClient = httpClient; _config = config ?? new PactVerifierConfig(); ProviderStates = new ProviderStates(setUp, tearDown); }
public IProviderStates ProviderStatesFor(string consumerName, Action setUp = null, Action tearDown = null) { if (String.IsNullOrEmpty(consumerName)) { throw new ArgumentException("Please supply a non null or empty consumerName"); } if (!String.IsNullOrEmpty(ConsumerName) && !ConsumerName.Equals(consumerName)) { throw new ArgumentException("Please supply the same consumerName that was defined when calling the HonoursPactWith method"); } ConsumerName = consumerName; ProviderStates = new ProviderStates(setUp, tearDown); return this; }
public void Validate_WithTwoInteractionsAndProviderStateSetupAndTearDownDefined_SetUpIsInvokedBeforeCompareAndTearDownIsInvokedAfterCompare() { const string providerState1 = "My Provider State"; const string providerState2 = "My Provider State 2"; const string setUpSuffix = "-SetUp"; const string tearDownSuffix = "-TearDown"; var actionInvocationLog = new List<string>(); var pact = new ProviderServicePactFile { Consumer = new Pacticipant { Name = "My client" }, Provider = new Pacticipant { Name = "My Provider" }, Interactions = new List<ProviderServiceInteraction> { new ProviderServiceInteraction { ProviderState = providerState1, Description = "My interaction" }, new ProviderServiceInteraction { ProviderState = providerState2, Description = "My interaction" }, } }; var providerStates = new ProviderStates(); providerStates.Add(new ProviderState(providerState1, setUp: () => actionInvocationLog.Add(providerState1 + setUpSuffix), tearDown: () => actionInvocationLog.Add(providerState1 + tearDownSuffix))); providerStates.Add(new ProviderState(providerState2, setUp: () => actionInvocationLog.Add(providerState2 + setUpSuffix), tearDown: () => actionInvocationLog.Add(providerState2 + tearDownSuffix))); var validator = GetSubject(); validator.Validate(pact, providerStates); Assert.Equal(4, actionInvocationLog.Count()); Assert.Equal(providerState1 + setUpSuffix, actionInvocationLog.First()); Assert.Equal(providerState1 + tearDownSuffix, actionInvocationLog.Skip(1).First()); Assert.Equal(providerState2 + setUpSuffix, actionInvocationLog.Skip(2).First()); Assert.Equal(providerState2 + tearDownSuffix, actionInvocationLog.Last()); }
public void Validate_WhenProviderServiceResponseComparerThrowsAndProviderStatesTearDownDefined_TearDownActionIsInvoked() { var actionInkoved = false; var pact = new ProviderServicePactFile { Consumer = new Pacticipant { Name = "My client" }, Provider = new Pacticipant { Name = "My Provider" }, Interactions = new List<ProviderServiceInteraction> { new ProviderServiceInteraction { Description = "My interaction" } } }; var providerStates = new ProviderStates(setUp: null, tearDown: () => { actionInkoved = true; }); var validator = GetSubject(); _mockResponseComparer .When(x => x.Compare(Arg.Any<ProviderServiceResponse>(), Arg.Any<ProviderServiceResponse>())) .Do(x => { throw new PactFailureException("Expected response cannot be null"); }); Assert.Throws<PactFailureException>(() => validator.Validate(pact, providerStates)); Assert.True(actionInkoved, "Provider states pact tearDown action is invoked"); }
public void Validate_WithNoInteractionsAndProviderStatesSetUpDefined_SetUpActionIsNotInvoked() { var actionInkoved = false; var pact = new ProviderServicePactFile { Consumer = new Pacticipant { Name = "My client" }, Provider = new Pacticipant { Name = "My Provider" }, Interactions = null }; var providerStates = new ProviderStates(setUp: () => { actionInkoved = true; }, tearDown: null); var validator = GetSubject(); validator.Validate(pact, providerStates); Assert.False(actionInkoved, "Provider states pact setUp action is not invoked"); }
public void Validate_WhenInteractionDefinesAProviderStateAndProviderStateTearDownDefined_TearDownActionIsInvoked() { var actionInkoved = false; var pact = new ProviderServicePactFile { Consumer = new Pacticipant { Name = "My client" }, Provider = new Pacticipant { Name = "My Provider" }, Interactions = new List<ProviderServiceInteraction> { new ProviderServiceInteraction { ProviderState = "My Provider State", Description = "My interaction" } } }; var providerStates = new ProviderStates(); providerStates.Add(new ProviderState("My Provider State", setUp: null, tearDown: () => { actionInkoved = true; })); var validator = GetSubject(); validator.Validate(pact, providerStates); Assert.True(actionInkoved, "Provider state tearDown action is invoked"); }
public void Validate_WhenInteractionDefinesAProviderStateButNoProviderStateIsSupplied_ThrowsInvalidOperationException() { var pact = new ProviderServicePactFile { Consumer = new Pacticipant { Name = "My client" }, Provider = new Pacticipant { Name = "My Provider" }, Interactions = new List<ProviderServiceInteraction> { new ProviderServiceInteraction { ProviderState = "My Provider State", Description = "My interaction" } } }; var providerStates = new ProviderStates(); var validator = GetSubject(); Assert.Throws<InvalidOperationException>(() => validator.Validate(pact, providerStates)); }
public void Validate(ProviderServicePactFile pactFile, ProviderStates providerStates) { if (pactFile == null) { throw new ArgumentException("Please supply a non null pactFile"); } if (pactFile.Consumer == null || String.IsNullOrEmpty(pactFile.Consumer.Name)) { throw new ArgumentException("Please supply a non null or empty Consumer name in the pactFile"); } if (pactFile.Provider == null || String.IsNullOrEmpty(pactFile.Provider.Name)) { throw new ArgumentException("Please supply a non null or empty Provider name in the pactFile"); } if (pactFile.Interactions != null && pactFile.Interactions.Any()) { InvokePactSetUpIfApplicable(providerStates); var interationNumber = 1; try //TODO: Clean this up once the validators/comparers no longer throw { foreach (var interaction in pactFile.Interactions) { ProviderState providerStateItem = null; if (interaction.ProviderState != null) { try { providerStateItem = providerStates.Find(interaction.ProviderState); } catch (Exception) { providerStateItem = null; } if (providerStateItem == null) { throw new InvalidOperationException(String.Format("providerState '{0}' was defined by a consumer, however could not be found. Please supply this provider state.", interaction.ProviderState)); } } InvokeInteractionSetUpIfApplicable(providerStateItem); _reporter.ReportInfo(String.Format("{0}) Verifying a Pact between {1} and {2} - {3}.", interationNumber, pactFile.Consumer.Name, pactFile.Provider.Name, interaction.Description)); try { ValidateInteraction(interaction); } finally { InvokeInteractionIfApplicable(providerStateItem); } interationNumber++; } _reporter.ThrowIfAnyErrors(); } finally { InvokeTearDownIfApplicable(providerStates); } } }
public void Validate_WhenInteractionDefinesAProviderStateAndProviderStateIsSuppliedWithNoSetUpOrTearDown_NoProviderStateSetUpOrTearDownActionsAreInvoked() { var pact = new ProviderServicePactFile { Consumer = new Pacticipant { Name = "My client" }, Provider = new Pacticipant { Name = "My Provider" }, Interactions = new List<ProviderServiceInteraction> { new ProviderServiceInteraction { ProviderState = "My Provider State", Description = "My interaction" } } }; var providerStates = new ProviderStates(); providerStates.Add(new ProviderState("My Provider State")); var validator = GetSubject(); validator.Validate(pact, providerStates); }
public void Validate_WhenInteractionDefinesAProviderStateAndProviderStateIsNotFound_ThrowsInvalidOperationException() { var pact = new ProviderServicePactFile { Consumer = new Party { Name = "My client" }, Provider = new Party { Name = "My Provider" }, Interactions = new List<ProviderServiceInteraction> { new ProviderServiceInteraction { ProviderState = "My Provider State", Description = "My interaction" } } }; var providerStates = new ProviderStates(); providerStates.Add(new ProviderState("Some other provider state")); var validator = GetSubject(); Assert.Throws<InvalidOperationException>(() => validator.Validate(pact, providerStates)); }
public void Validate_WhenInteractionDefinesAProviderStateAndProviderStateIsSuppliedWithNoSetUpOrTearDown_NoProviderStateSetUpOrTearDownActionsAreInvoked() { var pact = new ProviderServicePactFile { Consumer = new Party { Name = "My client" }, Provider = new Party { Name = "My Provider" }, Interactions = new List<ProviderServiceInteraction> { new ProviderServiceInteraction { ProviderState = "My Provider State", Description = "My interaction" } } }; var providerStates = new ProviderStates(); providerStates.Add(new ProviderState("My Provider State")); var mockProviderServiceResponseComparer = Substitute.For<IProviderServiceResponseComparer>(); var fakeHttpClient = new FakeHttpClient(); var mockHttpRequestMessageMapper = Substitute.For<IHttpRequestMessageMapper>(); var mockProviderServiceResponseMapper = Substitute.For<IProviderServiceResponseMapper>(); var providerServiceValidator = new ProviderServiceValidator( mockProviderServiceResponseComparer, fakeHttpClient, mockHttpRequestMessageMapper, mockProviderServiceResponseMapper, new Reporter(new NoOpReportOutputter())); providerServiceValidator.Validate(pact, providerStates); }
public void Validate_WithTwoInteractionsAndProviderStateSetupAndTearDownDefined_SetUpIsInvokedBeforeCompareAndTearDownIsInvokedAfterCompare() { const string providerState1 = "My Provider State"; const string providerState2 = "My Provider State 2"; const string setUpSuffix = "-SetUp"; const string tearDownSuffix = "-TearDown"; var actionInvocationLog = new List<string>(); var pact = new ProviderServicePactFile { Consumer = new Party { Name = "My client" }, Provider = new Party { Name = "My Provider" }, Interactions = new List<ProviderServiceInteraction> { new ProviderServiceInteraction { ProviderState = providerState1, Description = "My interaction" }, new ProviderServiceInteraction { ProviderState = providerState2, Description = "My interaction" }, } }; var providerStates = new ProviderStates(); providerStates.Add(new ProviderState(providerState1, setUp: () => actionInvocationLog.Add(providerState1 + setUpSuffix), tearDown: () => actionInvocationLog.Add(providerState1 + tearDownSuffix))); providerStates.Add(new ProviderState(providerState2, setUp: () => actionInvocationLog.Add(providerState2 + setUpSuffix), tearDown: () => actionInvocationLog.Add(providerState2 + tearDownSuffix))); var mockProviderServiceResponseComparer = Substitute.For<IProviderServiceResponseComparer>(); var fakeHttpClient = new FakeHttpClient(); var mockHttpRequestMessageMapper = Substitute.For<IHttpRequestMessageMapper>(); var mockProviderServiceResponseMapper = Substitute.For<IProviderServiceResponseMapper>(); var providerServiceValidator = new ProviderServiceValidator( mockProviderServiceResponseComparer, fakeHttpClient, mockHttpRequestMessageMapper, mockProviderServiceResponseMapper, new Reporter(new NoOpReportOutputter())); providerServiceValidator.Validate(pact, providerStates); Assert.Equal(4, actionInvocationLog.Count()); Assert.Equal(providerState1 + setUpSuffix, actionInvocationLog.First()); Assert.Equal(providerState1 + tearDownSuffix, actionInvocationLog.Skip(1).First()); Assert.Equal(providerState2 + setUpSuffix, actionInvocationLog.Skip(2).First()); Assert.Equal(providerState2 + tearDownSuffix, actionInvocationLog.Last()); }
public void Validate_ProviderStatesSetUpDefined_SetUpActionIsInvoked() { var actionInkoved = false; var pact = new ProviderServicePactFile { Consumer = new Party { Name = "My client" }, Provider = new Party { Name = "My Provider" }, Interactions = new List<ProviderServiceInteraction> { new ProviderServiceInteraction { Description = "My interaction" } } }; var providerStates = new ProviderStates(setUp: () => { actionInkoved = true; }, tearDown: null); var validator = GetSubject(); validator.Validate(pact, providerStates); Assert.True(actionInkoved, "Provider states pact setUp action is invoked"); }
private void InvokeTearDownIfApplicable(ProviderStates providerStates) { if (providerStates != null && providerStates.TearDown != null) { providerStates.TearDown(); } }
public void Validate_WhenProviderServiceResponseComparerThrowsAndProviderStatesTearDownDefined_TearDownActionIsInvoked() { var actionInkoved = false; var pact = new ProviderServicePactFile { Consumer = new Party { Name = "My client" }, Provider = new Party { Name = "My Provider" }, Interactions = new List<ProviderServiceInteraction> { new ProviderServiceInteraction { Description = "My interaction" } } }; var providerStates = new ProviderStates(setUp: null, tearDown: () => { actionInkoved = true; }); var mockProviderServiceResponseComparer = Substitute.For<IProviderServiceResponseComparer>(); var fakeHttpClient = new FakeHttpClient(); var mockHttpRequestMessageMapper = Substitute.For<IHttpRequestMessageMapper>(); var mockProviderServiceResponseMapper = Substitute.For<IProviderServiceResponseMapper>(); mockProviderServiceResponseComparer .When(x => x.Compare(Arg.Any<ProviderServiceResponse>(), Arg.Any<ProviderServiceResponse>())) .Do(x => { throw new CompareFailedException("Expected response cannot be null"); }); var providerServiceValidator = new ProviderServiceValidator( mockProviderServiceResponseComparer, fakeHttpClient, mockHttpRequestMessageMapper, mockProviderServiceResponseMapper, new Reporter(new NoOpReportOutputter())); Assert.Throws<CompareFailedException>(() => providerServiceValidator.Validate(pact, providerStates)); Assert.True(actionInkoved, "Provider states pact tearDown action is invoked"); }
public void Validate_WhenInteractionDefinesAProviderStateButNoProviderStateIsSupplied_ThrowsInvalidOperationException() { var pact = new ProviderServicePactFile { Consumer = new Party { Name = "My client" }, Provider = new Party { Name = "My Provider" }, Interactions = new List<ProviderServiceInteraction> { new ProviderServiceInteraction { ProviderState = "My Provider State", Description = "My interaction" } } }; var providerStates = new ProviderStates(); var mockProviderServiceResponseComparer = Substitute.For<IProviderServiceResponseComparer>(); var fakeHttpClient = new FakeHttpClient(); var mockHttpRequestMessageMapper = Substitute.For<IHttpRequestMessageMapper>(); var mockProviderServiceResponseMapper = Substitute.For<IProviderServiceResponseMapper>(); var providerServiceValidator = new ProviderServiceValidator( mockProviderServiceResponseComparer, fakeHttpClient, mockHttpRequestMessageMapper, mockProviderServiceResponseMapper, new Reporter(new NoOpReportOutputter())); Assert.Throws<InvalidOperationException>(() => providerServiceValidator.Validate(pact, providerStates)); }
private void InvokePactSetUpIfApplicable(ProviderStates providerStates) { if (providerStates != null && providerStates.SetUp != null) { providerStates.SetUp(); } }
public void Find_WithNullProviderState_ThrowsArgumentNullException() { var providerStates = new ProviderStates(); Assert.Throws<ArgumentNullException>(() => providerStates.Find(null)); }
public void Validate(ProviderServicePactFile pactFile, ProviderStates providerStates) { if (pactFile == null) { throw new ArgumentException("Please supply a non null pactFile"); } if (pactFile.Consumer == null || String.IsNullOrEmpty(pactFile.Consumer.Name)) { throw new ArgumentException("Please supply a non null or empty Consumer name in the pactFile"); } if (pactFile.Provider == null || String.IsNullOrEmpty(pactFile.Provider.Name)) { throw new ArgumentException("Please supply a non null or empty Provider name in the pactFile"); } if (pactFile.Interactions != null && pactFile.Interactions.Any()) { _reporter.ReportInfo(String.Format("Verifying a Pact between {0} and {1}", pactFile.Consumer.Name, pactFile.Provider.Name)); var comparisonResult = new ComparisonResult(); foreach (var interaction in pactFile.Interactions) { InvokePactSetUpIfApplicable(providerStates); _reporter.ResetIndentation(); ProviderState providerStateItem = null; if (interaction.ProviderState != null) { try { providerStateItem = providerStates.Find(interaction.ProviderState); } catch (Exception) { providerStateItem = null; } if (providerStateItem == null) { throw new InvalidOperationException(String.Format("providerState '{0}' was defined by a consumer, however could not be found. Please supply this provider state.", interaction.ProviderState)); } } InvokeProviderStateSetUpIfApplicable(providerStateItem); if (!String.IsNullOrEmpty(interaction.ProviderState)) { _reporter.Indent(); _reporter.ReportInfo(String.Format("Given {0}", interaction.ProviderState)); } _reporter.Indent(); _reporter.ReportInfo(String.Format("{0}", interaction.Description)); if (interaction.Request != null) { _reporter.Indent(); _reporter.ReportInfo(String.Format("with {0} {1}", interaction.Request.Method.ToString().ToUpper(), interaction.Request.Path)); } try { var interactionComparisonResult = ValidateInteraction(interaction); comparisonResult.AddChildResult(interactionComparisonResult); _reporter.Indent(); _reporter.ReportSummary(interactionComparisonResult); } finally { InvokeProviderStateTearDownIfApplicable(providerStateItem); InvokeTearDownIfApplicable(providerStates); } } _reporter.ResetIndentation(); _reporter.ReportFailureReasons(comparisonResult); _reporter.Flush(); if (comparisonResult.HasFailure) { throw new PactFailureException(String.Format("See test output or {0} for failure details.", !String.IsNullOrEmpty(_config.LoggerName) ? LogProvider.CurrentLogProvider.ResolveLogPath(_config.LoggerName) : "logs")); } } }
public void Validate_WithNoInteractionsAndProviderStatesSetUpDefined_SetUpActionIsNotInvoked() { var actionInkoved = false; var pact = new ProviderServicePactFile { Consumer = new Party { Name = "My client" }, Provider = new Party { Name = "My Provider" }, Interactions = null }; var providerStates = new ProviderStates(setUp: () => { actionInkoved = true; }, tearDown: null); var mockProviderServiceResponseComparer = Substitute.For<IProviderServiceResponseComparer>(); var fakeHttpClient = new FakeHttpClient(); var mockHttpRequestMessageMapper = Substitute.For<IHttpRequestMessageMapper>(); var mockProviderServiceResponseMapper = Substitute.For<IProviderServiceResponseMapper>(); var providerServiceValidator = new ProviderServiceValidator( mockProviderServiceResponseComparer, fakeHttpClient, mockHttpRequestMessageMapper, mockProviderServiceResponseMapper, new Reporter(new NoOpReportOutputter())); providerServiceValidator.Validate(pact, providerStates); Assert.False(actionInkoved, "Provider states pact setUp action is not invoked"); }