Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        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());
        }
Ejemplo n.º 3
0
        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();
        }
Ejemplo n.º 4
0
        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"));
        }
Ejemplo n.º 6
0
        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();
        }
Ejemplo n.º 7
0
        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();
        }
Ejemplo n.º 8
0
        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();
        }
Ejemplo n.º 9
0
        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();
        }
Ejemplo n.º 10
0
        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);
        }
Ejemplo n.º 12
0
        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);
        }
Ejemplo n.º 13
0
        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();
        }
Ejemplo n.º 14
0
        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());
        }
Ejemplo n.º 15
0
        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();
        }
Ejemplo n.º 16
0
        public void WhenNotRegisteringAnyInteractions_VerificationSucceeds()
        {
            ContextInfo.SetTestContextName(GetType().Name);

            _mockProviderService.VerifyInteractions();
        }
Ejemplo n.º 17
0
        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();
        }