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(); }
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(); }