public async Task FilterResultReturnsSuccessWithoutPostcodeOrRegions(string mediaTypeName)
        {
            var controller = BuildDetailsController(mediaTypeName);

            var returnedCourseData = new CourseDetails
            {
                Title             = "Maths in a unit test",
                Description       = "This is a maths in a top class description",
                EntryRequirements = "Bring yourself and a brain",
            };

            A.CallTo(() => FakeFindACoursesService.GetCourseDetails(CourseId, RunId)).Returns(returnedCourseData);

            var paramValues = new ParamValues
            {
                Page         = 1,
                D            = 1,
                OrderByValue = "StartDate",
            };
            var result = await controller.Details(CourseId, null, RunId, "Maths", paramValues).ConfigureAwait(false);

            Assert.IsType <ViewResult>(result);

            controller.Dispose();
        }
        public async Task PageReturnsSuccess(string town)
        {
            // arrange
            var controller  = BuildCourseController(MediaTypeNames.Text.Html);
            var paramValues = new ParamValues
            {
                Town            = town,
                CourseType      = "Online",
                CourseHours     = "Full time",
                CourseStudyTime = "Daytime",
            };
            var returnedCourseData = new CourseSearchResult
            {
                Courses = new List <Course>
                {
                    new Course {
                        Title = "Maths", CourseId = "1", AttendancePattern = "Online", Description = "This is a test description - over 220 chars" + new string(' ', 220)
                    },
                },
            };

            A.CallTo(() => FakeFindACoursesService.GetFilteredData(A <CourseSearchFilters> .Ignored, CourseSearchOrderBy.Relevance, 1)).Returns(returnedCourseData);

            // act
            var result = await controller.Page(paramValues, true).ConfigureAwait(false);

            // assert
            var viewResult = Assert.IsType <ViewResult>(result);
            var model      = Assert.IsAssignableFrom <BodyViewModel>(viewResult.ViewData.Model);

            Assert.NotNull(model.Results);

            controller.Dispose();
        }
        public async Task GetTlevelSuccess(string mediaTypeName)
        {
            //Set Up
            A.CallTo(() => FakeFindACoursesService.GetTLevelDetails(A <string> .Ignored, A <string> .Ignored)).Returns(GetTestTLevel());

            var controller = BuildDetailsController(mediaTypeName);

            var paramValues = new ParamValues
            {
                Page         = 1,
                D            = 1,
                OrderByValue = "StartDate",
            };

            //Act
            var result = await controller.TLevelDetails(TLevelId, TLevelLocationId, "testSearchTerm", paramValues).ConfigureAwait(false);

            //Asserts
            var viewResult = Assert.IsType <ViewResult>(result);

            var model = Assert.IsAssignableFrom <TLevelDetailsViewModel>(viewResult.ViewData.Model);

            model.TlevelDetails.TLevelId.Should().Be(Guid.Parse(TLevelId));

            controller.Dispose();
        }
        public async Task AjaxChangedCatchesException()
        {
            // arrange
            var controller  = BuildCourseController(MediaTypeNames.Text.Html);
            var paramValues = new ParamValues
            {
                Town            = "CV1 2WT",
                CourseType      = "Online",
                CourseHours     = "Full time",
                CourseStudyTime = "Daytime",
            };
            var appdata = System.Text.Json.JsonSerializer.Serialize(paramValues);

            A.CallTo(() => FakeFindACoursesService.GetFilteredData(A <CourseSearchFilters> .Ignored, A <CourseSearchOrderBy> .Ignored, A <int> .Ignored)).Throws(new Exception());
            A.CallTo(() => FakeViewHelper.RenderViewAsync(A <CourseController> .Ignored, A <string> .Ignored, A <BodyViewModel> .Ignored, A <bool> .Ignored)).Returns("<p>some markup</p>");

            // act
            var result = await controller.AjaxChanged(appdata).ConfigureAwait(false);

            // assert
            Assert.False(string.IsNullOrWhiteSpace(result.HTML));
            Assert.Equal(0, result.Count);
            Assert.Null(result.IsPostcode);

            controller.Dispose();
        }
コード例 #5
0
        public async Task CourseControllerFilterResultsReturnsSuccess(string mediaTypeName)
        {
            var controller    = BuildCourseController(mediaTypeName);
            var bodyViewModel = new BodyViewModel
            {
                CurrentSearchTerm = "Maths",
                SideBar           = new SideBarViewModel
                {
                    DistanceValue = "15 miles",
                    CourseType    = new FiltersListViewModel
                    {
                        SelectedIds = new List <string> {
                            "Online"
                        },
                    },
                    CourseHours = new FiltersListViewModel
                    {
                        SelectedIds = new List <string> {
                            "Full time"
                        },
                    },
                    CourseStudyTime = new FiltersListViewModel
                    {
                        SelectedIds = new List <string> {
                            "Daytime"
                        },
                    },
                    QualificationLevels = new FiltersListViewModel
                    {
                        SelectedIds = new List <string> {
                            "1"
                        },
                    },
                },
                IsTest = true,
            };

            var returnedCourseData = new CourseSearchResult
            {
                Courses = new List <Course>
                {
                    new Course {
                        Title = "Maths", CourseId = "1", AttendancePattern = "Online", Description = "This is a test description - over 220 chars" + new string(' ', 220)
                    },
                },
            };

            A.CallTo(() => FakeFindACoursesService.GetFilteredData(A <CourseSearchFilters> .Ignored, CourseSearchOrderBy.Relevance, 1)).Returns(returnedCourseData);

            var result = await controller.FilterResults(bodyViewModel, string.Empty).ConfigureAwait(false);

            Assert.IsType <ViewResult>(result);

            controller.Dispose();
        }
コード例 #6
0
        public async Task AjaxChangedReturnAutoLocationSuggestions(string townOrPostcode, string coordinates, bool expectAutoLocationSuggest)
        {
            // arrange
            var controller  = BuildCourseController(MediaTypeNames.Text.Html);
            var paramValues = new ParamValues
            {
                Town        = townOrPostcode,
                Coordinates = coordinates,
            };
            var appdata            = System.Text.Json.JsonSerializer.Serialize(paramValues);
            var returnedCourseData = new CourseSearchResult
            {
                ResultProperties = new CourseSearchResultProperties
                {
                    Page             = 1,
                    TotalResultCount = 1,
                    TotalPages       = 1,
                },
                Courses = new List <Course>
                {
                    new Course {
                        Title = "Maths", CourseId = "1", AttendancePattern = "Online", Description = "This is a test description - over 220 chars" + new string(' ', 220)
                    },
                },
            };

            A.CallTo(() => FakeLocationsService.GetSuggestedLocationsAsync(A <string> .Ignored)).Returns(GetTestSuggestedLocations());
            A.CallTo(() => FakeFindACoursesService.GetFilteredData(A <CourseSearchFilters> .Ignored, A <CourseSearchOrderBy> .Ignored, A <int> .Ignored)).Returns(returnedCourseData);
            A.CallTo(() => FakeViewHelper.RenderViewAsync(A <CourseController> .Ignored, A <string> .Ignored, A <BodyViewModel> .Ignored, A <bool> .Ignored)).Returns("<p>some markup</p>");

            // act
            var result = await controller.AjaxChanged(appdata).ConfigureAwait(false);

            // assert
            if (expectAutoLocationSuggest)
            {
                A.CallTo(() => FakeLocationsService.GetSuggestedLocationsAsync(A <string> .Ignored)).MustHaveHappenedOnceExactly();
                result.AutoSuggestedTown.Should().Be("LN1 (LAN1)");
                result.UsingAutoSuggestedLocation.Should().BeTrue();
                result.DidYouMeanLocations.Count.Should().Be(1);
            }
            else
            {
                A.CallTo(() => FakeLocationsService.GetSuggestedLocationsAsync(A <string> .Ignored)).MustNotHaveHappened();
                result.UsingAutoSuggestedLocation.Should().BeFalse();
            }

            controller.Dispose();
        }
コード例 #7
0
        public async Task FilterResultReturnsSuccessWithPostcodeAndRegions(string mediaTypeName)
        {
            using var controller = BuildDetailsController(mediaTypeName);

            var returnedCourseData = new CourseDetails
            {
                Title             = "Maths in a unit test",
                Description       = "This is a maths in a top class description",
                EntryRequirements = "Bring yourself and a brain",
                SubRegions        = new List <SubRegion>
                {
                    new SubRegion
                    {
                        SubRegionId  = Guid.NewGuid().ToString(),
                        Name         = "sub-region-1",
                        ParentRegion = new ParentRegion
                        {
                            RegionId = Guid.NewGuid().ToString(),
                            Name     = "region-1",
                        },
                    },
                    new SubRegion
                    {
                        SubRegionId  = Guid.NewGuid().ToString(),
                        Name         = "sub-region-2",
                        ParentRegion = new ParentRegion
                        {
                            RegionId = Guid.NewGuid().ToString(),
                            Name     = "region-2",
                        },
                    },
                },
            };

            A.CallTo(() => FakeFindACoursesService.GetCourseDetails(CourseId, RunId)).Returns(returnedCourseData);

            var paramValues = new ParamValues
            {
                Page         = 1,
                D            = 1,
                OrderByValue = "StartDate",
                Town         = "CV1 2WT",
            };
            var result = await controller.Details(CourseId, null, RunId, "Maths", paramValues).ConfigureAwait(false);

            Assert.IsType <ViewResult>(result);
        }
コード例 #8
0
        public async Task GetTLevelDetailsReturnsFailedOnServiceErrors(string errorMesage, HttpStatusCode expectedHttpStatusCode)
        {
            //Set Up
            A.CallTo(() => FakeFindACoursesService.GetTLevelDetails(A <string> .Ignored, A <string> .Ignored)).Throws(new SystemException(errorMesage));

            using var controller = BuildDetailsController("*/*");
            var paramValues = new ParamValues();

            //Act
            var result = await controller.TLevelDetails(CourseId, TLevelLocationId, "testSearchTerm", paramValues).ConfigureAwait(false);

            //Asserts
            var resultStatus = result as StatusCodeResult;

            resultStatus.StatusCode.Should().Be((int)expectedHttpStatusCode);
            A.CallTo(() => FakeLogService.LogError(A <string> .Ignored)).MustHaveHappenedOnceExactly();
        }
        public async Task CourseControllerSearchCourseThrowsException()
        {
            // arrange
            var controller = BuildCourseController(MediaTypeNames.Text.Html);

            A.CallTo(() => FakeFindACoursesService.GetFilteredData(A <CourseSearchFilters> .Ignored, A <CourseSearchOrderBy> .Ignored, A <int> .Ignored)).Throws(new Exception());

            // act
            var result = await controller.SearchCourse("search term").ConfigureAwait(false);

            // assert
            var viewResult = Assert.IsType <ViewResult>(result);
            var model      = Assert.IsAssignableFrom <BodyViewModel>(viewResult.ViewData.Model);

            Assert.Null(model.Results);

            controller.Dispose();
        }
        public async Task GetCourseDetailsReturnsFailedOnServiceErrors()
        {
            //Set Up
            A.CallTo(() => FakeFindACoursesService.GetCourseDetails(A <string> .Ignored, A <string> .Ignored)).Throws(new SystemException());

            var controller  = BuildDetailsController("*/*");
            var paramValues = new ParamValues();

            //Act
            var result = await controller.Details(CourseId, RunId, null, "testSearchTerm", paramValues).ConfigureAwait(false);

            //Asserts
            var resultStatus = result as StatusCodeResult;

            resultStatus.StatusCode.Should().Be((int)HttpStatusCode.FailedDependency);
            A.CallTo(() => FakeLogService.LogError(A <string> .Ignored)).MustHaveHappenedOnceExactly();

            controller.Dispose();
        }
コード例 #11
0
        public async Task AjaxChangedReturnsSuccessWithCorrectStates(string townOrPostcode, string coordinates, bool expectedShowDistance)
        {
            // arrange
            var controller  = BuildCourseController(MediaTypeNames.Text.Html);
            var paramValues = new ParamValues
            {
                Town            = townOrPostcode,
                Coordinates     = coordinates,
                CourseType      = "Online",
                CourseHours     = "Full time",
                CourseStudyTime = "Daytime",
            };
            var appdata            = System.Text.Json.JsonSerializer.Serialize(paramValues);
            var returnedCourseData = new CourseSearchResult
            {
                ResultProperties = new CourseSearchResultProperties
                {
                    Page             = 1,
                    TotalResultCount = 1,
                    TotalPages       = 1,
                },
                Courses = new List <Course>
                {
                    new Course {
                        Title = "Maths", CourseId = "1", AttendancePattern = "Online", Description = "This is a test description - over 220 chars" + new string(' ', 220)
                    },
                },
            };

            A.CallTo(() => FakeFindACoursesService.GetFilteredData(A <CourseSearchFilters> .Ignored, A <CourseSearchOrderBy> .Ignored, A <int> .Ignored)).Returns(returnedCourseData);
            A.CallTo(() => FakeViewHelper.RenderViewAsync(A <CourseController> .Ignored, A <string> .Ignored, A <BodyViewModel> .Ignored, A <bool> .Ignored)).Returns("<p>some markup</p>");

            // act
            var result = await controller.AjaxChanged(appdata).ConfigureAwait(false);

            // assert
            Assert.False(string.IsNullOrWhiteSpace(result.HTML));
            Assert.Equal(returnedCourseData.Courses.ToList().Count, result.Count);
            result.ShowDistanceSelector.Should().Be(expectedShowDistance);

            controller.Dispose();
        }
コード例 #12
0
        public async Task GetTlevelReturnsNotFound()
        {
            //Set Up
            const HttpStatusCode expectedHttpStatusCode = HttpStatusCode.NotFound;
            const TLevelDetails  nullTLevelDetails      = null;

            A.CallTo(() => FakeFindACoursesService.GetTLevelDetails(A <string> .Ignored, A <string> .Ignored)).Returns(nullTLevelDetails);

            using var controller = BuildDetailsController("*/*");
            var paramValues = new ParamValues();

            //Act
            var result = await controller.TLevelDetails(CourseId, TLevelLocationId, "testSearchTerm", paramValues).ConfigureAwait(false);

            //Asserts
            var resultStatus = result as StatusCodeResult;

            resultStatus.StatusCode.Should().Be((int)expectedHttpStatusCode);
            A.CallTo(() => FakeLogService.LogWarning(A <string> .Ignored)).MustHaveHappenedOnceExactly();
        }
コード例 #13
0
        public async Task CourseControllerSearchFreeCourseReturnsNoContent()
        {
            // arrange
            var controller = BuildCourseController(MediaTypeNames.Text.Html);
            var dummyCourseSearchResult = A.Dummy <CourseSearchResult>();

            A.CallTo(() => FakeFindACoursesService.GetFilteredData(A <CourseSearchFilters> ._, A <CourseSearchOrderBy> ._, A <int> ._)).Returns(dummyCourseSearchResult);

            // act
            var result = await controller.SearchFreeCourse("course").ConfigureAwait(false);

            // assert
            var viewResult = Assert.IsType <ViewResult>(result);
            var model      = Assert.IsAssignableFrom <BodyViewModel>(viewResult.ViewData.Model);

            A.CallTo(() =>
                     FakeFindACoursesService.GetFilteredData(A <CourseSearchFilters> .That.Matches(x => x.CampaignCode == CourseController.FreeSearchCampaignCode), A <CourseSearchOrderBy> ._, A <int> ._))
            .MustHaveHappenedOnceExactly();

            Assert.NotNull(model.Results);

            controller.Dispose();
        }
        public async Task CourseControllerFilterResultsThrowsException(string mediaTypeName)
        {
            // arrange
            var controller    = BuildCourseController(mediaTypeName);
            var bodyViewModel = new BodyViewModel
            {
                CurrentSearchTerm = "Maths",
                SideBar           = new SideBarViewModel(),
                IsTest            = true,
            };

            A.CallTo(() => FakeFindACoursesService.GetFilteredData(A <CourseSearchFilters> .Ignored, CourseSearchOrderBy.Relevance, 1)).Throws(new Exception());

            // act
            var result = await controller.FilterResults(bodyViewModel).ConfigureAwait(false);

            // assert
            var viewResult = Assert.IsType <ViewResult>(result);
            var model      = Assert.IsAssignableFrom <BodyViewModel>(viewResult.ViewData.Model);

            Assert.Null(model.Results);

            controller.Dispose();
        }