public void UpdateUserDetailsAsync_UserNotFound_ReturnsNotFound()
        {
            var mockDal       = Substitute.For <IUserDal>();
            var mockLogger    = Substitute.For <ILogger <UserAdministrationService> >();
            var mockCryptoSvc = Substitute.For <ICryptographyService>();

            var adminSvc = new UserAdministrationService(mockLogger, mockDal, mockCryptoSvc);

            var result = adminSvc.UpdateUserDetailsAsync(new UserFullDetailsDto()).GetAwaiter().GetResult();

            Assert.That(result, Is.EqualTo(ServiceResultStatusCode.NotFound));
        }
        public void UpdateUserDetailsAsync_UserDetailsNull_ThrowsArgumentNullException()
        {
            var mockDal       = Substitute.For <IUserDal>();
            var mockLogger    = Substitute.For <ILogger <UserAdministrationService> >();
            var mockCryptoSvc = Substitute.For <ICryptographyService>();

            var adminSvc = new UserAdministrationService(mockLogger, mockDal, mockCryptoSvc);

            var e = Assert.Throws <ArgumentNullException>(() => adminSvc.UpdateUserDetailsAsync(null).GetAwaiter().GetResult());

            Assert.That(e.Message, Does.Contain("userDetails"));
        }
        public void UpdateUserDetailsAsync_UpdateSuccess_ReturnsServiceResultStatusCodeSuccess()
        {
            var mockDal       = Substitute.For <IUserDal>();
            var mockLogger    = Substitute.For <ILogger <UserAdministrationService> >();
            var mockCryptoSvc = Substitute.For <ICryptographyService>();

            var adminSvc = new UserAdministrationService(mockLogger, mockDal, mockCryptoSvc);

            var mockJobDescription = new JobDescription()
            {
                Description = "Head Honcho",
                Role        = UserRole.MedicalPractitioner
            };

            var mockEmployeeDetails = new Employee()
            {
                Firstname = "Aoife",
                Lastname  = "McGonagle",
                Title     = Title.Miss,
            };

            var mockUser = new User()
            {
                EmployeeDetails = mockEmployeeDetails,
                Username        = "******",
                JobDescription  = mockJobDescription,
                State           = AccountState.Active
            };

            mockDal.GetEntityAsync(1).Returns(mockUser);
            mockDal.UpdateAsync(Arg.Any <User>()).Returns(mockUser);

            var result = adminSvc.UpdateUserDetailsAsync(new UserFullDetailsDto()
            {
                UserId = 1
            }).GetAwaiter().GetResult();

            Assert.That(result, Is.EqualTo(ServiceResultStatusCode.Success));
        }