public async void UpdateMedicalTeamOfExaminationWithNoUrgencyIndicatorsThenIsUrgentShouldBeFalse()
        {
            // Arrange
            var examination = new MedicalExaminer.Models.Examination
            {
                ChildPriority    = false,
                CoronerPriority  = false,
                CulturalPriority = false,
                FaithPriority    = false,
                OtherPriority    = false,
                CreatedAt        = DateTime.Now.AddDays(-3)
            };
            const string userA = "a";
            var          user  = new MeUser();
            var          userRetrievalByIdService = new Mock <IAsyncQueryHandler <UserRetrievalByIdQuery, MeUser> >();

            userRetrievalByIdService.Setup(x => x.Handle(It.IsAny <UserRetrievalByIdQuery>())).Returns(Task.FromResult(user));

            var connectionSettings = new Mock <IExaminationConnectionSettings>();
            var dbAccess           = new Mock <IDatabaseAccess>();

            dbAccess.Setup(db => db.UpdateItemAsync(connectionSettings.Object, examination))
            .Returns(Task.FromResult(examination));
            var sut = new MedicalTeamUpdateService(dbAccess.Object, connectionSettings.Object, userRetrievalByIdService.Object, _urgencySettingsMock.Object);

            // Act
            var result = await sut.Handle(examination, userA);

            // Assert
            result.IsUrgent().Should().BeFalse();
            result.LastModifiedBy.Should().Be(userA);
        }
        public async void ExaminationFound_ReturnsExaminationId()
        {
            // Arrange
            var examinationId = "1";
            var examination1  = new MedicalExaminer.Models.Examination
            {
                ExaminationId = examinationId
            };

            var connectionSettings = new Mock <IExaminationConnectionSettings>();

            var dbAccess = new Mock <IDatabaseAccess>();
            var user     = new MeUser();
            var userRetrievalByIdService = new Mock <IAsyncQueryHandler <UserRetrievalByIdQuery, MeUser> >();

            userRetrievalByIdService.Setup(x => x.Handle(It.IsAny <UserRetrievalByIdQuery>())).Returns(Task.FromResult(user));

            dbAccess.Setup(db => db.UpdateItemAsync(connectionSettings.Object, examination1))
            .Returns(Task.FromResult(examination1));
            var sut = new MedicalTeamUpdateService(dbAccess.Object, connectionSettings.Object, userRetrievalByIdService.Object, _urgencySettingsMock.Object);

            // Act
            var result = await sut.Handle(examination1, "a");

            // Assert
            Assert.Equal(examinationId, result.ExaminationId);
            Assert.Equal("a", result.LastModifiedBy);
        }
        public async void UpdateMedicalTeamOfExamination_SetsFullName_WhenMeUserIdIsEmpty()
        {
            // Arrange
            const string medicalExaminerUserId        = "";
            const string medicalExaminerOfficerUserId = "";

            var examination = new MedicalExaminer.Models.Examination
            {
                ChildPriority    = true,
                CoronerPriority  = true,
                CulturalPriority = true,
                FaithPriority    = true,
                OtherPriority    = true,
                CreatedAt        = DateTime.Now.AddDays(-3),
                MedicalTeam      = new MedicalExaminer.Models.MedicalTeam
                {
                    MedicalExaminerUserId        = medicalExaminerUserId,
                    MedicalExaminerOfficerUserId = medicalExaminerOfficerUserId
                }
            };

            var userRetrievalByIdService = new Mock <IAsyncQueryHandler <UserRetrievalByIdQuery, MeUser> >(MockBehavior.Strict);
            var connectionSettings       = new Mock <IExaminationConnectionSettings>(MockBehavior.Strict);
            var dbAccess = new Mock <IDatabaseAccess>(MockBehavior.Strict);

            userRetrievalByIdService
            .Setup(x => x.Handle(It.Is <UserRetrievalByIdQuery>(query => query.UserId == medicalExaminerUserId)))
            .Returns(Task.FromResult(new MeUser
            {
                FirstName = null,
                LastName  = null
            }));
            userRetrievalByIdService
            .Setup(x => x.Handle(It.Is <UserRetrievalByIdQuery>(query => query.UserId == medicalExaminerOfficerUserId)))
            .Returns(Task.FromResult(new MeUser
            {
                FirstName = null,
                LastName  = null
            }));

            dbAccess
            .Setup(db => db.UpdateItemAsync(connectionSettings.Object, examination))
            .Returns(Task.FromResult(examination));

            var sut = new MedicalTeamUpdateService(
                dbAccess.Object,
                connectionSettings.Object,
                userRetrievalByIdService.Object,
                _urgencySettingsMock.Object);

            // Act
            var result = await sut.Handle(examination, "a");

            // Assert
            result.MedicalTeam.MedicalExaminerFullName.Should().BeNull();
            result.MedicalTeam.MedicalExaminerOfficerFullName.Should().BeNull();
            result.MedicalTeam.MedicalExaminerGmcNumber.Should().BeNull();
            result.MedicalTeam.MedicalExaminerOfficerGmcNumber.Should().BeNull();
        }
        public void ExaminationIdNull_ThrowsException()
        {
            // Arrange
            var connectionSettings = new Mock <IExaminationConnectionSettings>();
            var dbAccess           = new Mock <IDatabaseAccess>();

            dbAccess.Setup(db =>
                           db.GetItemAsync(
                               connectionSettings.Object,
                               It.IsAny <Expression <Func <MedicalExaminer.Models.Examination, bool> > >()))
            .Returns(Task.FromResult <MedicalExaminer.Models.Examination>(null));
            var user = new MeUser();
            var userRetrievalByIdService = new Mock <IAsyncQueryHandler <UserRetrievalByIdQuery, MeUser> >();

            userRetrievalByIdService.Setup(x => x.Handle(It.IsAny <UserRetrievalByIdQuery>())).Returns(Task.FromResult(user));
            var sut = new MedicalTeamUpdateService(dbAccess.Object, connectionSettings.Object, userRetrievalByIdService.Object, _urgencySettingsMock.Object);

            // Assert
            Action act = () => sut.Handle(null, "a").GetAwaiter().GetResult();

            act.Should().Throw <ArgumentNullException>();
        }