Files
monorepo/LCU.API.Operations.IncentiveAPI/LCU.API.Internal.Operations.IncentiveApi.UnitTests/Repository/DepartmentRepositoryTest.cs
T
2026-03-17 09:53:09 -05:00

1155 lines
44 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using LCU.API.Internal.Operations.IncentiveApiLib.Persistence;
using LCU.API.Internal.Operations.IncentiveApiLib.Repositories;
using LCU.Library.Internal.IncentiveApiModels.Common;
using LCU.Library.Internal.IncentiveApiModels.Entities;
using LCU.Library.Internal.IncentiveApiModels.Enums;
using LCU.Library.Internal.IncentiveApiModels.Requests;
using LCU.Library.Internal.IncentiveApiModels.Results;
using Microsoft.EntityFrameworkCore;
using Moq;
using NUnit.Framework;
namespace Application.UnitTests.Repository
{
public class DepartmentRepositoryTest
{
private ApplicationDbContext _context;
private DepartmentRepository _repository;
private Mock<IDateTime> _mockDateTime;
[SetUp]
public void Setup()
{
_mockDateTime = new Mock<IDateTime>();
var mockCurrentUserService = Mock.Of<ICurrentUserService>();
Mock.Get(mockCurrentUserService)
.Setup(s => s.GetCurrentUser())
.Returns(new ApplicationUser()
{
Email = "[email protected]",
});
var options = new DbContextOptionsBuilder<ApplicationDbContext>()
.UseInMemoryDatabase(Guid.NewGuid().ToString())
.EnableSensitiveDataLogging(true)
.Options;
_context = new ApplicationDbContext(options, mockCurrentUserService, _mockDateTime.Object);
_repository = new DepartmentRepository(_context);
}
[Test]
public async Task Basic_Flow_test()
{
var mockDate = new DateTime(2021, 8, 17, 1, 2, 3, 456);
_mockDateTime.SetupGet(mock => mock.Now).Returns(mockDate);
var saved = await _repository.GetAllDepartmentsAsync();
Assert.NotNull(saved);
Assert.IsEmpty(saved);
var newDepartment = new Department
{
DayforceDepartmentName = "Test",
DayForceGlCode = "1",
DnaOrgNbr = "1",
State = DepartmentState.Active,
DepartmentName = "TestDept1",
BusinessLineCode = BusinessLine.Operations.Code,
RegionCode = Region.North.Code
};
var newId = await _repository.SaveDepartmentAsync(newDepartment);
await _context.SaveChangesAsync();
saved = await _repository.GetAllDepartmentsAsync();
Assert.NotNull(saved);
Assert.IsNotEmpty(saved);
var first = saved.First();
Assert.AreEqual(DepartmentState.Active, first.State);
Assert.AreEqual("TestDept1", first.DepartmentName);
Assert.AreEqual(BusinessLine.Operations.Code, first.BusinessLineCode);
Assert.AreEqual(Region.North.Code, first.RegionCode);
// Make sure our Auditable is working.
Assert.True(first.Created.Equals(mockDate));
Assert.AreEqual("[email protected]", first.CreatedBy);
Assert.AreEqual(UserType.Associate, first.CreatedByType);
Assert.True(first.LastUpdated.Equals(mockDate));
Assert.AreEqual("[email protected]", first.LastUpdatedBy);
Assert.AreEqual(UserType.Associate, first.LastUpdatedByType);
}
[Test]
public async Task Find_Or_Create_Existing_Department_Existing()
{
var allDepartments = await _repository.GetAllDepartmentsAsync();
Assert.NotNull(allDepartments);
Assert.IsEmpty(allDepartments);
var department = new Department()
{
DayforceDepartmentName = "Test",
DayForceGlCode = "1",
DnaOrgNbr = "1",
State = DepartmentState.Active,
DepartmentName = "Operations",
BusinessLineCode = BusinessLine.Operations.Code
};
var rawData = new Dictionary<string, string>();
rawData["EmploymentStatus_ShortName"] = "Active";
rawData["Employee_DisplayName"] = "Doe, Test";
rawData["EmployeeEmploymentStatus_EmployeeNumber"] = "11771";
rawData["IdLibrary_LoginName"] = "[email protected]";
rawData["OrgUnit_ShortName"] = "Test1 - OPERATIONS";
rawData["Job_ShortName"] = "TELLER II";
rawData["Employee_HireDate"] = "2019-09-23T00:00:00.0000000";
rawData["OrgUnit_LedgerCode"] = "100";
var employee = new ActiveEmployeeResult(rawData);
var saved = await _repository.SaveDepartmentAsync(department);
Assert.NotNull(saved);
await _context.SaveChangesAsync();
var found = await _repository.FindOrCreateDepartment(employee);
await _context.SaveChangesAsync();
Assert.NotNull(found);
allDepartments = await _repository.GetAllDepartmentsAsync();
Assert.NotNull(allDepartments);
Assert.AreEqual(1, allDepartments.Count);
}
[Test]
public async Task Find_Or_Create_Existing_Department_Create()
{
var allDepartments = await _repository.GetAllDepartmentsAsync();
Assert.NotNull(allDepartments);
Assert.IsEmpty(allDepartments);
var department = new Department()
{
DayforceDepartmentName = "Test",
DayForceGlCode = "1",
DnaOrgNbr = "1",
State = DepartmentState.Active,
DepartmentName = "Big Department",
BusinessLineCode = BusinessLine.Operations.Code
};
var rawData = new Dictionary<string, string>();
rawData["EmploymentStatus_ShortName"] = "Active";
rawData["Employee_DisplayName"] = "Doe, Test";
rawData["EmployeeEmploymentStatus_EmployeeNumber"] = "11771";
rawData["IdLibrary_LoginName"] = "[email protected]";
rawData["OrgUnit_ShortName"] = "HEADQUARTERS - OPERATIONS";
rawData["Job_ShortName"] = "TELLER II";
rawData["Employee_HireDate"] = "2019-09-23T00:00:00.0000000";
rawData["OrgUnit_LedgerCode"] = "101";
var employee = new ActiveEmployeeResult(rawData);
var saved = await _repository.SaveDepartmentAsync(department);
Assert.NotNull(saved);
await _context.SaveChangesAsync();
// This should cause the department to be created.
var found = await _repository.FindOrCreateDepartment(employee);
Assert.AreEqual("101", found.DayForceGlCode);
Assert.AreEqual("1101", found.DnaOrgNbr);
await _context.SaveChangesAsync();
Assert.NotNull(found);
allDepartments = await _repository.GetAllDepartmentsAsync();
Assert.NotNull(allDepartments);
Assert.AreEqual(2, allDepartments.Count);
}
[TestCase("HEADQUARTERS - SECURITY & FRAUD", "SECURITY & FRAUD")]
[TestCase("HEADQUARTERS - OPERATIONS", "OPERATIONS")]
[TestCase("headquarters - operations", "operations")]
[TestCase("GERMANTOWN - BRANCH", "GERMANTOWN")]
[TestCase("GERMANTOWN", "GERMANTOWN")]
[TestCase("NEW BERLIN - MORTGAGE ORIGINATION", "MORTGAGE ORIGINATION")]
[TestCase("WAUKESHA - LIC", "LIC")]
[TestCase(null, null)]
[TestCase(" ", null)]
public void DetermineDepartmentName(string rawName, string expectedResult)
{
Assert.AreEqual(DepartmentRepository.DetermineDepartmentName(rawName), expectedResult);
}
[Test]
public async Task Find_Department_Assignments_Basic()
{
var department = new Department()
{
DayforceDepartmentName = "Test",
DayForceGlCode = "1",
DnaOrgNbr = "1",
State = DepartmentState.Active,
DepartmentName = "TestDept1",
BusinessLineCode = BusinessLine.Operations.Code
};
var department2 = new Department()
{
DayforceDepartmentName = "Test",
DayForceGlCode = "1",
DnaOrgNbr = "1",
State = DepartmentState.Active,
DepartmentName = "TestDept2",
BusinessLineCode = BusinessLine.Operations.Code
};
await _repository.SaveDepartmentAsync(department);
await _repository.SaveDepartmentAsync(department2);
await _context.SaveChangesAsync();
var user1 = new AppUser()
{
Id = Guid.NewGuid(),
Role = Role.Admin,
FullName = "Test",
AdEmail = "[email protected]",
BaseRole = "myrole",
HomeDepartment = "Test Dept",
EmployeeId = "123",
PersonId = 1
};
var user2 = new AppUser()
{
Id = Guid.NewGuid(),
Role = Role.Admin,
FullName = "Test",
AdEmail = "[email protected]",
BaseRole = "myrole",
HomeDepartment = "Test Dept",
EmployeeId = "456",
PersonId = 1
};
var user3 = new AppUser()
{
Id = Guid.NewGuid(),
Role = Role.Admin,
FullName = "Test",
AdEmail = "[email protected]",
BaseRole = "myrole",
HomeDepartment = "Test Dept",
EmployeeId = "789",
PersonId = 1
};
await _context.AppUsers.AddAsync(user1);
await _context.AppUsers.AddAsync(user2);
await _context.AppUsers.AddAsync(user3);
await _context.SaveChangesAsync();
var inThePast = new DateTime(2010, 12, 1);
var recent = new DateTime(2021, 10, 1);
var assignment1 = new UserDepartment()
{
Department = department,
Employee = user1,
Note = "Default!",
IsHome = true,
StartDate = inThePast,
Role = Role.BM
};
var assignment2 = new UserDepartment()
{
Department = department,
Employee = user2,
Note = "Default!",
IsHome = true,
StartDate = inThePast,
Role = Role.BM
};
var assignment3 = new UserDepartment()
{
Department = department2,
Employee = user2,
Note = "Default!",
IsHome = true,
StartDate = inThePast,
Role = Role.BM
};
_context.DepartmentAssignments.Add(assignment1);
_context.DepartmentAssignments.Add(assignment2);
_context.DepartmentAssignments.Add(assignment3);
await _context.SaveChangesAsync();
var query = new DepartmentPersonnelSearchRequest
{
DepartmentId = department.Id.Value,
Year = recent.Year,
Month = recent.Month
};
var found = await _repository.FindDepartmentAssignments(query);
Assert.NotNull(found);
Assert.AreEqual(2, found.Count);
assignment1.Role = Role.MISSING_ROLE;
await _context.SaveChangesAsync();
found = await _repository.FindDepartmentAssignments(query);
Assert.NotNull(found);
Assert.AreEqual(1, found.Count);
}
[Test]
public async Task Find_Department_Assignments_NonMatch_OpenEnded()
{
var department = new Department()
{
DayforceDepartmentName = "Test",
DayForceGlCode = "1",
DnaOrgNbr = "1",
State = DepartmentState.Active,
DepartmentName = "TestDept1",
BusinessLineCode = BusinessLine.Operations.Code
};
await _repository.SaveDepartmentAsync(department);
await _context.SaveChangesAsync();
var user1 = new AppUser()
{
Id = Guid.NewGuid(),
FullName = "Test",
Role = Role.Admin,
AdEmail = "[email protected]",
BaseRole = "myrole",
HomeDepartment = "Test Dept",
EmployeeId = "123",
PersonId = 1
};
var user2 = new AppUser()
{
Id = Guid.NewGuid(),
FullName = "Test",
Role = Role.Admin,
AdEmail = "[email protected]",
BaseRole = "myrole",
HomeDepartment = "Test Dept",
EmployeeId = "456",
PersonId = 1
};
await _context.AppUsers.AddAsync(user1);
await _context.AppUsers.AddAsync(user2);
await _context.SaveChangesAsync();
var inThePast = DateTime.Today.Subtract(TimeSpan.FromDays(3));
var assignment1 = new UserDepartment()
{
Department = department,
Employee = user1,
Note = "Default!",
IsHome = true,
StartDate = inThePast,
Role = Role.BM
};
var assignment2 = new UserDepartment()
{
Department = department,
Employee = user2,
Note = "Default!",
IsHome = true,
StartDate = inThePast,
Role = Role.BM
};
_context.DepartmentAssignments.Add(assignment1);
_context.DepartmentAssignments.Add(assignment2);
await _context.SaveChangesAsync();
var searchRequest = new DepartmentPersonnelSearchRequest
{
DepartmentId = department.Id.Value,
Year = inThePast.Year,
Month = inThePast.Month
};
var found = await _repository.FindDepartmentAssignments(searchRequest);
Assert.NotNull(found);
Assert.AreEqual(2, found.Count);
var searchRequest2 = new DepartmentPersonnelSearchRequest
{
DepartmentId = department.Id.Value,
Year = inThePast.Subtract(TimeSpan.FromDays(400)).Year,
Month = inThePast.Month
};
found = await _repository.FindDepartmentAssignments(searchRequest2);
Assert.NotNull(found);
Assert.AreEqual(0, found.Count);
var searchRequest3 = new DepartmentPersonnelSearchRequest
{
DepartmentId = department.Id.Value,
Year = inThePast.Add(TimeSpan.FromDays(400)).Year,
Month = inThePast.Month
};
found = await _repository.FindDepartmentAssignments(searchRequest3);
Assert.NotNull(found);
Assert.AreEqual(2, found.Count);
}
[Test]
public async Task Find_Department_Assignments_NonMatch_CloseEnded()
{
var department = new Department()
{
DayforceDepartmentName = "Test",
DayForceGlCode = "1",
DnaOrgNbr = "1",
State = DepartmentState.Active,
DepartmentName = "TestDept1",
BusinessLineCode = BusinessLine.Operations.Code
};
await _repository.SaveDepartmentAsync(department);
await _context.SaveChangesAsync();
var user1 = new AppUser()
{
Id = Guid.NewGuid(),
FullName = "Test",
Role = Role.Admin,
AdEmail = "[email protected]",
BaseRole = "myrole",
HomeDepartment = "Test Dept",
EmployeeId = "123",
PersonId = 1
};
var user2 = new AppUser()
{
Id = Guid.NewGuid(),
FullName = "Test",
Role = Role.Admin,
AdEmail = "[email protected]",
BaseRole = "myrole",
HomeDepartment = "Test Dept",
EmployeeId = "456",
PersonId = 1
};
await _context.AppUsers.AddAsync(user1);
await _context.AppUsers.AddAsync(user2);
await _context.SaveChangesAsync();
var inThePast = DateTime.Today.Subtract(TimeSpan.FromDays(30));
var inTheFuture = DateTime.Today.Add(TimeSpan.FromDays(30));
var assignment1 = new UserDepartment()
{
Department = department,
Employee = user1,
Note = "Default!",
IsHome = true,
StartDate = inThePast,
EndDate = inTheFuture,
Role = Role.BM
};
var assignment2 = new UserDepartment()
{
Department = department,
Employee = user2,
Note = "Default!",
IsHome = true,
StartDate = inThePast,
Role = Role.BM
};
_context.DepartmentAssignments.Add(assignment1);
_context.DepartmentAssignments.Add(assignment2);
await _context.SaveChangesAsync();
var searchRequest = new DepartmentPersonnelSearchRequest
{
DepartmentId = department.Id.Value,
Year = inThePast.Year,
Month = inThePast.Month
};
var found = await _repository.FindDepartmentAssignments(searchRequest);
Assert.NotNull(found);
Assert.AreEqual(2, found.Count);
var searchRequest2 = new DepartmentPersonnelSearchRequest
{
DepartmentId = department.Id.Value,
Year = inThePast.Subtract(TimeSpan.FromDays(400)).Year,
Month = inThePast.Month
};
found = await _repository.FindDepartmentAssignments(searchRequest2);
Assert.NotNull(found);
Assert.AreEqual(0, found.Count);
var searchRequest3 = new DepartmentPersonnelSearchRequest
{
DepartmentId = department.Id.Value,
Year = inThePast.Add(TimeSpan.FromDays(400)).Year,
Month = inThePast.Month
};
found = await _repository.FindDepartmentAssignments(searchRequest3);
Assert.NotNull(found);
Assert.AreEqual(1, found.Count);
}
/// <summary>
/// Tests searching for long periods
/// </summary>
/// <param name="assignStart">When the employee department assignment starts</param>
/// <param name="assignEnd">When the employee department assignment ends</param>
/// <param name="searchStart">when the search starts</param>
/// <param name="searchEnd">when the search ends</param>
/// <param name="included">should this assignment be found?</param>
// Test Case 1, Ends before search starts
[TestCase("01/01/2020", "12/31/2020", "01/01/2021", "12/31/2021", false)]
// Test Case 2, Starts before search, ends during
[TestCase("12/01/2020", "01/31/2021", "01/01/2021", "12/31/2021", true)]
// Test Case 3, Starts during, ends during
[TestCase("01/02/2021", "11/30/2021", "01/01/2021", "12/31/2021", true)]
// Test Case 4, Starts during, ends after
[TestCase("01/01/2021", "01/31/2022", "01/01/2021", "12/31/2021", true)]
// Test Case 5, Starts after
[TestCase("01/01/2022", "12/31/2022", "01/01/2021", "12/31/2021", false)]
// Test Case 6, Starts before, no assignment end
[TestCase("01/01/2021", "", "01/01/2021", "12/31/2021", true)]
[TestCase("12/31/2020", "", "01/01/2021", "12/31/2021", true)]
// Test Case 7, Starts during, no assignment end
[TestCase("07/01/2021", "", "01/01/2021", "12/31/2021", true)]
// Test Case 8, starts after, no assignment end, also check "on" which IS included...
[TestCase("12/31/2021", "", "01/01/2021", "12/31/2021", true)]
[TestCase("01/01/2022", "", "01/01/2021", "12/31/2021", false)]
public async Task Find_Department_Assignments_ForMonthRange_Long(
string assignStart,
string assignEnd,
string searchStart,
string searchEnd,
bool included
)
{
var department = new Department()
{
DayforceDepartmentName = "Test",
DayForceGlCode = "1",
DnaOrgNbr = "1",
State = DepartmentState.Active,
DepartmentName = "TestDept1",
BusinessLineCode = BusinessLine.Operations.Code
};
await _repository.SaveDepartmentAsync(department);
await _context.SaveChangesAsync();
var user1 = new AppUser()
{
Id = Guid.NewGuid(),
FullName = "Test",
Role = Role.Admin,
AdEmail = "[email protected]",
BaseRole = "myrole",
HomeDepartment = "Test Dept",
EmployeeId = "123",
PersonId = 1
};
await _context.AppUsers.AddAsync(user1);
await _context.SaveChangesAsync();
var assignment1 = new UserDepartment()
{
Department = department,
Employee = user1,
Note = "Default!",
IsHome = true,
StartDate = DateTime.Parse(assignStart),
Role = Role.BM
};
if (!string.IsNullOrWhiteSpace(assignEnd))
{
assignment1.EndDate = DateTime.Parse(assignEnd);
}
_context.DepartmentAssignments.Add(assignment1);
await _context.SaveChangesAsync();
var start = DateTime.Parse(searchStart);
var end = DateTime.Parse(searchEnd);
var range = new MonthRange(
start.Year,
start.Month,
end.Year,
end.Month
);
var found = await _repository.FindDepartmentAssignmentsForRange(department.Id.Value, range);
Assert.NotNull(found);
if (included)
{
Assert.IsNotEmpty(found);
Assert.AreEqual(1, found.Count);
}
else
{
Assert.IsEmpty(found);
}
}
/// <summary>
/// Tests searching for just single months
/// </summary>
/// <param name="assignStart">When the employee department assignment starts</param>
/// <param name="assignEnd">When the employee department assignment ends</param>
/// <param name="searchStart">when the search starts</param>
/// <param name="searchEnd">when the search ends</param>
/// <param name="included">should this assignment be found?</param>
// Test Case 1, Ends before assignment starts
[TestCase("05/01/2021", "05/31/2021", "06/01/2021", false)]
// Test Case 2, Starts before assignment, ends during
[TestCase("05/01/2021", "06/30/2021", "06/01/2021", true)]
// Test Case 3, Starts during, ends during
[TestCase("06/10/2021", "06/24/2021", "06/01/2021", true)]
// Test Case 4, Starts during, ends after
[TestCase("06/05/2021", "12/31/2021", "06/01/2021", true)]
// Test Case 5, Starts after
[TestCase("07/01/2021", "12/31/2021", "06/01/2021", false)]
// Test Case 6, Starts before, no assignment end
[TestCase("06/01/2021", "", "06/01/2021", true)]
[TestCase("05/15/2021", "", "06/01/2021", true)]
// Test Case 7, Starts during, no assignment end
[TestCase("06/05/2021", "", "06/01/2021", true)]
// Test Case 8, starts after, no assignment end, also check "on" which IS included...
[TestCase("06/30/2021", "", "06/01/2021", true)]
[TestCase("07/01/2021", "", "06/01/2021", false)]
public async Task Find_Department_Assignments_ForMonthRange_Short(string assignStart, string assignEnd, string searchStart, bool included)
{
var department = new Department()
{
DayforceDepartmentName = "Test",
DayForceGlCode = "1",
DnaOrgNbr = "1",
State = DepartmentState.Active,
DepartmentName = "TestDept1",
BusinessLineCode = BusinessLine.Operations.Code
};
await _repository.SaveDepartmentAsync(department);
await _context.SaveChangesAsync();
var user1 = new AppUser()
{
Id = Guid.NewGuid(),
FullName = "Test",
Role = Role.Admin,
AdEmail = "[email protected]",
BaseRole = "myrole",
HomeDepartment = "Test Dept",
EmployeeId = "123",
PersonId = 1
};
await _context.AppUsers.AddAsync(user1);
await _context.SaveChangesAsync();
var assignment1 = new UserDepartment()
{
Department = department,
Employee = user1,
Note = "Default!",
IsHome = true,
StartDate = DateTime.Parse(assignStart),
Role = Role.BM
};
if (!string.IsNullOrWhiteSpace(assignEnd))
{
assignment1.EndDate = DateTime.Parse(assignEnd);
}
_context.DepartmentAssignments.Add(assignment1);
await _context.SaveChangesAsync();
var start = DateTime.Parse(searchStart);
var range = new MonthRange(start.Year, start.Month);
var found = await _repository.FindDepartmentAssignmentsForRange(department.Id.Value, range);
Assert.NotNull(found);
if (included)
{
Assert.IsNotEmpty(found);
Assert.AreEqual(1, found.Count);
}
else
{
Assert.IsEmpty(found);
}
}
public async Task Find_Department_Assignments_ForMonthRange_Multi()
{
var department = new Department()
{
DayforceDepartmentName = "Test",
DayForceGlCode = "1",
DnaOrgNbr = "1",
State = DepartmentState.Active,
DepartmentName = "TestDept1",
BusinessLineCode = BusinessLine.Operations.Code
};
await _repository.SaveDepartmentAsync(department);
await _context.SaveChangesAsync();
var user1 = new AppUser()
{
Id = Guid.NewGuid(),
AdEmail = "[email protected]",
EmployeeId = "123"
};
await _context.AppUsers.AddAsync(user1);
await _context.SaveChangesAsync();
var assignment1 = new UserDepartment()
{
Department = department,
Employee = user1,
Note = "Default!",
IsHome = true,
StartDate = DateTime.Parse("06/02/2021"),
EndDate = DateTime.Parse("06/14/2021"),
Role = Role.BM
};
var assignment2 = new UserDepartment()
{
Department = department,
Employee = user1,
Note = "Default!",
IsHome = true,
StartDate = DateTime.Parse("06/16/2021"),
EndDate = DateTime.Parse("06/30/2021"),
Role = Role.BM
};
_context.DepartmentAssignments.Add(assignment1);
_context.DepartmentAssignments.Add(assignment2);
await _context.SaveChangesAsync();
var start = DateTime.Parse("06/01/2021");
var range = new MonthRange(start.Year, start.Month);
var found = await _repository.FindDepartmentAssignmentsForRange(department.Id.Value, range);
Assert.NotNull(found);
Assert.IsNotEmpty(found);
Assert.AreEqual(1, found.Count);
var search = new DepartmentPersonnelSearchRequest()
{
Month = start.Month,
Year = start.Year,
DepartmentId = department.Id.Value,
IncludeAllPersonnel = true
};
var users = await _repository.FindDepartmentAssignments(search);
Assert.NotNull(users);
Assert.IsNotEmpty(users);
Assert.AreEqual(1, users.Count);
}
[Test]
public async Task Find_Department_Assignments_With_Sales_Goal_Permission()
{
var department = new Department()
{
DayforceDepartmentName = "Test",
DayForceGlCode = "1",
DnaOrgNbr = "1",
State = DepartmentState.Active,
DepartmentName = "TestDept1",
BusinessLineCode = BusinessLine.Operations.Code
};
await _repository.SaveDepartmentAsync(department);
await _context.SaveChangesAsync();
var userWithNoSalesGoalsPermission = new AppUser()
{
Id = Guid.NewGuid(),
FullName = "Test",
Role = Role.Admin,
AdEmail = "[email protected]",
BaseRole = "myrole",
HomeDepartment = "Test Dept",
EmployeeId = "123",
PersonId = 1
};
var userWithSalesGoalsRolePermission = new AppUser()
{
Id = Guid.NewGuid(),
FullName = "Test",
Role = Role.Admin,
AdEmail = "[email protected]",
BaseRole = "myrole",
HomeDepartment = "Test Dept",
EmployeeId = "456",
PersonId = 2
};
var userWithSalesGoalsAdditionalPermission = new AppUser()
{
Id = Guid.NewGuid(),
FullName = "Test",
Role = Role.Admin,
AdEmail = "[email protected]",
BaseRole = "myrole",
HomeDepartment = "Test Dept",
EmployeeId = "789",
PersonId = 3,
AdditionalPermissions = new List<UserPermission>
{
new UserPermission
{
Permission = Permission.HaveSalesGoals
}
}
};
await _context.AppUsers.AddAsync(userWithNoSalesGoalsPermission);
await _context.AppUsers.AddAsync(userWithSalesGoalsRolePermission);
await _context.AppUsers.AddAsync(userWithSalesGoalsAdditionalPermission);
await _context.SaveChangesAsync();
var inThePast = DateTime.Today.Subtract(TimeSpan.FromDays(3));
var assignment1 = new UserDepartment()
{
Department = department,
Employee = userWithNoSalesGoalsPermission,
Note = "Default!",
IsHome = true,
StartDate = inThePast,
Role = Role.Teller
};
var assignment2 = new UserDepartment()
{
Department = department,
Employee = userWithSalesGoalsRolePermission,
Note = "Default!",
IsHome = true,
StartDate = inThePast,
Role = Role.BM
};
var assignment3 = new UserDepartment()
{
Department = department,
Employee = userWithSalesGoalsAdditionalPermission,
Note = "Default!",
IsHome = true,
StartDate = inThePast,
Role = Role.Teller
};
_context.DepartmentAssignments.Add(assignment1);
_context.DepartmentAssignments.Add(assignment2);
_context.DepartmentAssignments.Add(assignment3);
await _context.SaveChangesAsync();
var searchRequest3 = new DepartmentPersonnelSearchRequest
{
DepartmentId = department.Id.Value,
Year = inThePast.Year,
Month = inThePast.Month
};
var found = await _repository.FindDepartmentAssignments(searchRequest3);
Assert.NotNull(found);
Assert.True(found.Exists(x => x.PersonId == 2));
Assert.True(found.Exists(x => x.PersonId == 3));
}
[Test]
public async Task Find_User_Home_Department_OK()
{
var department = new Department()
{
DayforceDepartmentName = "Test",
DayForceGlCode = "1",
DnaOrgNbr = "1",
State = DepartmentState.Active,
DepartmentName = "TestDept1",
BusinessLineCode = BusinessLine.Operations.Code
};
var department2 = new Department()
{
DayforceDepartmentName = "Test",
DayForceGlCode = "1",
DnaOrgNbr = "1",
State = DepartmentState.Active,
DepartmentName = "TestDept2",
BusinessLineCode = BusinessLine.Operations.Code
};
await _repository.SaveDepartmentAsync(department);
await _repository.SaveDepartmentAsync(department2);
await _context.SaveChangesAsync();
var user1 = new AppUser()
{
Id = Guid.NewGuid(),
FullName = "Test",
Role = Role.Admin,
AdEmail = "[email protected]",
BaseRole = "myrole",
HomeDepartment = "Test Dept",
EmployeeId = "123",
PersonId = 1
};
var user2 = new AppUser()
{
Id = Guid.NewGuid(),
FullName = "Test",
Role = Role.Admin,
AdEmail = "[email protected]",
BaseRole = "myrole",
HomeDepartment = "Test Dept",
EmployeeId = "456",
PersonId = 1
};
var user3 = new AppUser()
{
Id = Guid.NewGuid(),
FullName = "Test",
Role = Role.Admin,
AdEmail = "[email protected]",
BaseRole = "myrole",
HomeDepartment = "Test Dept",
EmployeeId = "789",
PersonId = 1
};
var user4 = new AppUser()
{
Id = Guid.NewGuid(),
FullName = "Test",
Role = Role.Admin,
AdEmail = "[email protected]",
BaseRole = "myrole",
HomeDepartment = "Test Dept",
EmployeeId = "101",
PersonId = 1
};
await _context.AppUsers.AddAsync(user1);
await _context.AppUsers.AddAsync(user2);
await _context.AppUsers.AddAsync(user3);
await _context.AppUsers.AddAsync(user4);
await _context.SaveChangesAsync();
var inThePast = DateTime.Today.Subtract(TimeSpan.FromDays(3));
var assignment1 = new UserDepartment()
{
Role = Role.Admin,
Department = department,
Employee = user1,
Note = "Default!",
IsHome = true,
StartDate = inThePast
};
var assignment2 = new UserDepartment()
{
Role = Role.Admin,
Department = department,
Employee = user2,
Note = "Default!",
IsHome = true,
StartDate = inThePast
};
var assignment5 = new UserDepartment()
{
Role = Role.Admin,
Department = department2,
Employee = user2,
Note = "Default!",
IsHome = true,
StartDate = inThePast
};
var assignment3 = new UserDepartment()
{
Role = Role.Admin,
Department = department2,
Employee = user3,
Note = "Default!",
IsHome = true,
StartDate = inThePast
};
var assignment4 = new UserDepartment()
{
Role = Role.Admin,
Department = department,
Employee = user3,
Note = "Default!",
IsHome = false,
StartDate = inThePast
};
var assignment6 = new UserDepartment()
{
Role = Role.Admin,
Department = department,
Employee = user4,
Note = "Default!",
IsHome = true,
StartDate = inThePast,
EndDate = inThePast
};
var assignment7 = new UserDepartment()
{
Role = Role.Admin,
Department = department2,
Employee = user4,
Note = "Default!",
IsHome = true,
StartDate = inThePast,
EndDate = null
};
_context.DepartmentAssignments.Add(assignment1);
_context.DepartmentAssignments.Add(assignment2);
_context.DepartmentAssignments.Add(assignment3);
_context.DepartmentAssignments.Add(assignment4);
_context.DepartmentAssignments.Add(assignment5);
_context.DepartmentAssignments.Add(assignment6);
_context.DepartmentAssignments.Add(assignment7);
await _context.SaveChangesAsync();
//Ok
var res = await _repository.FindUserHomeDepartment(user3);
Assert.AreEqual(res, department2);
res = await _repository.FindUserHomeDepartment(user1);
Assert.AreEqual(res, department);
//Non-existing user
res = await _repository.FindUserHomeDepartment(new AppUser()
{
AdEmail = "[email protected]",
BaseRole = "newrole",
HomeDepartment = "Other Dept",
EmployeeId = "56565",
PersonId = 100
});
Assert.Null(res);
//User with multiple non-current home departments
res = await _repository.FindUserHomeDepartment(user2);
Assert.Null(res);
//User with multiple home departments, one current, one non-current
res = await _repository.FindUserHomeDepartment(user4);
Assert.AreEqual(res, department2);
}
[Test]
public async Task FindDepartmentByBranchName_OK()
{
var department = new Department()
{
DayforceDepartmentName = "Test",
DayForceGlCode = "1",
DnaOrgNbr = "1",
State = DepartmentState.Active,
DepartmentName = "MEQUON",
BusinessLineCode = BusinessLine.Operations.Code
};
var department2 = new Department()
{
DayforceDepartmentName = "Test",
DayForceGlCode = "1",
DnaOrgNbr = "1",
State = DepartmentState.Active,
DepartmentName = "WAUKESHA MAIN",
BusinessLineCode = BusinessLine.Operations.Code
};
await _repository.SaveDepartmentAsync(department);
await _repository.SaveDepartmentAsync(department2);
await _context.SaveChangesAsync();
var res = await _repository.FindDepartmentByBranchName("Mequon");
Assert.AreEqual(department, res);
res = await _repository.FindDepartmentByBranchName("Waukesha main");
Assert.AreEqual(department2, res);
res = await _repository.FindDepartmentByBranchName("Mars base 1");
Assert.Null(res);
}
[Test]
public async Task FindCurrentDepartmentAssignments_OK()
{
var user1 = new AppUser
{
Id = Guid.NewGuid(),
AdEmail = "[email protected]", EmployeeId = "C0001", PersonId = 1, BaseRole = "Role", FullName = "Test", HomeDepartment = "Test",
Role = Role.Admin
};
var user2 = new AppUser
{
Id = Guid.NewGuid(),
AdEmail = "[email protected]", EmployeeId = "C0002", PersonId = 2, BaseRole = "Role", FullName = "Test", HomeDepartment = "Test",
Role = Role.Admin
};
var yesterday = DateTime.Now.AddDays(-1);
var testDepartment = (new Department()
{
BusinessLineCode = BusinessLine.Operations.Code,
DayforceDepartmentName = "Test",
DayForceGlCode = "1",
DnaOrgNbr = "1",
DepartmentName = "TestName",
Assignments = new List<UserDepartment>
{
new UserDepartment { Role = Role.Admin, Id = 11, StartDate = yesterday, Employee = user1 },
new UserDepartment { Role = Role.Admin, Id = 12, StartDate = yesterday, Employee = user2 }
}
});
await _repository.SaveDepartmentAsync(testDepartment);
await _context.SaveChangesAsync();
var result = await _repository.FindCurrentDepartmentAssignments(1);
Assert.AreEqual(2, result.Count);
Assert.AreEqual(11, result.ElementAt(0).Id);
Assert.AreEqual("C0001", result.ElementAt(0).Employee.EmployeeId);
Assert.AreEqual(12, result.ElementAt(1).Id);
Assert.AreEqual("C0002", result.ElementAt(1).Employee.EmployeeId);
}
[Test]
public async Task FindCurrentDepartmentAssignments_EndDatePassed()
{
var user1 = new AppUser
{
Id = Guid.NewGuid(),
AdEmail = "[email protected]", EmployeeId = "C0001", PersonId = 1, BaseRole = "Role", FullName = "Test", HomeDepartment = "Test",
Role = Role.Admin
};
var user2 = new AppUser
{
Id = Guid.NewGuid(),
AdEmail = "[email protected]", EmployeeId = "C0002", PersonId = 2, BaseRole = "Role", FullName = "Test", HomeDepartment = "Test",
Role = Role.Admin
};
var yesterday = DateTime.Now.AddDays(-1);
var lastMonth = DateTime.Now.AddMonths(-1);
var testDepartment = (new Department()
{
BusinessLineCode = BusinessLine.Operations.Code,
DayforceDepartmentName = "Test",
DayForceGlCode = "1",
DnaOrgNbr = "1",
DepartmentName = "TestName",
Assignments = new List<UserDepartment>
{
new UserDepartment { Role = Role.Admin, Id = 11, StartDate = lastMonth, EndDate = lastMonth, Employee = user1 },
new UserDepartment { Role = Role.Admin, Id = 12, StartDate = yesterday, Employee = user2 }
}
});
await _repository.SaveDepartmentAsync(testDepartment);
await _context.SaveChangesAsync();
var result = await _repository.FindCurrentDepartmentAssignments(1);
Assert.AreEqual(1, result.Count);
Assert.AreEqual(12, result.ElementAt(0).Id);
Assert.AreEqual("C0002", result.ElementAt(0).Employee.EmployeeId);
}
}
}