public EditAdminFieldViewModel(CourseAdminField courseAdminField)
 {
     PromptNumber  = courseAdminField.PromptNumber;
     Prompt        = courseAdminField.PromptText;
     OptionsString = NewlineSeparatedStringListHelper.JoinNewlineSeparatedList(courseAdminField.Options);
     IncludeAnswersTableCaption = true;
 }
        public void CourseAdminField_constructor_populates_options_with_single_entry()
        {
            // When
            var result = new CourseAdminField(1, "Test", "Option");

            // Then
            using (new AssertionScope())
            {
                result.Options.Should().NotBeNull();
                result.Options.Count.Should().Be(1);
            }
        }
        EditDelegateCourseAdminField_GET_returns_not_found_if_no_course_admin_field_corresponds_to_prompt_number()
        {
            // Given
            const int    validPromptNumber   = 1;
            const int    invalidPromptNumber = 2;
            const string promptText          = "Prompt text";
            const string options             = "Answer";

            var courseAdminFieldWithAnswer = new CourseAdminFieldWithAnswer(
                validPromptNumber,
                promptText,
                options,
                options
                );
            var delegateCourseInfo = new DelegateCourseInfo
            {
                CourseAdminFields = new List <CourseAdminFieldWithAnswer> {
                    courseAdminFieldWithAnswer
                }
            };
            var delegateCourseDetails = new DetailedCourseProgress(
                new Progress(),
                new List <DetailedSectionProgress>(),
                delegateCourseInfo
                );

            var courseAdminField           = new CourseAdminField(validPromptNumber, promptText, options);
            var courseAdminFieldsForCourse = new CourseAdminFields(
                CustomisationId,
                new List <CourseAdminField> {
                courseAdminField
            }
                );

            A.CallTo(() => progressService.GetDetailedCourseProgress(ProgressId))
            .Returns(delegateCourseDetails);
            A.CallTo(() => courseAdminFieldsService.GetCourseAdminFieldsForCourse(CustomisationId))
            .Returns(courseAdminFieldsForCourse);

            // When
            var result = delegateProgressController.EditDelegateCourseAdminField(
                invalidPromptNumber,
                ProgressId,
                DelegateAccessRoute.CourseDelegates
                );

            // Then
            result.Should().BeNotFoundResult();
        }
        public void CourseAdminField_constructor_populates_options_with_extra_newline_separated_entries()
        {
            // Given
            var options = "Option1\r\nOption2\r\n\r\nOption3\r\n\r\n\r\n\r\nOption4";

            // When
            var result = new CourseAdminField(1, "Test", options);

            // Then
            using (new AssertionScope())
            {
                result.Options.Should().NotBeNull();
                result.Options.Count.Should().Be(4);
            }
        }
        private static IEnumerable <ResponseCount> GetResponseCountsForPrompt(
            CourseAdminField courseAdminField,
            IReadOnlyCollection <DelegateCourseAdminFieldAnswers> allAnswers
            )
        {
            const string blank    = "blank";
            const string notBlank = "not blank";

            var responseCounts = new List <ResponseCount>();

            if (courseAdminField.Options.Any())
            {
                responseCounts.AddRange(
                    courseAdminField.Options.Select(
                        x => new ResponseCount(
                            x,
                            allAnswers.Count(a => a.AdminFieldAnswers[courseAdminField.PromptNumber - 1] == x)
                            )
                        )
                    );
            }
            else
            {
                responseCounts.Add(
                    new ResponseCount(
                        notBlank,
                        allAnswers.Count(
                            a => !string.IsNullOrEmpty(a.AdminFieldAnswers[courseAdminField.PromptNumber - 1])
                            )
                        )
                    );
            }

            responseCounts.Add(
                new ResponseCount(
                    blank,
                    allAnswers.Count(
                        a => string.IsNullOrEmpty(a.AdminFieldAnswers[courseAdminField.PromptNumber - 1])
                        )
                    )
                );

            return(responseCounts);
        }