public async void UpdateTreatmentSession_MissingTreatmentSession_ShouldReturnErrorResult() { // Arrange var input = new UpdateTreatmentSessionInput() { ReferenceId = Guid.NewGuid(), TreatmentReferenceId = TreatmentSession.Treatment.ReferenceId, PatientReferenceId = TreatmentSession.Patient.ReferenceId, DentalTeamReferenceId = TreatmentSession.DentalTeam.ReferenceId, Start = TreatmentSession.Start.AddHours(2), End = TreatmentSession.End.AddHours(2), Status = TreatmentSession.Status.ToString() }; // Act var result = await Sut.Send(input, default); // Assert var allValidationMessages = ServiceProvider.GetRequiredService <IStringLocalizer <UpdateTreatmentSessionBusinessValidator> >() .GetAllStrings() .Select(ls => ls.Value); var allUniqueValidationMessages = new HashSet <string>(allValidationMessages); result.Errors .Cast <IValidationError>() .SelectMany(ve => ve.Errors) .Should() .OnlyContain(errMsg => allUniqueValidationMessages.Contains(errMsg)); }
public async Task <IResult <IMessageOutput> > Handle(UpdateTreatmentSessionInput input, CancellationToken cancellationToken) { var validationResult = Validator.Validate(input); if (validationResult.Errors.Count > 0) { return(new Result <IMessageOutput>(validationResult.Errors)); } var treatmentSession = await TreatmentSessionRepository.Where( ts => ts.ReferenceId == input.ReferenceId ) .Include(ts => ts.Treatment) .Include(ts => ts.DentalTeam) .SingleOrDefaultAsync(cancellationToken); if (treatmentSession.Treatment.ReferenceId != input.TreatmentReferenceId) { var treatment = await TreatmentRepository.SingleOrDefaultAsync( t => t.ReferenceId == input.TreatmentReferenceId, cancellationToken ); treatmentSession.TreatmentId = treatment.Id; } if (treatmentSession.DentalTeam.ReferenceId != input.DentalTeamReferenceId) { var dentalTeam = await DentalTeamRepository.SingleOrDefaultAsync( dt => dt.ReferenceId == input.DentalTeamReferenceId, cancellationToken ); treatmentSession.DentalTeamId = dentalTeam.Id; } treatmentSession.Start = input.Start.Value; treatmentSession.End = input.End.Value; treatmentSession.Status = Enum.Parse <TreatmentSessionStatus>(input.Status); await UoW.SaveAsync(cancellationToken); return(new Result <IMessageOutput>( value: new MessageOutput("Treatment Session successfully updated."), type: ResultType.Updated )); }
public async void UpdateTreatmentSession_InvalidInput_ShouldReturnErrorResult() { // Arrange var input = new UpdateTreatmentSessionInput(); // Act var result = await Sut.Send(input, default); // Assert var allValidationMessages = ServiceProvider.GetRequiredService <IStringLocalizer <TreatmentSessionValidator> >() .GetAllStrings() .Union(ServiceProvider.GetRequiredService <IStringLocalizer <PeriodValidator> >().GetAllStrings()) .Union(ServiceProvider.GetRequiredService <IStringLocalizer <ReferenceValidator> >().GetAllStrings()) .Select(ls => ls.Value); var allUniqueValidationMessages = new HashSet <string>(allValidationMessages); result.Errors .Cast <IValidationError>() .SelectMany(ve => ve.Errors) .Should() .OnlyContain(errMsg => allUniqueValidationMessages.Contains(errMsg)); }
public async void UpdateTreatmentSession_ValidInput_ShouldReturnSuccessfullMessage() { // Arrange var input = new UpdateTreatmentSessionInput() { ReferenceId = TreatmentSession.ReferenceId, TreatmentReferenceId = TreatmentSession.Treatment.ReferenceId, PatientReferenceId = TreatmentSession.Patient.ReferenceId, DentalTeamReferenceId = TreatmentSession.DentalTeam.ReferenceId, Start = TreatmentSession.Start.AddHours(1), End = TreatmentSession.End.AddHours(1), Status = TreatmentSession.Status.ToString() }; // Act var result = await Sut.Send(input, default); var messageOutput = result.Value; // Assert messageOutput.Message.Should().BeEquivalentTo("Treatment Session successfully updated."); }
public async void UpdateTreatmentSession_ValidInputViolatingOverlappingBusinessRules_ShouldReturnErrorResult() { // Arrange var input = new UpdateTreatmentSessionInput() { ReferenceId = TreatmentSession.ReferenceId, TreatmentReferenceId = TreatmentSession.Treatment.ReferenceId, PatientReferenceId = TreatmentSession.Patient.ReferenceId, DentalTeamReferenceId = TreatmentSession.DentalTeam.ReferenceId, Start = TreatmentSession.Start.AddHours(1), End = TreatmentSession.End.AddHours(1), Status = TreatmentSession.Status.ToString() }; var overlappingTreatmentSession = CreateTreatmentSession( patientId: Patient.Id, dentalTeamId: DentalTeam.Id, treatmentId: Treatments.First().Id, start: input.Start.Value, end: input.End.Value, status: TreatmentSessionStatus.Requested ); // Act var result = await Sut.Send(input, default); // Assert var allValidationMessages = ServiceProvider.GetRequiredService <IStringLocalizer <TreatmentSessionBusinessValidator> >() .GetAllStrings() .Select(ls => ls.Value); var allUniqueValidationMessages = new HashSet <string>(allValidationMessages); result.Errors .Cast <IValidationError>() .SelectMany(ve => ve.Errors) .Should() .OnlyContain(errMsg => allUniqueValidationMessages.Contains(errMsg)); }
public async Task <IActionResult> PutAsync(UpdateTreatmentSessionInput input, CancellationToken cancellationToken = default) { var result = await Mediator.Value.Send(input, cancellationToken); return(PresentResult(result)); }