示例#1
0
        public void Index_should_redirect_to_section_page_if_one_section_in_course()
        {
            // Given
            const int customisationId       = 123;
            const int sectionId             = 456;
            var       section               = CourseContentHelper.CreateDefaultCourseSection(id: sectionId);
            var       expectedCourseContent = CourseContentHelper.CreateDefaultCourseContent(customisationId);

            expectedCourseContent.Sections.Add(section);

            A.CallTo(() => courseContentService.GetCourseContent(CandidateId, customisationId))
            .Returns(expectedCourseContent);
            A.CallTo(() => courseContentService.GetOrCreateProgressId(CandidateId, customisationId, CentreId)).Returns(10);

            // When
            var result = controller.Index(customisationId);

            // Then
            result.Should()
            .BeRedirectToActionResult()
            .WithControllerName("LearningMenu")
            .WithActionName("Section")
            .WithRouteValue("customisationId", customisationId)
            .WithRouteValue("sectionId", sectionId);
        }
示例#2
0
        public void Initial_menu_should_have_list_of_section_card_view_model()
        {
            // Given
            const string sectionName     = "TestSectionName";
            const bool   hasLearning     = true;
            const double percentComplete = 12.00;
            const int    customisationId = 1;
            const bool   showPercentage  = true;
            const string courseSettings  = "{\"lm.sp\":true}"; // ShowPercentage = true

            var courseContent = CourseContentHelper.CreateDefaultCourseContent(
                customisationId: customisationId,
                courseSettings: courseSettings
                );
            var section = CourseSectionHelper.CreateDefaultCourseSection(
                sectionName: sectionName,
                hasLearning: hasLearning,
                percentComplete: percentComplete
                );

            courseContent.Sections.Add(section);
            var expectedSection     = new SectionCardViewModel(section, customisationId, showPercentage);
            var expectedSectionList = new List <SectionCardViewModel>
            {
                expectedSection
            };

            // When
            var initialMenuViewModel = new InitialMenuViewModel(courseContent);

            // Then
            initialMenuViewModel.Sections.Should().BeEquivalentTo(expectedSectionList);
        }
示例#3
0
        public void Index_should_not_redirect_to_section_page_if_more_than_one_section_in_course()
        {
            // Given
            const int customisationId = 123;
            const int sectionId       = 456;
            var       section1        = CourseContentHelper.CreateDefaultCourseSection(id: sectionId + 1);
            var       section2        = CourseContentHelper.CreateDefaultCourseSection(id: sectionId + 2);
            var       section3        = CourseContentHelper.CreateDefaultCourseSection(id: sectionId + 3);

            var expectedCourseContent = CourseContentHelper.CreateDefaultCourseContent(customisationId);

            expectedCourseContent.Sections.AddRange(new[] { section1, section2, section3 });

            A.CallTo(() => courseContentService.GetCourseContent(CandidateId, customisationId))
            .Returns(expectedCourseContent);
            A.CallTo(() => courseContentService.GetOrCreateProgressId(CandidateId, customisationId, CentreId)).Returns(10);

            // When
            var result = controller.Index(customisationId);

            // Then
            var expectedModel = new InitialMenuViewModel(expectedCourseContent);

            result.Should().BeViewResult()
            .Model.Should().BeEquivalentTo(expectedModel);
        }
示例#4
0
        public void Initial_menu_formats_average_duration(int?averageDuration, string?expectedFormattedTime)
        {
            // Given
            var expectedCourseContent = CourseContentHelper.CreateDefaultCourseContent(averageDuration: averageDuration);

            // When
            var initialMenuViewModel = new InitialMenuViewModel(expectedCourseContent);

            // Then
            initialMenuViewModel.AverageDuration.Should().Be(expectedFormattedTime);
        }
示例#5
0
        public void Initial_menu_banner_text_can_be_null()
        {
            // Given
            var expectedCourseContent = CourseContentHelper.CreateDefaultCourseContent(
                bannerText: null
                );

            // When
            var initialMenuViewModel = new InitialMenuViewModel(expectedCourseContent);

            // Then
            initialMenuViewModel.BannerText.Should().BeNullOrEmpty();
        }
示例#6
0
        public void Initial_menu_can_have_banner_text()
        {
            // Given
            const string bannerText            = "BannerText";
            var          expectedCourseContent = CourseContentHelper.CreateDefaultCourseContent(
                bannerText: bannerText
                );

            // When
            var initialMenuViewModel = new InitialMenuViewModel(expectedCourseContent);

            // Then
            initialMenuViewModel.BannerText.Should().Be(bannerText);
        }
示例#7
0
        public void Initial_menu_should_have_id()
        {
            // Given
            const int customisationId       = 12;
            var       expectedCourseContent = CourseContentHelper.CreateDefaultCourseContent(
                customisationId: customisationId
                );

            // When
            var initialMenuViewModel = new InitialMenuViewModel(expectedCourseContent);

            // Then
            initialMenuViewModel.Id.Should().Be(customisationId);
        }
示例#8
0
        public void Initial_menu_should_not_show_completion_summary_when_include_certification_is_false()
        {
            // Given
            const bool includeCertification  = false;
            var        expectedCourseContent = CourseContentHelper.CreateDefaultCourseContent(
                includeCertification: includeCertification
                );

            // When
            var initialMenuViewModel = new InitialMenuViewModel(expectedCourseContent);

            // Then
            initialMenuViewModel.ShouldShowCompletionSummary.Should().Be(includeCertification);
        }
示例#9
0
        public void Initial_menu_should_have_false_show_time_if_setting_is_false()
        {
            // Given
            const string courseSettings        = "{\"lm.st\":false}"; // ShowTime = false
            var          expectedCourseContent = CourseContentHelper.CreateDefaultCourseContent(
                courseSettings: courseSettings
                );

            // When
            var initialMenuViewModel = new InitialMenuViewModel(expectedCourseContent);

            // Then
            initialMenuViewModel.ShowTime.Should().BeFalse();
        }
示例#10
0
        public void Initial_menu_should_have_centre_name()
        {
            // Given
            const string centreName            = "CentreName";
            var          expectedCourseContent = CourseContentHelper.CreateDefaultCourseContent(
                centreName: centreName
                );

            // When
            var initialMenuViewModel = new InitialMenuViewModel(expectedCourseContent);

            // Then
            initialMenuViewModel.CentreName.Should().Be(centreName);
        }
示例#11
0
        public void Index_unable_to_enrol_should_not_StartOrUpdate_course_sessions()
        {
            // Given
            var defaultCourseContent = CourseContentHelper.CreateDefaultCourseContent(CustomisationId);

            A.CallTo(() => courseContentService.GetCourseContent(CandidateId, CustomisationId)).Returns(defaultCourseContent);
            A.CallTo(() => courseContentService.GetOrCreateProgressId(CandidateId, CustomisationId, CentreId)).Returns(null);

            // When
            controller.Index(CustomisationId);

            // Then
            A.CallTo(() => sessionService.StartOrUpdateDelegateSession(A <int> ._, A <int> ._, A <ISession> ._)).MustNotHaveHappened();
        }
示例#12
0
        public void Initial_menu_should_have_name()
        {
            // Given
            const string customisationName     = "Custom";
            const string applicationName       = "My course";
            var          expectedCourseContent = CourseContentHelper.CreateDefaultCourseContent(
                customisationName: customisationName,
                applicationName: applicationName
                );

            // When
            var initialMenuViewModel = new InitialMenuViewModel(expectedCourseContent);

            // Then
            initialMenuViewModel.Title.Should().Be($"{applicationName} - {customisationName}");
        }
示例#13
0
        public void Index_valid_customisation_id_should_update_login_and_duration()
        {
            // Given
            const int progressId           = 13;
            var       defaultCourseContent = CourseContentHelper.CreateDefaultCourseContent(CustomisationId);

            A.CallTo(() => courseContentService.GetCourseContent(CandidateId, CustomisationId))
            .Returns(defaultCourseContent);
            A.CallTo(() => courseContentService.GetOrCreateProgressId(CandidateId, CustomisationId, CentreId)).Returns(progressId);

            // When
            controller.Index(CustomisationId);

            // Then
            A.CallTo(() => courseContentService.UpdateProgress(progressId)).MustHaveHappened();
        }
示例#14
0
        public void Index_should_render_view()
        {
            // Given
            var expectedCourseContent = CourseContentHelper.CreateDefaultCourseContent(CustomisationId);

            A.CallTo(() => courseContentService.GetCourseContent(CandidateId, CustomisationId))
            .Returns(expectedCourseContent);
            A.CallTo(() => courseContentService.GetOrCreateProgressId(CandidateId, CustomisationId, CentreId)).Returns(10);

            // When
            var result = controller.Index(CustomisationId);

            // Then
            var expectedModel = new InitialMenuViewModel(expectedCourseContent);

            result.Should().BeViewResult()
            .Model.Should().BeEquivalentTo(expectedModel);
        }
示例#15
0
        public void Index_valid_customisationId_should_StartOrUpdate_course_sessions()
        {
            // Given
            var defaultCourseContent = CourseContentHelper.CreateDefaultCourseContent(CustomisationId);

            A.CallTo(() => courseContentService.GetCourseContent(CandidateId, CustomisationId))
            .Returns(defaultCourseContent);
            A.CallTo(() => courseContentService.GetOrCreateProgressId(CandidateId, CustomisationId, CentreId)).Returns(1);

            // When
            controller.Index(CustomisationId);

            // Then
            A.CallTo(() => sessionService.StartOrUpdateDelegateSession(CandidateId, CustomisationId, httpContextSession)).MustHaveHappenedOnceExactly();
            A.CallTo(() => sessionService.StartOrUpdateDelegateSession(A <int> ._, A <int> ._, A <ISession> ._))
            .WhenArgumentsMatch((int candidateId, int customisationId, ISession session) =>
                                candidateId != CandidateId || customisationId != CustomisationId)
            .MustNotHaveHappened();
        }
示例#16
0
        public void Index_should_return_404_if_unable_to_enrol()
        {
            // Given
            var defaultCourseContent = CourseContentHelper.CreateDefaultCourseContent(CustomisationId);

            A.CallTo(() => courseContentService.GetCourseContent(CandidateId, CustomisationId))
            .Returns(defaultCourseContent);
            A.CallTo(() => courseContentService.GetOrCreateProgressId(CandidateId, CustomisationId, CentreId))
            .Returns(null);

            // When
            var result = controller.Index(CustomisationId);

            // Then
            result.Should()
            .BeRedirectToActionResult()
            .WithControllerName("LearningSolutions")
            .WithActionName("StatusCode")
            .WithRouteValue("code", 404);
        }
示例#17
0
        public void Initial_menu_should_have_completion_summary_card_view_model(
            int customisationId,
            string?completed,
            int maxPostLearningAssessmentAttempts,
            bool isAssessed,
            int postLearningAssessmentPassThreshold,
            int diagnosticAssessmentCompletionThreshold,
            int tutorialsCompletionThreshold
            )
        {
            // Given
            var completedDateTime = completed != null?DateTime.Parse(completed) : (DateTime?)null;

            var courseContent = CourseContentHelper.CreateDefaultCourseContent(
                customisationId: customisationId,
                completed: completedDateTime,
                maxPostLearningAssessmentAttempts: maxPostLearningAssessmentAttempts,
                isAssessed: isAssessed,
                postLearningAssessmentPassThreshold: postLearningAssessmentPassThreshold,
                diagnosticAssessmentCompletionThreshold: diagnosticAssessmentCompletionThreshold,
                tutorialsCompletionThreshold: tutorialsCompletionThreshold
                );

            var expectedCompletionSummaryViewModel = new CompletionSummaryCardViewModel(
                customisationId,
                completedDateTime,
                maxPostLearningAssessmentAttempts,
                isAssessed,
                postLearningAssessmentPassThreshold,
                diagnosticAssessmentCompletionThreshold,
                tutorialsCompletionThreshold
                );

            // When
            var initialMenuViewModel = new InitialMenuViewModel(courseContent);

            // Then
            initialMenuViewModel.CompletionSummaryCardViewModel
            .Should().BeEquivalentTo(expectedCompletionSummaryViewModel);
        }