2024-03-19 13:53:43 -07:00

331 lines
11 KiB
C#

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<UserService> MOCK_LOGGER = Mock.Of<ILogger<UserService>>();
private static readonly IEnumerable<User> MOCK_USERS = new List<User>() {
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<OOOTemp> MOCK_OOO_TEMPS = new List<OOOTemp>() {
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<IDalService> _mockDalService;
public UserService _userService;
[SetUp]
public void Setup() {
_mockDalService = new Mock<IDalService>();
}
[Test]
public void UserServiceWithNullLoggerShouldThrowException() {
_mockDalService = new Mock<IDalService>();
Assert.Throws<ArgumentNullException>(() => new UserService(null, _mockDalService.Object));
}
[Test]
public void UserServiceWithNullDalServiceShouldThrowException() {
Assert.Throws<ArgumentNullException>(() => new UserService(MOCK_LOGGER, null));
}
[Test]
public async Task GetAllActiveOOOUsersShouldReturnMockUsers() {
_mockDalService.Setup(d => d.QueryAsync<User>(It.IsAny<string>())).Returns(Task.FromResult(MOCK_USERS));
_userService = new UserService(MOCK_LOGGER, _mockDalService.Object);
List<User> users = await _userService.GetAllActiveOOOUsersAsync();
Assert.True(users.Count() == 2);
}
[Test]
public async Task GetAllPendingOOOUsersShouldReturnMockOOOTemps() {
_mockDalService.Setup(d => d.QueryAsync<OOOTemp>(It.IsAny<string>())).Returns(Task.FromResult(MOCK_OOO_TEMPS));
_userService = new UserService(MOCK_LOGGER, _mockDalService.Object);
List<OOOTemp> oooTemps = await _userService.GetAllPendingOOOUsersAsync();
Assert.True(oooTemps.Count() == 2);
}
[Test]
public async Task IsUserAlreadyOOOWithInvalidUserIdShouldThrowException() {
_userService = new UserService(MOCK_LOGGER, _mockDalService.Object);
Assert.ThrowsAsync<ArgumentException>(async Task () => await _userService.IsUserAlreadyOOO(0));
}
[Test]
public async Task IsUserAlreadyOOOWithNoUsersShouldReturnFalse() {
IEnumerable<User> emptyUsers = new List<User>();
_mockDalService.Setup(d => d.QueryAsync<User>(It.IsAny<string>())).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<User> emptyUsers = new List<User>();
_mockDalService.Setup(d => d.QueryAsync<User>(It.IsAny<string>())).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<User> emptyUsers = new List<User>();
_mockDalService.Setup(d => d.QueryAsync<User>(It.IsAny<string>())).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<User> emptyUsers = new List<User>();
_mockDalService.Setup(d => d.QueryAsync<User>(It.IsAny<string>())).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<ArgumentException>(async Task () => await _userService.InsertDelegatedRoles(0));
}
[Test]
public async Task InsertDelegatedRolesWithValidUserIdShouldReturnTrue() {
IEnumerable<UserSubRole> userSubRoles = new List<UserSubRole>() {
new UserSubRole() {
UserSubRoleID = 1,
UserID = 1,
SubRoleID = 1
},
new UserSubRole() {
UserSubRoleID = 2,
UserID = 2,
SubRoleID = 2
}
};
_mockDalService.Setup(d => d.QueryAsync<UserSubRole>(It.IsAny<string>())).Returns(Task.FromResult(userSubRoles));
_mockDalService.Setup(d => d.ExecuteAsync(It.IsAny<string>())).Returns(Task.FromResult(1));
_userService = new UserService(MOCK_LOGGER, _mockDalService.Object);
bool actual = await _userService.InsertDelegatedRoles(2);
Assert.True(actual);
}
[Test]
public async Task UpdateUserSubRolesWithInvalidUserIdShouldThrowException() {
_userService = new UserService(MOCK_LOGGER, _mockDalService.Object);
Assert.ThrowsAsync<ArgumentException>(async Task () => await _userService.UpdateUserSubRoles(0, 2));
}
[Test]
public async Task UpdateUserSubRolesWithInvalidDelegateIdShouldThrowException() {
_userService = new UserService(MOCK_LOGGER, _mockDalService.Object);
Assert.ThrowsAsync<ArgumentException>(async Task () => await _userService.UpdateUserSubRoles(2, 0));
}
[Test]
public async Task UpdateUserSubRolesWithValidUserIdShouldReturnTrue() {
_mockDalService.Setup(d => d.ExecuteAsync(It.IsAny<string>())).Returns(Task.FromResult(1));
_userService = new UserService(MOCK_LOGGER, _mockDalService.Object);
bool actual = await _userService.UpdateUserSubRoles(2, 2);
Assert.True(actual);
}
[Test]
public async Task DelegateApprovalsForUserWithInvalidUserIdShouldThrowException() {
_userService = new UserService(MOCK_LOGGER, _mockDalService.Object);
Assert.ThrowsAsync<ArgumentException>(async Task () => await _userService.DelegateApprovalsForUser(0, 2));
}
[Test]
public async Task DelegateApprovalsForUserWithInvalidDelegateIdShouldThrowException() {
_userService = new UserService(MOCK_LOGGER, _mockDalService.Object);
Assert.ThrowsAsync<ArgumentException>(async Task () => await _userService.DelegateApprovalsForUser(2, 0));
}
[Test]
public async Task DelegateApprovalsForUserWithValidUserIdShouldReturnTrue() {
_mockDalService.Setup(d => d.ExecuteAsync(It.IsAny<string>())).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<ArgumentNullException>(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<string>())).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<string>())).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<ArgumentNullException>(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<string>())).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<string>())).Returns(Task.FromResult(0));
_userService = new UserService(MOCK_LOGGER, _mockDalService.Object);
bool actual = await _userService.SetOOOTempProcessed(oooTemp);
Assert.False(actual);
}
}