public void EditAdminField_adds_model_error_if_trimmed_case_insensitive_answer_is_already_in_options_list()
        {
            // Given
            var model = new EditAdminFieldViewModel(1, "prompt", "test");

            model.Answer = "  tEsT  ";
            var initialTempData = new EditAdminFieldTempData
            {
                PromptNumber = model.PromptNumber, Prompt = model.Prompt, OptionsString = model.OptionsString
            };

            A.CallTo(
                () => multiPageFormService.GetMultiPageFormData <EditAdminFieldTempData>(
                    MultiPageFormDataFeature.EditAdminField,
                    controller.TempData
                    )
                ).Returns(initialTempData);
            const string action = "addPrompt";

            // When
            var result = controller.EditAdminField(1, model, action);

            // Then
            using (new AssertionScope())
            {
                result.As <ViewResult>().Model.Should().BeOfType <EditAdminFieldViewModel>();
                AssertModelStateErrorIsExpected(result, "That response is already in the list of options");
            }
        }
        public IActionResult EditAdminFieldStart(int customisationId, int promptNumber)
        {
            var courseAdminField = courseAdminFieldsService.GetCourseAdminFieldsForCourse(
                customisationId
                ).AdminFields
                                   .Single(cp => cp.PromptNumber == promptNumber);

            var data = new EditAdminFieldTempData
            {
                PromptNumber  = courseAdminField.PromptNumber,
                Prompt        = courseAdminField.PromptText,
                OptionsString = NewlineSeparatedStringListHelper.JoinNewlineSeparatedList(
                    courseAdminField.Options
                    ),
                IncludeAnswersTableCaption = true,
            };

            multiPageFormService.SetMultiPageFormData(
                data,
                MultiPageFormDataFeature.EditAdminField,
                TempData
                );

            return(RedirectToAction("EditAdminField", new { customisationId, promptNumber }));
        }
 public EditAdminFieldViewModel(EditAdminFieldTempData tempData) : base(
         tempData.OptionsString,
         tempData.Answer,
         tempData.IncludeAnswersTableCaption
         )
 {
     Prompt       = tempData.Prompt;
     PromptNumber = tempData.PromptNumber;
 }
        public void EditAdminFieldAnswersBulk_updates_temp_data_and_redirects_to_edit()
        {
            // Given
            var inputViewModel       = new BulkAdminFieldAnswersViewModel("Test\r\nAnswer");
            var initialEditViewModel = new EditAdminFieldViewModel(1, "Test", "Test");
            var initialTempData      = new EditAdminFieldTempData
            {
                PromptNumber  = initialEditViewModel.PromptNumber,
                Prompt        = initialEditViewModel.Prompt,
                OptionsString = initialEditViewModel.OptionsString,
                Answer        = initialEditViewModel.Answer,
                IncludeAnswersTableCaption = initialEditViewModel.IncludeAnswersTableCaption,
            };

            A.CallTo(
                () => multiPageFormService.GetMultiPageFormData <EditAdminFieldTempData>(
                    MultiPageFormDataFeature.EditAdminField,
                    controller.TempData
                    )
                ).Returns(initialTempData);

            A.CallTo(() => courseService.VerifyAdminUserCanManageCourse(A <int> ._, A <int> ._, A <int> ._))
            .Returns(true);

            // When
            var result = controller.EditAdminFieldAnswersBulk(1, inputViewModel);

            // Then
            using (new AssertionScope())
            {
                A.CallTo(
                    () => multiPageFormService.SetMultiPageFormData(
                        A <EditAdminFieldTempData> .That.Matches(
                            d => d.PromptNumber == initialTempData.PromptNumber &&
                            d.Prompt == initialTempData.Prompt &&
                            d.Answer == initialTempData.Answer &&
                            d.IncludeAnswersTableCaption == initialTempData.IncludeAnswersTableCaption &&
                            d.OptionsString == inputViewModel.OptionsString
                            ),
                        MultiPageFormDataFeature.EditAdminField,
                        controller.TempData
                        )
                    ).MustHaveHappenedOnceExactly();
                result.Should().BeRedirectToActionResult().WithActionName("EditAdminField");
            }
        }
 private void AssertEditAdminFieldMultiPageFormDataIsUpdatedCorrectly(
     EditAdminFieldTempData expectedTempData
     )
 {
     A.CallTo(
         () => multiPageFormService.SetMultiPageFormData(
             A <EditAdminFieldTempData> .That.Matches(
                 d => d.PromptNumber == expectedTempData.PromptNumber &&
                 d.Prompt == expectedTempData.Prompt &&
                 d.OptionsString == expectedTempData.OptionsString &&
                 d.Answer == expectedTempData.Answer &&
                 d.IncludeAnswersTableCaption ==
                 expectedTempData.IncludeAnswersTableCaption
                 ),
             MultiPageFormDataFeature.EditAdminField,
             controller.TempData
             )
         ).MustHaveHappened();
 }
        public void PostAdminField_bulk_sets_up_temp_data_and_redirects()
        {
            // Given
            var model        = new EditAdminFieldViewModel(1, "Test", "Options");
            var expectedData = new EditAdminFieldTempData
            {
                PromptNumber  = model.PromptNumber,
                Prompt        = model.Prompt,
                OptionsString = model.OptionsString,
                Answer        = model.Answer,
                IncludeAnswersTableCaption = model.IncludeAnswersTableCaption,
            };
            const string action = "bulk";

            // When
            var result = controller.EditAdminField(1, model, action);

            // Then
            using (new AssertionScope())
            {
                AssertEditAdminFieldMultiPageFormDataIsUpdatedCorrectly(expectedData);
                result.Should().BeRedirectToActionResult().WithActionName("EditAdminFieldAnswersBulk");
            }
        }