public async Task ShouldUpdateValidationInvalid()
        {
            var viewModel = new UpdateSolutionMobileConnectionDetailsViewModel();

            var validationModel = new MaxLengthResult
            {
                MaxLength = { "connection-requirements-description" }
            };

            _mockMediator.Setup(m =>
                                m.Send(
                                    It.Is <UpdateSolutionMobileConnectionDetailsCommand>(q =>
                                                                                         q.SolutionId == SolutionId && q.Details == viewModel),
                                    It.IsAny <CancellationToken>())).ReturnsAsync(validationModel);

            var result = (await _controller.UpdateMobileConnectionDetails(SolutionId, viewModel).ConfigureAwait(false)) as BadRequestObjectResult;

            result.StatusCode.Should().Be((int)HttpStatusCode.BadRequest);
            (result.Value as UpdateFormMaxLengthResult).MaxLength.Should().BeEquivalentTo(validationModel.MaxLength);

            _mockMediator.Verify(
                m => m.Send(
                    It.Is <UpdateSolutionMobileConnectionDetailsCommand>(q =>
                                                                         q.SolutionId == SolutionId && q.Details ==
                                                                         viewModel), It.IsAny <CancellationToken>()), Times.Once);
        }
        public async Task ShouldUpdateValidationInvalid()
        {
            var viewModel = new UpdateSolutionBrowserHardwareRequirementsViewModel();

            var validationResult = new MaxLengthResult()
            {
                MaxLength = { "hardware-requirements-description" }
            };

            _mockMediator.Setup(m => m.Send(
                                    It.Is <UpdateSolutionBrowserHardwareRequirementsCommand>(q =>
                                                                                             q.SolutionId == SolutionId && q.UpdateSolutionHardwareRequirementsViewModel == viewModel),
                                    It.IsAny <CancellationToken>())).ReturnsAsync(validationResult);

            var result = await _hardwareRequirementsController.UpdateHardwareRequirementsAsync(SolutionId, viewModel)
                         .ConfigureAwait(false) as BadRequestObjectResult;

            result.StatusCode.Should().Be((int)HttpStatusCode.BadRequest);
            (result.Value as UpdateFormMaxLengthResult).MaxLength.Should().BeEquivalentTo(new[] { "hardware-requirements-description" });

            _mockMediator.Verify(
                m => m.Send(
                    It.Is <UpdateSolutionBrowserHardwareRequirementsCommand>(q =>
                                                                             q.SolutionId == SolutionId && q.UpdateSolutionHardwareRequirementsViewModel ==
                                                                             viewModel), It.IsAny <CancellationToken>()), Times.Once);
        }
        public void Setup()
        {
            _mockMediator             = new Mock <IMediator>();
            _contactDetailsController = new ContactDetailsController(_mockMediator.Object);
            _mockMediator.Setup(m => m.Send(It.Is <GetContactDetailBySolutionIdQuery>(q => q.Id == SolutionId),
                                            It.IsAny <CancellationToken>()))
            .ReturnsAsync(() => _returnedContacts);

            _mockMediator.Setup(m =>
                                m.Send(It.Is <UpdateSolutionContactDetailsCommand>(q => q.SolutionId == SolutionId),
                                       It.IsAny <CancellationToken>())).ReturnsAsync(() => _validationResult);

            _validationResult = new MaxLengthResult();
            _returnedContacts = new List <IContact>();
        }
        public async Task SubmitForReviewResultFailure()
        {
            _validationResult = new MaxLengthResult {
                MaxLength = { "This update was too cool for school" }
            };
            var expectedResponse = new UpdateFormMaxLengthResult(_validationResult);

            var result = await _contactDetailsController.UpdateContactDetailsAsync(SolutionId, new UpdateSolutionContactDetailsViewModel()).ConfigureAwait(false) as BadRequestObjectResult;

            result.Should().NotBeNull();
            result.StatusCode.Should().Be(400);

            var actual = result.Value as UpdateFormMaxLengthResult;

            actual.Should().NotBeNull();
            actual.Should().BeEquivalentTo(expectedResponse);
        }
        public async Task ShouldUpdateValidationValid()
        {
            var featuresUpdateViewModel = new UpdateSolutionFeaturesViewModel()
            {
                Listing = new List <string>()
                {
                    "test", "test2"
                }
            };

            var validationModel = new MaxLengthResult();

            _mockMediator.Setup(m => m.Send(It.Is <UpdateSolutionFeaturesCommand>(q => q.SolutionId == SolutionId && q.UpdateSolutionFeaturesViewModel == featuresUpdateViewModel), It.IsAny <CancellationToken>())).ReturnsAsync(validationModel);
            var result =
                (await _featuresController.UpdateFeaturesAsync(SolutionId, featuresUpdateViewModel).ConfigureAwait(false)) as NoContentResult;

            result.StatusCode.Should().Be((int)HttpStatusCode.NoContent);
            _mockMediator.Verify(m => m.Send(It.Is <UpdateSolutionFeaturesCommand>(q => q.SolutionId == SolutionId && q.UpdateSolutionFeaturesViewModel == featuresUpdateViewModel), It.IsAny <CancellationToken>()), Times.Once);
        }
        public async Task ShouldUpdateValidationValid()
        {
            var viewModel = new UpdateSolutionBrowserHardwareRequirementsViewModel();

            var validationResult = new MaxLengthResult();

            _mockMediator
            .Setup(m => m.Send(
                       It.Is <UpdateSolutionBrowserHardwareRequirementsCommand>(q =>
                                                                                q.SolutionId == SolutionId && q.UpdateSolutionHardwareRequirementsViewModel == viewModel),
                       It.IsAny <CancellationToken>())).ReturnsAsync(validationResult);

            var result = await _hardwareRequirementsController.UpdateHardwareRequirementsAsync(SolutionId, viewModel)
                         .ConfigureAwait(false) as NoContentResult;

            result?.StatusCode.Should().Be((int)HttpStatusCode.NoContent);
            _mockMediator.Verify(
                m => m.Send(
                    It.Is <UpdateSolutionBrowserHardwareRequirementsCommand>(q =>
                                                                             q.SolutionId == SolutionId && q.UpdateSolutionHardwareRequirementsViewModel ==
                                                                             viewModel), It.IsAny <CancellationToken>()), Times.Once);
        }
        public async Task ShouldUpdateValidationValid()
        {
            var viewModel = new UpdateSolutionMobileConnectionDetailsViewModel();

            var validationModel = new MaxLengthResult();

            _mockMediator
            .Setup(m => m.Send(
                       It.Is <UpdateSolutionMobileConnectionDetailsCommand>(q =>
                                                                            q.SolutionId == SolutionId && q.Details == viewModel), It.IsAny <CancellationToken>()))
            .ReturnsAsync(validationModel);

            var result =
                (await _controller.UpdateMobileConnectionDetails(SolutionId, viewModel)
                 .ConfigureAwait(false)) as NoContentResult;

            result?.StatusCode.Should().Be((int)HttpStatusCode.NoContent);

            _mockMediator.Verify(
                m => m.Send(
                    It.Is <UpdateSolutionMobileConnectionDetailsCommand>(q =>
                                                                         q.SolutionId == SolutionId && q.Details == viewModel), It.IsAny <CancellationToken>()), Times.Once);
        }
        public async Task ShouldUpdateValidationInvalid()
        {
            var featuresUpdateViewModel = new UpdateSolutionFeaturesViewModel()
            {
                Listing = new List <string>()
                {
                    new string('a', 200)
                }
            };

            var validationModel = new MaxLengthResult()
            {
                MaxLength = { "listing-1" }
            };

            _mockMediator.Setup(m => m.Send(It.Is <UpdateSolutionFeaturesCommand>(q => q.SolutionId == SolutionId && q.UpdateSolutionFeaturesViewModel == featuresUpdateViewModel), It.IsAny <CancellationToken>())).ReturnsAsync(validationModel);
            var result =
                (await _featuresController.UpdateFeaturesAsync(SolutionId, featuresUpdateViewModel).ConfigureAwait(false)) as
                BadRequestObjectResult;

            result.StatusCode.Should().Be((int)HttpStatusCode.BadRequest);
            (result.Value as UpdateFormMaxLengthResult).MaxLength.Should().BeEquivalentTo("listing-1");
            _mockMediator.Verify(m => m.Send(It.Is <UpdateSolutionFeaturesCommand>(q => q.SolutionId == SolutionId && q.UpdateSolutionFeaturesViewModel == featuresUpdateViewModel), It.IsAny <CancellationToken>()), Times.Once);
        }
 internal static ActionResult ToActionResult(this MaxLengthResult validationResult) =>
 validationResult.IsValid
         ? (ActionResult) new NoContentResult()
         : new BadRequestObjectResult(new UpdateFormMaxLengthResult(validationResult));
 internal UpdateFormMaxLengthResult(MaxLengthResult validationResult) => MaxLength = validationResult?.MaxLength;