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));
        }
コード例 #2
0
        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));
        }
コード例 #6
0
        public async Task <IActionResult> PutAsync(UpdateTreatmentSessionInput input, CancellationToken cancellationToken = default)
        {
            var result = await Mediator.Value.Send(input, cancellationToken);

            return(PresentResult(result));
        }