public void AddRegistrationPromptConfigureAnswers_delete_removes_configured_answer()
        {
            // Given
            var initialPromptData = new AddRegistrationPromptSelectPromptData(1, true, "prompt");

            var initialAnswersData  = new RegistrationPromptAnswersTempData("Test\r\nAnswer");
            var expectedAnswersData = new RegistrationPromptAnswersTempData("Answer");

            const string action = "delete0";

            var initialTempData = new AddRegistrationPromptTempData
            {
                SelectPromptData = initialPromptData, ConfigureAnswersTempData = initialAnswersData
            };

            A.CallTo(
                () => multiPageFormService.GetMultiPageFormData <AddRegistrationPromptTempData>(
                    MultiPageFormDataFeature.AddRegistrationPrompt,
                    registrationPromptsController.TempData
                    )
                ).Returns(initialTempData);
            var inputViewModel = new RegistrationPromptAnswersViewModel("Test\r\nAnswer");

            // When
            var result = registrationPromptsController.AddRegistrationPromptConfigureAnswers(inputViewModel, action);

            // Then
            using (new AssertionScope())
            {
                AssertMultiPageFormDataIsUpdatedCorrectly(initialPromptData, expectedAnswersData);
                result.As <ViewResult>().Model.Should().BeOfType <RegistrationPromptAnswersViewModel>();
            }
        }
        public void RegistrationPromptBulkPost_updates_temp_data_and_redirects_to_configure_answers()
        {
            // Given
            var inputViewModel      = new BulkRegistrationPromptAnswersViewModel("Test\r\nAnswer", true, null);
            var initialPromptData   = new AddRegistrationPromptSelectPromptData(1, true, "prompt");
            var initialAnswersData  = new RegistrationPromptAnswersTempData("Test");
            var expectedAnswersData = new RegistrationPromptAnswersTempData("Test\r\nAnswer");

            var initialTempData = new AddRegistrationPromptTempData
            {
                SelectPromptData         = initialPromptData,
                ConfigureAnswersTempData = initialAnswersData,
            };

            A.CallTo(
                () => multiPageFormService.GetMultiPageFormData <AddRegistrationPromptTempData>(
                    MultiPageFormDataFeature.AddRegistrationPrompt,
                    registrationPromptsController.TempData
                    )
                ).Returns(initialTempData);

            // When
            var result = registrationPromptsController.AddRegistrationPromptBulkPost(inputViewModel);

            // Then
            using (new AssertionScope())
            {
                AssertMultiPageFormDataIsUpdatedCorrectly(initialPromptData, expectedAnswersData);
                result.Should().BeRedirectToActionResult().WithActionName("AddRegistrationPromptConfigureAnswers");
            }
        }
        public void AddRegistrationPromptConfigureAnswers_next_updates_temp_data()
        {
            // Given
            var expectedPromptData = new AddRegistrationPromptSelectPromptData(1, true, "prompt");
            var initialTempData    = new AddRegistrationPromptTempData {
                SelectPromptData = expectedPromptData
            };

            A.CallTo(
                () => multiPageFormService.GetMultiPageFormData <AddRegistrationPromptTempData>(
                    MultiPageFormDataFeature.AddRegistrationPrompt,
                    registrationPromptsController.TempData
                    )
                ).Returns(initialTempData);
            var          expectedAnswerData = new RegistrationPromptAnswersTempData("Test");
            var          inputViewModel     = new RegistrationPromptAnswersViewModel("Test");
            const string action             = "next";

            // When
            var result =
                registrationPromptsController.AddRegistrationPromptConfigureAnswers(inputViewModel, action);

            // Then
            AssertMultiPageFormDataIsUpdatedCorrectly(expectedPromptData, expectedAnswerData);
            result.Should().BeRedirectToActionResult().WithActionName("AddRegistrationPromptSummary");
        }
        public void AddRegistrationPromptSelectPrompt_post_updates_temp_data_and_redirects()
        {
            // Given
            var expectedPromptData = new AddRegistrationPromptSelectPromptData(1, true, "prompt");
            var initialTempData    = new AddRegistrationPromptTempData();

            A.CallTo(
                () => multiPageFormService.GetMultiPageFormData <AddRegistrationPromptTempData>(
                    MultiPageFormDataFeature.AddRegistrationPrompt,
                    registrationPromptsController.TempData
                    )
                ).Returns(initialTempData);
            A.CallTo(() => centreRegistrationPromptsService.GetCentreRegistrationPromptsAlphabeticalList())
            .Returns(new List <(int id, string value)> {
                (1, "prompt")
            });
            var inputViewModel = new AddRegistrationPromptSelectPromptViewModel(1, true);

            // When
            var result = registrationPromptsController.AddRegistrationPromptSelectPrompt(inputViewModel);

            // Then
            AssertMultiPageFormDataIsUpdatedCorrectly(expectedPromptData, new RegistrationPromptAnswersTempData());
            result.Should().BeRedirectToActionResult().WithActionName("AddRegistrationPromptConfigureAnswers");
        }
        public void AddRegistrationPromptSummaryPost_calls_registration_prompt_service_and_redirects_to_index()
        {
            // Given
            var initialPromptData  = new AddRegistrationPromptSelectPromptData(1, true, "prompt");
            var initialAnswersData = new RegistrationPromptAnswersTempData("Test\r\nAnswer");
            var initialTempData    = new AddRegistrationPromptTempData
            {
                SelectPromptData = initialPromptData, ConfigureAnswersTempData = initialAnswersData
            };

            A.CallTo(
                () => multiPageFormService.GetMultiPageFormData <AddRegistrationPromptTempData>(
                    MultiPageFormDataFeature.AddRegistrationPrompt,
                    registrationPromptsController.TempData
                    )
                ).Returns(initialTempData);
            A.CallTo(
                () => centreRegistrationPromptsService.AddCentreRegistrationPrompt(
                    ControllerContextHelper.CentreId,
                    1,
                    true,
                    "Test\r\nAnswer"
                    )
                ).Returns(true);

            // When
            var result = registrationPromptsController.AddRegistrationPromptSummaryPost();

            // Then
            using (new AssertionScope())
            {
                A.CallTo(
                    () => centreRegistrationPromptsService.AddCentreRegistrationPrompt(
                        ControllerContextHelper.CentreId,
                        1,
                        true,
                        "Test\r\nAnswer"
                        )
                    ).MustHaveHappened();
                A.CallTo(
                    () => multiPageFormService.ClearMultiPageFormData(
                        MultiPageFormDataFeature.AddRegistrationPrompt,
                        registrationPromptsController.TempData
                        )
                    ).MustHaveHappenedOnceExactly();
                result.Should().BeRedirectToActionResult().WithActionName("Index");
            }
        }
        AddRegistrationPromptSummaryPost_calls_registration_prompt_service_and_redirects_to_error_on_failure()
        {
            // Given
            var initialPromptData  = new AddRegistrationPromptSelectPromptData(1, true, "prompt");
            var initialAnswersData = new RegistrationPromptAnswersTempData("Test\r\nAnswer");
            var initialTempData    = new AddRegistrationPromptTempData
            {
                SelectPromptData = initialPromptData, ConfigureAnswersTempData = initialAnswersData
            };

            A.CallTo(
                () => multiPageFormService.GetMultiPageFormData <AddRegistrationPromptTempData>(
                    MultiPageFormDataFeature.AddRegistrationPrompt,
                    registrationPromptsController.TempData
                    )
                ).Returns(initialTempData);
            A.CallTo(
                () => centreRegistrationPromptsService.AddCentreRegistrationPrompt(
                    ControllerContextHelper.CentreId,
                    1,
                    true,
                    "Test\r\nAnswer"
                    )
                ).Returns(false);

            // When
            var result = registrationPromptsController.AddRegistrationPromptSummaryPost();

            // Then
            using (new AssertionScope())
            {
                A.CallTo(
                    () => centreRegistrationPromptsService.AddCentreRegistrationPrompt(
                        ControllerContextHelper.CentreId,
                        1,
                        true,
                        "Test\r\nAnswer"
                        )
                    ).MustHaveHappened();
                result.Should().BeStatusCodeResult().WithStatusCode(500);
            }
        }
 private void AssertMultiPageFormDataIsUpdatedCorrectly(
     AddRegistrationPromptSelectPromptData expectedPromptData,
     RegistrationPromptAnswersTempData expectedAnswersTempData
     )
 {
     A.CallTo(
         () => multiPageFormService.SetMultiPageFormData(
             A <AddRegistrationPromptTempData> .That.Matches(
                 d => d.SelectPromptData.Mandatory == expectedPromptData.Mandatory &&
                 d.SelectPromptData.CustomPromptId == expectedPromptData.CustomPromptId &&
                 d.ConfigureAnswersTempData.OptionsString == expectedAnswersTempData.OptionsString &&
                 d.ConfigureAnswersTempData.Answer == expectedAnswersTempData.Answer &&
                 d.ConfigureAnswersTempData.IncludeAnswersTableCaption ==
                 expectedAnswersTempData.IncludeAnswersTableCaption
                 ),
             MultiPageFormDataFeature.AddRegistrationPrompt,
             registrationPromptsController.TempData
             )
         ).MustHaveHappenedOnceExactly();
 }
        AddRegistrationPromptConfigureAnswers_adds_correct_model_error_if_new_answer_surpasses_character_limit(
            string optionsString,
            string newAnswerInput,
            string expectedErrorMessage
            )
        {
            // Given
            var initialSelectPromptData = new AddRegistrationPromptSelectPromptData(1, true, "prompt");

            var initialAnswersData = new RegistrationPromptAnswersTempData(optionsString, newAnswerInput);

            var initialTempData = new AddRegistrationPromptTempData
            {
                SelectPromptData = initialSelectPromptData, ConfigureAnswersTempData = initialAnswersData
            };

            A.CallTo(
                () => multiPageFormService.GetMultiPageFormData <AddRegistrationPromptTempData>(
                    MultiPageFormDataFeature.AddRegistrationPrompt,
                    registrationPromptsController.TempData
                    )
                ).Returns(initialTempData);

            const string action = "addPrompt";
            var          inputAnswersViewModel = new RegistrationPromptAnswersViewModel(optionsString, newAnswerInput);

            // When
            var result =
                registrationPromptsController.AddRegistrationPromptConfigureAnswers(inputAnswersViewModel, action);

            // Then
            using (new AssertionScope())
            {
                result.As <ViewResult>().Model.Should().BeOfType <RegistrationPromptAnswersViewModel>();
                AssertModelStateErrorIsExpected(result, expectedErrorMessage);
            }
        }
 public AddRegistrationPromptTempData()
 {
     SelectPromptData         = new AddRegistrationPromptSelectPromptData();
     ConfigureAnswersTempData = new RegistrationPromptAnswersTempData();
 }
 public AddRegistrationPromptSelectPromptViewModel(AddRegistrationPromptSelectPromptData data)
 {
     CustomPromptId = data.CustomPromptId;
     Mandatory      = data.Mandatory;
 }