示例#1
0
        public SearchTests(FindACourseApiApplicationFactory factory)
            : base(factory)
        {
            FindACourseOfferingSearchClient
            .Setup(c => c.Search(It.IsAny <FindACourseOfferingSearchQuery>()))
            .Callback <FindACourseOfferingSearchQuery>(q => CapturedQuery = q)
            .ReturnsAsync(new SearchResult <FindACourseOffering>()
            {
                Facets = new Dictionary <string, IReadOnlyDictionary <object, long?> >()
                {
                    { "NotionalNVQLevelv2", new Dictionary <object, long?>() },
                    { "VenueStudyMode", new Dictionary <object, long?>() },
                    { "VenueAttendancePattern", new Dictionary <object, long?>() },
                    { "DeliveryMode", new Dictionary <object, long?>() },
                    { "ProviderName", new Dictionary <object, long?>() },
                    { "Region", new Dictionary <object, long?>() },
                },
                Items      = Array.Empty <SearchResultItem <FindACourseOffering> >(),
                TotalCount = 0
            });

            OnspdSearchClient
            .Setup(c => c.Search(It.IsAny <OnspdSearchQuery>()))
            .ReturnsAsync(new SearchResult <Onspd>()
            {
                Items      = Array.Empty <SearchResultItem <Onspd> >(),
                TotalCount = null
            });
        }
        public async Task PostcodeSearch_PostcodeNotInOnspdData_RendersError()
        {
            // Arrange
            var provider = await TestData.CreateProvider();

            var town     = "Town";
            var postcode = "AB1 2DE";

            OnspdSearchClient
            .Setup(c => c.Search(It.Is <OnspdSearchQuery>(q => q.Postcode == postcode)))
            .ReturnsAsync(new SearchResult <Onspd>()
            {
                Items = Array.Empty <SearchResultItem <Onspd> >()
            });

            ConfigureAddressSearchServiceResults(postcode, town, resultCount: 3);

            var journeyInstance = CreateJourneyInstance(provider.ProviderId);

            var request = new HttpRequestMessage(
                HttpMethod.Get,
                $"/venues/add/postcode-search?providerId={provider.ProviderId}&ffiid={journeyInstance.InstanceId.UniqueKey}&postcode={postcode}");

            // Act
            var response = await HttpClient.SendAsync(request);

            // Assert
            response.StatusCode.Should().Be(HttpStatusCode.BadRequest);

            var doc = await response.GetDocument();

            doc.AssertHasError("Postcode", "Enter a real postcode");
        }
 private void ResetMocks()
 {
     AddressSearchService.Reset();
     OnspdSearchClient.Reset();
     ProviderSearchClient.Reset();
     BinaryStorageProvider.Reset();
 }
示例#4
0
        public async Task Post_InvalidAddress_RendersError(
            string addressLine1,
            string addressLine2,
            string town,
            string county,
            string postcode,
            string expectedErrorInputId,
            string expectedErrorMessage)
        {
            // Arrange
            var provider = await TestData.CreateProvider();

            var postcodeLatitude  = 42M;
            var postcodeLongitude = 43M;

            OnspdSearchClient
            .Setup(c => c.Search(It.Is <OnspdSearchQuery>(q => q.Postcode == postcode)))
            .ReturnsAsync(new SearchResult <Onspd>()
            {
                Items = new[]
                {
                    new SearchResultItem <Onspd>()
                    {
                        Record = new Onspd()
                        {
                            pcds    = postcode,
                            Country = "England",
                            lat     = postcodeLatitude,
                            @long   = postcodeLongitude
                        }
                    }
                }
            });

            var journeyInstance = CreateJourneyInstance(provider.ProviderId);

            var request = new HttpRequestMessage(
                HttpMethod.Post,
                $"/venues/add/address?providerId={provider.ProviderId}&ffiid={journeyInstance.InstanceId.UniqueKey}")
            {
                Content = new FormUrlEncodedContentBuilder()
                          .Add("AddressLine1", addressLine1)
                          .Add("AddressLine2", addressLine2)
                          .Add("Town", town)
                          .Add("County", county)
                          .Add("Postcode", postcode)
                          .ToContent()
            };

            // Act
            var response = await HttpClient.SendAsync(request);

            // Assert
            response.StatusCode.Should().Be(HttpStatusCode.BadRequest);

            var doc = await response.GetDocument();

            doc.AssertHasError(expectedErrorInputId, expectedErrorMessage);
        }
示例#5
0
        public async Task Post_ValidRequest_UpdatesFormFlowInstanceAndRedirects(
            string onspdRecordPostcode,
            bool expectedNewAddressIsOutsideOfEnglandValue)
        {
            // Arrange
            var providerId = await TestData.CreateProvider();

            var venueId = await TestData.CreateVenue(providerId);

            OnspdSearchClient
            .Setup(c => c.Search(It.Is <OnspdSearchQuery>(q => q.Postcode == "CV1 2AA")))
            .ReturnsAsync(new SearchResult <Onspd>()
            {
                Results = new[]
                {
                    new Onspd()
                    {
                        pcds    = "CV1 2AA",
                        Country = onspdRecordPostcode,
                        lat     = 42M,
                        @long   = 43M
                    }
                }
            });

            var requestContent = new FormUrlEncodedContentBuilder()
                                 .Add("AddressLine1", "Updated address line 1")
                                 .Add("AddressLine2", "Updated address line 2")
                                 .Add("Town", "Updated town")
                                 .Add("County", "Updated county")
                                 .Add("Postcode", "CV1 2AA")
                                 .ToContent();

            var request = new HttpRequestMessage(HttpMethod.Post, $"venues/{venueId}/address")
            {
                Content = requestContent
            };

            // Act
            var response = await HttpClient.SendAsync(request);

            // Assert
            response.StatusCode.Should().Be(HttpStatusCode.Redirect);
            response.Headers.Location.OriginalString.Should().Be($"/venues/{venueId}");

            using (new AssertionScope())
            {
                var formFlowInstance = GetFormFlowInstance(venueId);
                formFlowInstance.State.AddressLine1.Should().Be("Updated address line 1");
                formFlowInstance.State.AddressLine2.Should().Be("Updated address line 2");
                formFlowInstance.State.Town.Should().Be("Updated town");
                formFlowInstance.State.County.Should().Be("Updated county");
                formFlowInstance.State.Postcode.Should().Be("CV1 2AA");
                formFlowInstance.State.Latitude.Should().Be(42M);
                formFlowInstance.State.Longitude.Should().Be(43M);
                formFlowInstance.State.NewAddressIsOutsideOfEngland.Should().Be(expectedNewAddressIsOutsideOfEnglandValue);
            }
        }
示例#6
0
        public async Task Post_JourneyIsCompleted_ReturnsConflict()
        {
            // Arrange
            var provider = await TestData.CreateProvider();

            var addressLine1 = "Test Venue line 1";
            var addressLine2 = "Test Venue line 2";
            var town         = "Town";
            var county       = "County";
            var country      = "England";
            var postcode     = "AB1 2DE";

            var postcodeLatitude  = 42M;
            var postcodeLongitude = 43M;

            OnspdSearchClient
            .Setup(c => c.Search(It.Is <OnspdSearchQuery>(q => q.Postcode == postcode)))
            .ReturnsAsync(new SearchResult <Onspd>()
            {
                Items = new[]
                {
                    new SearchResultItem <Onspd>()
                    {
                        Record = new Onspd()
                        {
                            pcds    = postcode,
                            Country = country,
                            lat     = postcodeLatitude,
                            @long   = postcodeLongitude
                        }
                    }
                }
            });

            var journeyInstance = CreateJourneyInstance(provider.ProviderId);

            GetJourneyInstance <AddVenueJourneyModel>(journeyInstance.InstanceId).Complete();

            var request = new HttpRequestMessage(
                HttpMethod.Post,
                $"/venues/add/address?providerId={provider.ProviderId}&ffiid={journeyInstance.InstanceId.UniqueKey}")
            {
                Content = new FormUrlEncodedContentBuilder()
                          .Add("AddressLine1", addressLine1)
                          .Add("AddressLine2", addressLine2)
                          .Add("Town", town)
                          .Add("County", county)
                          .Add("Postcode", postcode)
                          .ToContent()
            };

            // Act
            var response = await HttpClient.SendAsync(request);

            // Assert
            response.StatusCode.Should().Be(HttpStatusCode.Conflict);
        }
        public async Task Post_InvalidAddress_RendersError(
            string addressLine1,
            string addressLine2,
            string town,
            string county,
            string postcode,
            string expectedErrorInputId,
            string expectedErrorMessage)
        {
            // Arrange
            var provider = await TestData.CreateProvider();

            var venueId = (await TestData.CreateVenue(provider.ProviderId)).Id;

            OnspdSearchClient
            .Setup(c => c.Search(It.Is <OnspdSearchQuery>(q => q.Postcode == "CV1 2AA")))
            .ReturnsAsync(new SearchResult <Onspd>()
            {
                Items = new[]
                {
                    new SearchResultItem <Onspd>()
                    {
                        Record = new Onspd()
                        {
                            pcds    = postcode,
                            Country = "England",
                            lat     = 42M,
                            @long   = 43M
                        }
                    }
                }
            });

            var requestContent = new FormUrlEncodedContentBuilder()
                                 .Add("AddressLine1", addressLine1)
                                 .Add("AddressLine2", addressLine2)
                                 .Add("Town", town)
                                 .Add("County", county)
                                 .Add("Postcode", postcode)
                                 .ToContent();

            var request = new HttpRequestMessage(HttpMethod.Post, $"venues/{venueId}/address")
            {
                Content = requestContent
            };

            // Act
            var response = await HttpClient.SendAsync(request);

            // Assert
            response.StatusCode.Should().Be(HttpStatusCode.BadRequest);

            var doc = await response.GetDocument();

            doc.AssertHasError(expectedErrorInputId, expectedErrorMessage);
        }
        private void ResetMocks()
        {
            CosmosDbQueryDispatcher.Reset();
            FindACourseOfferingSearchClient.Reset();
            LarsSearchClient.Reset();
            OnspdSearchClient.Reset();
            RegionCache.Reset();
            SqlQueryDispatcher.Reset();

            RegionCache.Setup(c => c.GetAllRegions()).ReturnsAsync(Array.Empty <Region>());
        }
        public async Task Post_UserCannotAccessVenue_ReturnsForbidden(TestUserType userType)
        {
            // Arrange
            var provider = await TestData.CreateProvider();

            var venueId = (await TestData.CreateVenue(provider.ProviderId)).Id;

            var anotherProvider = await TestData.CreateProvider();

            OnspdSearchClient
            .Setup(c => c.Search(It.Is <OnspdSearchQuery>(q => q.Postcode == "CV1 2AA")))
            .ReturnsAsync(new SearchResult <Onspd>()
            {
                Items = new[]
                {
                    new SearchResultItem <Onspd>()
                    {
                        Record = new Onspd()
                        {
                            pcds    = "CV1 2AA",
                            Country = "England",
                            lat     = 42M,
                            @long   = 43M
                        }
                    }
                }
            });

            var requestContent = new FormUrlEncodedContentBuilder()
                                 .Add("AddressLine1", "Updated address line 1")
                                 .Add("AddressLine2", "Updated address line 2")
                                 .Add("Town", "Updated town")
                                 .Add("County", "Updated county")
                                 .Add("Postcode", "CV1 2AA")
                                 .ToContent();

            var request = new HttpRequestMessage(HttpMethod.Post, $"venues/{venueId}/address")
            {
                Content = requestContent
            };

            await User.AsTestUser(userType, anotherProvider.ProviderId);

            // Act
            var response = await HttpClient.SendAsync(request);

            // Assert
            response.StatusCode.Should().Be(HttpStatusCode.Forbidden);
        }
        public async Task Post_VenueDoesNotExist_ReturnsNotFound()
        {
            // Arrange
            var venueId = Guid.NewGuid();

            OnspdSearchClient
            .Setup(c => c.Search(It.Is <OnspdSearchQuery>(q => q.Postcode == "CV1 2AA")))
            .ReturnsAsync(new SearchResult <Onspd>()
            {
                Items = new[]
                {
                    new SearchResultItem <Onspd>()
                    {
                        Record = new Onspd()
                        {
                            pcds    = "CV1 2AA",
                            Country = "England",
                            lat     = 42M,
                            @long   = 43M
                        }
                    }
                }
            });

            var requestContent = new FormUrlEncodedContentBuilder()
                                 .Add("AddressLine1", "Updated address line 1")
                                 .Add("AddressLine2", "Updated address line 2")
                                 .Add("Town", "Updated town")
                                 .Add("County", "Updated county")
                                 .Add("Postcode", "CV1 2AA")
                                 .ToContent();

            var request = new HttpRequestMessage(HttpMethod.Post, $"venues/{venueId}/address")
            {
                Content = requestContent
            };

            // Act
            var response = await HttpClient.SendAsync(request);

            // Assert
            response.StatusCode.Should().Be(HttpStatusCode.NotFound);
        }
示例#11
0
        public async Task PostcodeWithoutSpaces_IsNormalizedToIncludeSpace()
        {
            // Arrange
            var postcode           = "AB12DE";
            var normalizedPostcode = "AB1 2DE";
            var lat = 1m;
            var lng = 2m;

            ConfigureOnspdSearchResultsForPostcode(normalizedPostcode, coords: (lat, lng));

            var request = CreateRequest(new
            {
                postcode,
                sortBy = "Distance"
            });

            // Act
            var response = await HttpClient.SendAsync(request);

            // Assert
            response.EnsureSuccessStatusCode();
            OnspdSearchClient.Verify(c => c.Search(It.Is <OnspdSearchQuery>(q => q.Postcode == normalizedPostcode)));
        }
示例#12
0
        public async Task Post_ValidRequest_UpdatesJourneyInstanceAndRedirects(
            string onspdRecordCountry,
            bool expectedNewAddressIsOutsideOfEnglandValue)
        {
            // Arrange
            var provider = await TestData.CreateProvider();

            var addressLine1 = "Test Venue line 1";
            var addressLine2 = "Test Venue line 2";
            var town         = "Town";
            var county       = "County";
            var postcode     = "AB1 2DE";

            var postcodeLatitude  = 42M;
            var postcodeLongitude = 43M;

            OnspdSearchClient
            .Setup(c => c.Search(It.Is <OnspdSearchQuery>(q => q.Postcode == postcode)))
            .ReturnsAsync(new SearchResult <Onspd>()
            {
                Items = new[]
                {
                    new SearchResultItem <Onspd>()
                    {
                        Record = new Onspd()
                        {
                            pcds    = postcode,
                            Country = onspdRecordCountry,
                            lat     = postcodeLatitude,
                            @long   = postcodeLongitude
                        }
                    }
                }
            });

            var journeyInstance = CreateJourneyInstance(provider.ProviderId);

            var request = new HttpRequestMessage(
                HttpMethod.Post,
                $"/venues/add/address?providerId={provider.ProviderId}&ffiid={journeyInstance.InstanceId.UniqueKey}")
            {
                Content = new FormUrlEncodedContentBuilder()
                          .Add("AddressLine1", addressLine1)
                          .Add("AddressLine2", addressLine2)
                          .Add("Town", town)
                          .Add("County", county)
                          .Add("Postcode", postcode)
                          .ToContent()
            };

            // Act
            var response = await HttpClient.SendAsync(request);

            // Assert
            response.StatusCode.Should().Be(HttpStatusCode.Found);

            response.Headers.Location.OriginalString.Should()
            .Be($"/venues/add/details?providerId={provider.ProviderId}&ffiid={journeyInstance.InstanceId.UniqueKey}");

            using (new AssertionScope())
            {
                journeyInstance = GetJourneyInstance <AddVenueJourneyModel>(journeyInstance.InstanceId);
                journeyInstance.State.AddressLine1.Should().Be(addressLine1);
                journeyInstance.State.AddressLine2.Should().Be(addressLine2);
                journeyInstance.State.Town.Should().Be(town);
                journeyInstance.State.County.Should().Be(county);
                journeyInstance.State.Postcode.Should().Be(postcode);
                journeyInstance.State.Latitude.Should().Be(postcodeLatitude);
                journeyInstance.State.Longitude.Should().Be(postcodeLongitude);
                journeyInstance.State.AddressIsOutsideOfEngland.Should().Be(expectedNewAddressIsOutsideOfEnglandValue);
            }
        }