コード例 #1
0
        public void PostMedicalTeam_MedicalteamUpdateServiceErrors_Returns_Expected_Type()
        {
            // Arrange
            SetupAuthorize(AuthorizationResult.Success());
            var examinationId = Guid.NewGuid().ToString();
            var examination   = new Examination
            {
                ExaminationId = examinationId
            };
            const Examination nullExamination = (Examination)null;
            var putMedicalTeamRequest         = new PutMedicalTeamRequest();

            UsersRetrievalByOktaIdServiceMock
            .Setup(service => service.Handle(It.IsAny <UserRetrievalByOktaIdQuery>()))
            .Returns(Task.FromResult(AuthorizedUser));

            _examinationRetrievalServiceMock
            .Setup(service => service.Handle(It.IsAny <ExaminationRetrievalQuery>()))
            .Returns(Task.FromResult(examination));

            _medicalTeamUpdateServiceMock
            .Setup(u => u.Handle(It.IsAny <Examination>(), "a"))
            .Returns(Task.FromResult(nullExamination));

            Controller.ControllerContext = GetControllerContext();

            // Act
            var response = Controller.PutMedicalTeam(examinationId, putMedicalTeamRequest).Result;

            // Assert
            var taskResult = response.Should().BeOfType <ActionResult <PutMedicalTeamResponse> >().Subject;

            taskResult.Result.Should().BeAssignableTo <BadRequestObjectResult>();
        }
コード例 #2
0
        public void PostMedicalTeam_Forbid()
        {
            // Arrange
            SetupAuthorize(AuthorizationResult.Failed());
            var          examinationId = Guid.NewGuid().ToString();
            const string expectedNursingTeamInformation = "expectedNursingTeamInformation";
            var          examination = new Examination
            {
                ExaminationId = examinationId,
            };
            var postMedicalTeamRequest = new PutMedicalTeamRequest()
            {
                NursingTeamInformation = expectedNursingTeamInformation,
            };

            _examinationRetrievalServiceMock.Setup(service => service.Handle(It.IsAny <ExaminationRetrievalQuery>()))
            .Returns(Task.FromResult(examination));
            _medicalTeamUpdateServiceMock.Setup(u => u.Handle(It.IsAny <Examination>(), It.IsAny <string>()))
            .Returns(Task.FromResult(examination));

            Controller.ControllerContext = GetControllerContext();

            // Act
            var response = Controller.PutMedicalTeam(examinationId, postMedicalTeamRequest).Result;

            // Assert
            var taskResult = response.Should().BeOfType <ActionResult <PutMedicalTeamResponse> >().Subject;

            taskResult.Result.Should().BeAssignableTo <ForbidResult>();
        }
コード例 #3
0
        public async void BindModelAsync_ThrowsInvalidOperationException_WhenExaminationRetrievalServiceNotRegistered()
        {
            // Arrange
            var expectedModelBinder   = new Mock <IModelBinder>();
            var expectedParameterName = "expectedParameterName";
            var sut           = new ExaminationValidationModelBinder(expectedModelBinder.Object);
            var context       = new Mock <ModelBindingContext>(MockBehavior.Strict);
            var expectedModel = new PutMedicalTeamRequest();
            var modelMetadata = MockDefaultModelMetadata();

            context
            .Setup(c => c.HttpContext.RequestServices.GetService(
                       typeof(IAsyncQueryHandler <ExaminationRetrievalQuery, MedicalExaminer.Models.Examination>)))
            .Returns(null);

            expectedModelBinder
            .Setup(emb => emb.BindModelAsync(It.IsAny <ModelBindingContext>()))
            .Returns((ModelBindingContext mbc) => Task.CompletedTask);

            context
            .SetupGet(c => c.ModelMetadata)
            .Returns(modelMetadata);
            context
            .Setup(c => c.ValueProvider.GetValue(expectedParameterName))
            .Returns(new ValueProviderResult(new[] { "1" }));

            context.SetupGet(c => c.Result).Returns(ModelBindingResult.Success(expectedModel));

            // Act
            Func <Task> act = async() => await sut.BindModelAsync(context.Object);

            // Assert
            act.Should().Throw <InvalidOperationException>();
        }
コード例 #4
0
        public async void BindModelAsync_SetsExaminationOnContextProvider()
        {
            // Arrange
            var expectedModelBinder   = new Mock <IModelBinder>(MockBehavior.Strict);
            var expectedParameterName = "expectedParameterName";

            var modelMetadata       = MockDefaultModelMetadata();
            var sut                 = new ExaminationValidationModelBinder(expectedModelBinder.Object);
            var context             = new Mock <ModelBindingContext>(MockBehavior.Strict);
            var expectedModel       = new PutMedicalTeamRequest();
            var expectedExamination = new Examination();

            var examinationRetrievalServiceMock =
                new Mock <IAsyncQueryHandler <ExaminationRetrievalQuery, MedicalExaminer.Models.Examination> >(MockBehavior.Strict);

            examinationRetrievalServiceMock
            .Setup(ers => ers.Handle(It.IsAny <ExaminationRetrievalQuery>()))
            .Returns(Task.FromResult(expectedExamination));

            context
            .Setup(c => c.HttpContext.RequestServices.GetService(
                       typeof(IAsyncQueryHandler <ExaminationRetrievalQuery, MedicalExaminer.Models.Examination>)))
            .Returns(examinationRetrievalServiceMock.Object);

            var examinationValidationContextFactory = new ExaminationValidationContextFactory();

            context
            .Setup(c => c.HttpContext.RequestServices.GetService(
                       typeof(ExaminationValidationContextFactory)))
            .Returns(examinationValidationContextFactory);

            var examinationValidationContextProvider = new ExaminationValidationContextProvider();

            context
            .Setup(c => c.HttpContext.RequestServices.GetService(
                       typeof(ExaminationValidationContextProvider)))
            .Returns(examinationValidationContextProvider);

            expectedModelBinder
            .Setup(emb => emb.BindModelAsync(It.IsAny <ModelBindingContext>()))
            .Returns((ModelBindingContext mbc) => Task.CompletedTask);

            context
            .SetupGet(c => c.ModelMetadata)
            .Returns(modelMetadata);

            context
            .Setup(c => c.ValueProvider.GetValue(expectedParameterName))
            .Returns(new ValueProviderResult(new[] { "1" }));

            context.SetupGet(c => c.Result).Returns(ModelBindingResult.Success(expectedModel));

            // Act
            await sut.BindModelAsync(context.Object);

            // Assert
            examinationValidationContextProvider.Current.Examination.Should().Be(expectedExamination);
        }
コード例 #5
0
        public async Task PutMedicalTeam_ShouldReturnBadRequest_WhenModelStateInvalid()
        {
            // Arrange
            var examinationId = "examinationId";
            var request       = new PutMedicalTeamRequest();

            Controller.ControllerContext = GetControllerContext();
            Controller.ModelState.AddModelError("An", "Error");

            // Act
            var response = await Controller.PutMedicalTeam(examinationId, request);

            // Assert
            response.Result.Should().BeAssignableTo <BadRequestObjectResult>();
            var result = (BadRequestObjectResult)response.Result;

            result.Value.Should().BeAssignableTo <PutMedicalTeamResponse>();
            var model = (PutMedicalTeamResponse)result.Value;

            model.Errors.Count.Should().Be(1);
            model.Success.Should().BeFalse();
        }
コード例 #6
0
        public void PostMedicalTeam_Invalid_ExaminationId_Returns_Expected_Result()
        {
            // Arrange
            var examinationId             = Guid.NewGuid().ToString();
            const Examination examination = null;
            var postMedicalTeamRequest    = new PutMedicalTeamRequest();

            _examinationRetrievalServiceMock.Setup(service => service.Handle(It.IsAny <ExaminationRetrievalQuery>()))
            .Returns(Task.FromResult(examination));

            _medicalTeamUpdateServiceMock.Setup(u => u.Handle(It.IsAny <Examination>(), "a"))
            .Returns(Task.FromResult(examination));

            Controller.ControllerContext = GetControllerContext();

            // Act
            var response = Controller.PutMedicalTeam(examinationId, postMedicalTeamRequest).Result;

            // Assert
            var taskResult = response.Should().BeOfType <ActionResult <PutMedicalTeamResponse> >().Subject;

            taskResult.Result.Should().BeAssignableTo <NotFoundResult>();
        }
コード例 #7
0
        public async Task <ActionResult <PutMedicalTeamResponse> > PutMedicalTeam(
            string examinationId,
            [FromBody][ExaminationValidationModelBinderContext("examinationId")] PutMedicalTeamRequest putMedicalTeamRequest)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(new PutMedicalTeamResponse()));
            }

            var medicalTeamRequest = Mapper.Map <MedicalTeam>(putMedicalTeamRequest);
            var myUser             = await CurrentUser();

            var examination = await _examinationRetrievalService.Handle(new ExaminationRetrievalQuery(examinationId, null));

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

            if (!CanAsync(Permission.UpdateExamination, examination))
            {
                return(Forbid());
            }

            examination.MedicalTeam = medicalTeamRequest;

            var returnedExamination = await _medicalTeamUpdateService.Handle(examination, myUser.UserId);

            if (returnedExamination == null)
            {
                return(BadRequest(new PutMedicalTeamResponse()));
            }

            var response = Mapper.Map <PutMedicalTeamResponse>(returnedExamination);

            return(Ok(response));
        }