public void should_fail_validation_when_dates_are_same_as_original_hearing()
        {
            var originalHearing = new VideoHearingBuilder().Build();
            var request         = new CloneHearingRequest
            {
                Dates = new List <DateTime>
                {
                    originalHearing.ScheduledDateTime
                }
            };

            var validator = new CloneHearingRequestValidation(originalHearing);
            var result    = validator.ValidateDates(request);

            result.IsValid.Should().BeFalse();
            result.Errors.Count.Should().Be(1);
            result.Errors.Any(x => x.ErrorMessage == CloneHearingRequestValidation.InvalidDateRangeErrorMessage)
            .Should().BeTrue();
        }
        public void should_fail_validation_when_list_contains_duplicate_dates()
        {
            var originalHearing = new VideoHearingBuilder().Build();
            var date            = originalHearing.ScheduledDateTime.GetNextWorkingDay();
            var request         = new CloneHearingRequest
            {
                Dates = new List <DateTime>
                {
                    date, date
                }
            };

            var validator = new CloneHearingRequestValidation(originalHearing);
            var result    = validator.ValidateDates(request);

            result.IsValid.Should().BeFalse();
            result.Errors.Count.Should().Be(1);
            result.Errors.Any(x => x.ErrorMessage == CloneHearingRequestValidation.DuplicateDateErrorMessage)
            .Should().BeTrue();
        }
Exemplo n.º 3
0
        public async Task <IActionResult> CloneHearing([FromRoute] Guid hearingId,
                                                       [FromBody] CloneHearingRequest request)
        {
            var getHearingByIdQuery = new GetHearingByIdQuery(hearingId);
            var videoHearing        = await _queryHandler.Handle <GetHearingByIdQuery, VideoHearing>(getHearingByIdQuery);

            if (videoHearing == null)
            {
                return(NotFound());
            }

            var validationResult =
                new CloneHearingRequestValidation(videoHearing)
                .ValidateDates(request);

            if (!validationResult.IsValid)
            {
                ModelState.AddFluentValidationErrors(validationResult.Errors);
                return(BadRequest(ModelState));
            }

            var orderedDates = request.Dates.OrderBy(x => x).ToList();
            var totalDays    = orderedDates.Count + 1; // include original hearing
            var commands     = orderedDates.Select((newDate, index) =>
            {
                var hearingDay = index + 2; // zero index including original hearing
                return(CloneHearingToCommandMapper.CloneToCommand(videoHearing, newDate, _randomGenerator,
                                                                  _kinlyConfiguration.SipAddressStem, totalDays, hearingDay));
            }).ToList();

            foreach (var command in commands)
            {
                // dbcontext is not thread safe. loop one at a time
                await _commandHandler.Handle(command);
            }

            var existingCase = videoHearing.GetCases().First();
            await _hearingService.UpdateHearingCaseName(hearingId, $"{existingCase.Name} Day {1} of {totalDays}");

            return(NoContent());
        }
        public void should_pass_validation_when_dates_are_ahead_of_original_hearing()
        {
            var originalHearing = new VideoHearingBuilder().Build();
            var date1           = originalHearing.ScheduledDateTime.GetNextWorkingDay();
            var date2           = date1.GetNextWorkingDay();
            var date3           = date2.GetNextWorkingDay();
            var dates           = new List <DateTime>
            {
                date1,
                date2,
                date3
            };
            var request = new CloneHearingRequest {
                Dates = dates
            };

            var validator = new CloneHearingRequestValidation(originalHearing);
            var result    = validator.ValidateDates(request);

            result.IsValid.Should().BeTrue();
        }