public void AddAdminField_adds_model_error_if_field_name_is_already_in_use()
        {
            // Given
            var model           = new AddAdminFieldViewModel(1, "test");
            var initialTempData = new AddAdminFieldTempData
            {
                AdminFieldId = model.AdminFieldId, OptionsString = model.OptionsString
            };

            A.CallTo(
                () => multiPageFormService.GetMultiPageFormData <AddAdminFieldTempData>(
                    MultiPageFormDataFeature.AddAdminField,
                    controller.TempData
                    )
                ).Returns(initialTempData);
            const string action = "save";

            A.CallTo(() => courseAdminFieldsDataService.GetCourseFieldPromptIdsForCustomisation(A <int> ._))
            .Returns(new[] { 1, 0, 0 });

            // When
            var result = controller.AddAdminField(100, model, action);

            // Then
            using (new AssertionScope())
            {
                result.As <ViewResult>().Model.Should().BeOfType <AddAdminFieldViewModel>();
                AssertModelStateErrorIsExpected(result, "That field name already exists for this course");
            }
        }
        public void AddAdminField_adds_model_error_if_trimmed_case_insensitive_answer_is_already_in_options_list()
        {
            // Given
            var model           = new AddAdminFieldViewModel(1, "test", "  tEsT  ");
            var initialTempData = new AddAdminFieldTempData
            {
                AdminFieldId = model.AdminFieldId, OptionsString = model.OptionsString
            };

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

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

            // Then
            using (new AssertionScope())
            {
                result.As <ViewResult>().Model.Should().BeOfType <AddAdminFieldViewModel>();
                AssertModelStateErrorIsExpected(result, "That response is already in the list of options");
            }
        }
        public void AddAdminField_removes_answer_without_admin_field_selected()
        {
            var          model           = new AddAdminFieldViewModel(null, "Test\r\nAnswer");
            const string action          = "delete0";
            var          initialTempData = new AddAdminFieldTempData
            {
                AdminFieldId = model.AdminFieldId, OptionsString = model.OptionsString
            };

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

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

            // Then
            using (new AssertionScope())
            {
                result.As <ViewResult>().Model.Should().BeOfType <AddAdminFieldViewModel>();
                AssertNumberOfConfiguredAnswersOnView(result, 1);
            }
        }
        public void AddAdminFieldAnswersBulk_updates_temp_data_and_redirects_to_add()
        {
            // Given
            var inputViewModel      = new AddBulkAdminFieldAnswersViewModel("Test\r\nAnswer", 1);
            var initialAddViewModel = new AddAdminFieldViewModel(1, "Test");
            var expectedData        = new AddAdminFieldTempData {
                AdminFieldId = 1, OptionsString = "Test\r\nAnswer"
            };
            var initialTempData = new AddAdminFieldTempData
            {
                AdminFieldId = initialAddViewModel.AdminFieldId, OptionsString = initialAddViewModel.OptionsString
            };

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

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

            // Then
            using (new AssertionScope())
            {
                AssertAddAdminFieldMultiPageFormDataIsUpdatedCorrectly(expectedData);
                result.Should().BeRedirectToActionResult().WithActionName("AddAdminField");
            }
        }
        public void AddAdminField_bulk_redirects_without_admin_field_selected()
        {
            // Given
            var          model           = new AddAdminFieldViewModel(null, "Options");
            const string action          = "bulk";
            var          initialTempData = new AddAdminFieldTempData
            {
                AdminFieldId = model.AdminFieldId, OptionsString = model.OptionsString
            };

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

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

            // Then
            using (new AssertionScope())
            {
                AssertAddAdminFieldMultiPageFormDataIsUpdatedCorrectly(initialTempData);
                result.Should().BeRedirectToActionResult().WithActionName("AddAdminFieldAnswersBulk");
            }
        }
        public void AddAdminField_adds_answer_without_admin_field_selected()
        {
            var initialViewModel = new AddAdminFieldViewModel(null, null, "Answer");
            var initialTempData  = new AddAdminFieldTempData
            {
                AdminFieldId  = initialViewModel.AdminFieldId,
                OptionsString = initialViewModel.OptionsString,
                Answer        = initialViewModel.Answer,
                IncludeAnswersTableCaption = initialViewModel.IncludeAnswersTableCaption,
            };

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

            const string action = "addPrompt";

            // When
            controller.AddAdminField(1, initialViewModel, action);

            // Then
            AssertAddAdminFieldMultiPageFormDataIsUpdatedCorrectly(initialTempData);
        }
        public void AddAdminField_adds_model_error_if_new_answer_surpasses_character_limit(
            string optionsString,
            string newAnswerInput,
            string expectedErrorMessage
            )
        {
            // Given
            var initialViewModel = new AddAdminFieldViewModel(1, optionsString, newAnswerInput);
            var initialTempData  = new AddAdminFieldTempData
            {
                AdminFieldId = initialViewModel.AdminFieldId, OptionsString = initialViewModel.OptionsString
            };

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

            // When
            var result =
                controller.AddAdminField(1, initialViewModel, action);

            // Then
            using (new AssertionScope())
            {
                result.As <ViewResult>().Model.Should().BeOfType <AddAdminFieldViewModel>();
                AssertModelStateErrorIsExpected(result, expectedErrorMessage);
            }
        }
        public void AddAdminField_calls_service_and_redirects_to_error_on_failure()
        {
            // Given
            var          model           = new AddAdminFieldViewModel(1, "Test");
            const string action          = "save";
            var          initialTempData = new AddAdminFieldTempData
            {
                AdminFieldId = model.AdminFieldId, OptionsString = model.OptionsString
            };

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

            A.CallTo(
                () => courseAdminFieldsService.AddAdminFieldToCourse(
                    100,
                    1,
                    "Test"
                    )
                ).Returns(false);

            // When
            var result = controller.AddAdminField(100, model, action);

            // Then
            using (new AssertionScope())
            {
                result.Should().BeStatusCodeResult().WithStatusCode(500);
            }
        }
        public void AddAdminField_save_redirects_successfully_without_answers_configured()
        {
            // Given
            var          model           = new AddAdminFieldViewModel(1, null);
            const string action          = "save";
            var          initialTempData = new AddAdminFieldTempData
            {
                AdminFieldId = model.AdminFieldId, OptionsString = model.OptionsString
            };

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

            A.CallTo(
                () => courseAdminFieldsService.AddAdminFieldToCourse(
                    100,
                    1,
                    null
                    )
                ).Returns(true);

            // When
            var result = controller.AddAdminField(100, model, action);

            // Then
            result.Should().BeRedirectToActionResult().WithActionName("Index");
        }
Esempio n. 10
0
 public AddAdminFieldViewModel(AddAdminFieldTempData tempData) : base(
         tempData.OptionsString,
         tempData.Answer,
         tempData.IncludeAnswersTableCaption
         )
 {
     AdminFieldId = tempData.AdminFieldId;
 }
 private void AssertAddAdminFieldMultiPageFormDataIsUpdatedCorrectly(
     AddAdminFieldTempData expectedTempData
     )
 {
     A.CallTo(
         () => multiPageFormService.SetMultiPageFormData(
             A <AddAdminFieldTempData> .That.Matches(
                 d => d.AdminFieldId == expectedTempData.AdminFieldId &&
                 d.OptionsString == expectedTempData.OptionsString &&
                 d.Answer == expectedTempData.Answer &&
                 d.IncludeAnswersTableCaption ==
                 expectedTempData.IncludeAnswersTableCaption
                 ),
             MultiPageFormDataFeature.AddAdminField,
             controller.TempData
             )
         ).MustHaveHappened();
 }
        public void AddAdminField_add_configures_new_answer_and_updates_temp_data()
        {
            var initialViewModel = new AddAdminFieldViewModel(1, "Test", "Answer");
            var initialTempData  = new AddAdminFieldTempData
            {
                AdminFieldId  = initialViewModel.AdminFieldId,
                OptionsString = initialViewModel.OptionsString,
                Answer        = initialViewModel.Answer,
                IncludeAnswersTableCaption = initialViewModel.IncludeAnswersTableCaption,
            };

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

            var expectedData = new AddAdminFieldTempData
            {
                AdminFieldId  = 1,
                OptionsString = "Test\r\nAnswer",
                Answer        = null,
                IncludeAnswersTableCaption = initialViewModel.IncludeAnswersTableCaption,
            };
            const string action = "addPrompt";

            // When
            var result =
                controller.AddAdminField(1, initialViewModel, action);

            // Then
            using (new AssertionScope())
            {
                AssertAddAdminFieldMultiPageFormDataIsUpdatedCorrectly(expectedData);
                result.As <ViewResult>().Model.Should().BeOfType <AddAdminFieldViewModel>();
                AssertNumberOfConfiguredAnswersOnView(result, 2);
            }
        }
        public void AddAdminField_returns_error_with_unexpected_action()
        {
            // Given
            var          model           = new AddAdminFieldViewModel();
            const string action          = "deletetest";
            var          initialTempData = new AddAdminFieldTempData
            {
                AdminFieldId = model.AdminFieldId, OptionsString = model.OptionsString
            };

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

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

            // Then
            result.Should().BeStatusCodeResult().WithStatusCode(500);
        }
        public void AddAdminField_save_redirects_to_index()
        {
            // Given
            var          model           = new AddAdminFieldViewModel(1, "Test");
            const string action          = "save";
            var          initialTempData = new AddAdminFieldTempData
            {
                AdminFieldId = model.AdminFieldId, OptionsString = model.OptionsString
            };

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

            A.CallTo(
                () => courseAdminFieldsService.AddAdminFieldToCourse(
                    100,
                    1,
                    "Test"
                    )
                ).Returns(true);

            // When
            var result = controller.AddAdminField(100, model, action);

            // Then
            A.CallTo(
                () => multiPageFormService.ClearMultiPageFormData(
                    MultiPageFormDataFeature.AddAdminField,
                    controller.TempData
                    )
                ).MustHaveHappenedOnceExactly();
            result.Should().BeRedirectToActionResult().WithActionName("Index");
        }