using Dapper.Contrib.Extensions; using FabApprovalWorkerService.Models; using FabApprovalWorkerService.Services; using Microsoft.Extensions.Logging; using Moq; namespace FabApprovalWorkerServiceTests; public class UserServiceTests { private static readonly ILogger MOCK_LOGGER = Mock.Of>(); private static readonly IEnumerable MOCK_USERS = new List() { new User() { UserID = 1, LoginID = "fred", FirstName = "fred", LastName = "flintstone", Email = "fred.flintstone@email.com", IsAdmin = true, OOO = true, CanViewITAR = true, IsManager = false }, new User() { UserID = 1, LoginID = "barney", FirstName = "barney", LastName = "rubble", Email = "barney.rubble@email.com", IsAdmin = false, OOO = true, CanViewITAR = true, IsManager = false } }; private static readonly IEnumerable MOCK_OOO_TEMPS = new List() { new OOOTemp() { ID = 1, OOOUserID = 1, OOOExpirationDate = DateTime.Now, OOOStartDate = DateTime.Now, }, new OOOTemp() { ID = 2, OOOUserID = 2, OOOExpirationDate = DateTime.Now, OOOStartDate = DateTime.Now, } }; Mock _mockDalService; public UserService _userService; [SetUp] public void Setup() { _mockDalService = new Mock(); } [Test] public void UserServiceWithNullLoggerShouldThrowException() { _mockDalService = new Mock(); Assert.Throws(() => new UserService(null, _mockDalService.Object)); } [Test] public void UserServiceWithNullDalServiceShouldThrowException() { Assert.Throws(() => new UserService(MOCK_LOGGER, null)); } [Test] public async Task GetAllActiveOOOUsersShouldReturnMockUsers() { //Arrange _mockDalService.Setup(d => d.QueryAsync(It.IsAny())).Returns(Task.FromResult(MOCK_USERS)); _userService = new UserService(MOCK_LOGGER, _mockDalService.Object); //Act List users = await _userService.GetAllExpiredOOOUsersAsync(); //Assert Assert.True(users.Count() == 2); } [Test] public async Task GetAllPendingOOOUsersShouldReturnMockOOOTemps() { _mockDalService.Setup(d => d.QueryAsync(It.IsAny())).Returns(Task.FromResult(MOCK_OOO_TEMPS)); _userService = new UserService(MOCK_LOGGER, _mockDalService.Object); List oooTemps = await _userService.GetAllPendingOOOUsersAsync(); Assert.True(oooTemps.Count() == 2); } [Test] public async Task IsUserAlreadyOOOWithInvalidUserIdShouldThrowException() { _userService = new UserService(MOCK_LOGGER, _mockDalService.Object); Assert.ThrowsAsync(async Task () => await _userService.IsUserAlreadyOOO(0)); } [Test] public async Task IsUserAlreadyOOOWithNoUsersShouldReturnFalse() { IEnumerable emptyUsers = new List(); _mockDalService.Setup(d => d.QueryAsync(It.IsAny())).Returns(Task.FromResult(emptyUsers)); _userService = new UserService(MOCK_LOGGER, _mockDalService.Object); bool actual = await _userService.IsUserAlreadyOOO(2); Assert.False(actual); } [Test] public async Task IsUserAlreadyOOOWithSomeUsersShouldReturnTrue() { IEnumerable emptyUsers = new List(); _mockDalService.Setup(d => d.QueryAsync(It.IsAny())).Returns(Task.FromResult(MOCK_USERS)); _userService = new UserService(MOCK_LOGGER, _mockDalService.Object); bool actual = await _userService.IsUserAlreadyOOO(2); Assert.True(actual); } [Test] public async Task IsDelegatorAlreadyDelegatedToWithInvalidUserIdShouldReturnFalse() { _userService = new UserService(MOCK_LOGGER, _mockDalService.Object); Assert.False(await _userService.IsDelegatorAlreadyDelegatedTo(0)); } [Test] public async Task IsDelegatorAlreadyDelegatedToWithNoUsersShouldReturnFalse() { IEnumerable emptyUsers = new List(); _mockDalService.Setup(d => d.QueryAsync(It.IsAny())).Returns(Task.FromResult(emptyUsers)); _userService = new UserService(MOCK_LOGGER, _mockDalService.Object); bool actual = await _userService.IsDelegatorAlreadyDelegatedTo(2); Assert.False(actual); } [Test] public async Task IsDelegatorAlreadyDelegatedToWithSomeUsersShouldReturnTrue() { IEnumerable emptyUsers = new List(); _mockDalService.Setup(d => d.QueryAsync(It.IsAny())).Returns(Task.FromResult(MOCK_USERS)); _userService = new UserService(MOCK_LOGGER, _mockDalService.Object); bool actual = await _userService.IsDelegatorAlreadyDelegatedTo(2); Assert.True(actual); } [Test] public async Task InsertDelegatedRolesWithInvalidUserIdShouldThrowException() { _userService = new UserService(MOCK_LOGGER, _mockDalService.Object); Assert.ThrowsAsync(async Task () => await _userService.InsertDelegatedRoles(0)); } [Test] public async Task InsertDelegatedRolesWithValidUserIdShouldReturnTrue() { IEnumerable userSubRoles = new List() { new UserSubRole() { UserSubRoleID = 1, UserID = 1, SubRoleID = 1 }, new UserSubRole() { UserSubRoleID = 2, UserID = 2, SubRoleID = 2 } }; _mockDalService.Setup(d => d.QueryAsync(It.IsAny())).Returns(Task.FromResult(userSubRoles)); _mockDalService.Setup(d => d.ExecuteAsync(It.IsAny())).Returns(Task.FromResult(1)); _userService = new UserService(MOCK_LOGGER, _mockDalService.Object); bool actual = await _userService.InsertDelegatedRoles(2); _mockDalService.Verify(d => d.ExecuteAsync(It.IsAny())); Assert.True(actual); } [Test] public async Task UpdateUserSubRolesWithInvalidUserIdShouldThrowException() { _userService = new UserService(MOCK_LOGGER, _mockDalService.Object); Assert.ThrowsAsync(async Task () => await _userService.DelegateUserSubRoles(0, 2)); } [Test] public async Task UpdateUserSubRolesWithInvalidDelegateIdShouldThrowException() { _userService = new UserService(MOCK_LOGGER, _mockDalService.Object); Assert.ThrowsAsync(async Task () => await _userService.DelegateUserSubRoles(2, 0)); } [Test] public async Task UpdateUserSubRolesWithValidUserIdShouldReturnTrue() { _mockDalService.Setup(d => d.ExecuteAsync(It.IsAny())).Returns(Task.FromResult(1)); _userService = new UserService(MOCK_LOGGER, _mockDalService.Object); bool actual = await _userService.DelegateUserSubRoles(2, 2); Assert.True(actual); } [Test] public async Task DelegateApprovalsForUserWithInvalidUserIdShouldThrowException() { _userService = new UserService(MOCK_LOGGER, _mockDalService.Object); Assert.ThrowsAsync(async Task () => await _userService.DelegateApprovalsForUser(0, 2)); } [Test] public async Task DelegateApprovalsForUserWithInvalidDelegateIdShouldThrowException() { _userService = new UserService(MOCK_LOGGER, _mockDalService.Object); Assert.ThrowsAsync(async Task () => await _userService.DelegateApprovalsForUser(2, 0)); } [Test] public async Task DelegateApprovalsForUserWithValidUserIdShouldReturnTrue() { _mockDalService.Setup(d => d.ExecuteAsync(It.IsAny())).Returns(Task.FromResult(1)); _userService = new UserService(MOCK_LOGGER, _mockDalService.Object); bool actual = await _userService.DelegateApprovalsForUser(2, 2); Assert.True(actual); } [Test] public async Task FlagUserAsOOOWithNullOOOTempShouldThrowException() { _userService = new UserService(MOCK_LOGGER, _mockDalService.Object); Assert.ThrowsAsync(async Task () => await _userService.FlagUserAsOOO(null)); } [Test] public async Task FlagUserAsOOOWithValidOOOTempShouldReturnTrue() { OOOTemp oooTemp = new OOOTemp() { ID = 1, OOOUserID = 1, OOOStartDate = DateTime.Now, OOOExpirationDate = DateTime.Now }; _mockDalService.Setup(d => d.ExecuteAsync(It.IsAny())).Returns(Task.FromResult(1)); _userService = new UserService(MOCK_LOGGER, _mockDalService.Object); bool actual = await _userService.FlagUserAsOOO(oooTemp); Assert.True(actual); } [Test] public async Task FlagUserAsOOOWithInvalidUserIdShouldReturnFalse() { OOOTemp oooTemp = new OOOTemp() { ID = 1, OOOUserID = 1, OOOStartDate = DateTime.Now, OOOExpirationDate = DateTime.Now }; _mockDalService.Setup(d => d.ExecuteAsync(It.IsAny())).Returns(Task.FromResult(0)); _userService = new UserService(MOCK_LOGGER, _mockDalService.Object); bool actual = await _userService.FlagUserAsOOO(oooTemp); Assert.False(actual); } [Test] public async Task SetOOOTempProcessedWithNullOOOTempShouldThrowException() { _userService = new UserService(MOCK_LOGGER, _mockDalService.Object); Assert.ThrowsAsync(async Task () => await _userService.SetOOOTempProcessed(null)); } [Test] public async Task SetOOOTempProcessedWithValidOOOTempShouldReturnTrue() { OOOTemp oooTemp = new OOOTemp() { ID = 1, OOOUserID = 1, OOOStartDate = DateTime.Now, OOOExpirationDate = DateTime.Now }; _mockDalService.Setup(d => d.ExecuteAsync(It.IsAny())).Returns(Task.FromResult(1)); _userService = new UserService(MOCK_LOGGER, _mockDalService.Object); bool actual = await _userService.SetOOOTempProcessed(oooTemp); Assert.True(actual); } [Test] public async Task SetOOOTempProcessedWithInvalidIdShouldReturnFalse() { OOOTemp oooTemp = new OOOTemp() { ID = 1, OOOUserID = 1, OOOStartDate = DateTime.Now, OOOExpirationDate = DateTime.Now }; _mockDalService.Setup(d => d.ExecuteAsync(It.IsAny())).Returns(Task.FromResult(0)); _userService = new UserService(MOCK_LOGGER, _mockDalService.Object); bool actual = await _userService.SetOOOTempProcessed(oooTemp); Assert.False(actual); } }