362 lines
13 KiB
C#
362 lines
13 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using LCU.API.Internal.Operations.IncentiveApiLib.Repositories;
|
|
using LCU.API.Internal.Operations.IncentiveApi.Services;
|
|
using LCU.Library.Internal.IncentiveApiModels.Entities;
|
|
using LCU.Library.Internal.IncentiveApiModels.Enums;
|
|
using Moq;
|
|
using NUnit.Framework;
|
|
using LCU.API.Internal.Operations.IncentiveApiLib.Persistence;
|
|
using LCU.API.Internal.Operations.IncentiveApi.Services.DispersalStrategy;
|
|
using LCU.API.Internal.Operations.IncentiveApiLib.Services;
|
|
using LCU.Library.Internal.IncentiveApiModels.Requests;
|
|
using LCU.Library.Internal.IncentiveApiModels.Common;
|
|
|
|
namespace Application.UnitTests.Services
|
|
{
|
|
public class GoalServiceTest
|
|
{
|
|
private GoalService _goalService;
|
|
private IGoalRepository _goalRepository;
|
|
private IGoalChangeRepository _goalChangeRepository;
|
|
private ICurrentUserService _currentUserService;
|
|
private IDepartmentRepository _departmentRepository;
|
|
private Mock<IDispersalStrategyService> _mockDispersalStrategyService;
|
|
private IUserService _userService;
|
|
private IUnitOfWork _unitOfWork;
|
|
|
|
[SetUp]
|
|
public void Setup()
|
|
{
|
|
_currentUserService = Mock.Of<ICurrentUserService>();
|
|
_userService = Mock.Of<IUserService>();
|
|
|
|
Mock.Get(_currentUserService).Setup(s => s.GetCurrentUser()).Returns(new ApplicationUser()
|
|
{
|
|
Email = "[email protected]"
|
|
});
|
|
|
|
_goalRepository = Mock.Of<IGoalRepository>();
|
|
_goalChangeRepository = Mock.Of<IGoalChangeRepository>();
|
|
_unitOfWork = Mock.Of<IUnitOfWork>();
|
|
_mockDispersalStrategyService = new Mock<IDispersalStrategyService>();
|
|
_departmentRepository = Mock.Of<IDepartmentRepository>();
|
|
|
|
_goalService = new GoalService(_goalRepository, _goalChangeRepository, _currentUserService, _mockDispersalStrategyService.Object,
|
|
_unitOfWork, _userService, _departmentRepository);
|
|
}
|
|
[Test]
|
|
public async Task GetMonthlyPersonnelGoals_Basic()
|
|
{
|
|
var searchRequest = new DepartmentPersonnelSearchRequest()
|
|
{
|
|
DepartmentId = 55,
|
|
Year = 2020,
|
|
Month = 3
|
|
};
|
|
var users = new List<AppUser>()
|
|
{
|
|
new AppUser()
|
|
{
|
|
FullName = "Tester Doe",
|
|
EmployeeId = "11771"
|
|
}
|
|
};
|
|
var goals = new List<Goal>()
|
|
{
|
|
new Goal()
|
|
{
|
|
Product = Product.Mortgage,
|
|
Value = 4,
|
|
EmployeeId = "11771",
|
|
DepartmentId = 55
|
|
},
|
|
new Goal()
|
|
{
|
|
Product = Product.Vehicle,
|
|
Value = 4,
|
|
EmployeeId = "11771",
|
|
DepartmentId = 55
|
|
}
|
|
};
|
|
|
|
Mock.Get(_userService).Setup(s => s.FindDepartmentAssignments(searchRequest))
|
|
.ReturnsAsync(users);
|
|
|
|
Mock.Get(_goalRepository).Setup(s => s.FindMonthlyPersonnelGoals(searchRequest.DepartmentId, users,
|
|
searchRequest.Year, searchRequest.Month))
|
|
.ReturnsAsync(goals);
|
|
|
|
var result = await _goalService.GetMonthlyPersonnelGoalsAsync(searchRequest);
|
|
Assert.NotNull(result);
|
|
Assert.NotNull(result.GoalAudit);
|
|
Assert.IsNotEmpty(result.GoalAudit);
|
|
}
|
|
|
|
[Test]
|
|
public async Task GetEmployeeDepartmentsGoalsForMonth_Basic()
|
|
{
|
|
var range = new MonthRange(2021, 1);
|
|
|
|
var user = new AppUser()
|
|
{
|
|
FullName = "Tester Doe",
|
|
EmployeeId = "11771",
|
|
Departments = new List<UserDepartment>()
|
|
};
|
|
var userDept = new UserDepartment()
|
|
{
|
|
Role = Role.Teller,
|
|
DepartmentId = 55,
|
|
Employee = user,
|
|
IsHome = true,
|
|
SlidingPayout = 100,
|
|
Department = new Department()
|
|
{
|
|
Id = 55,
|
|
DepartmentName = "Dept1",
|
|
State = DepartmentState.Active
|
|
}
|
|
};
|
|
user.Departments.Add(userDept);
|
|
|
|
var goals = new List<Goal>()
|
|
{
|
|
new Goal()
|
|
{
|
|
Product = Product.Mortgage,
|
|
Value = 4,
|
|
EmployeeId = "11771",
|
|
DepartmentId = 55
|
|
},
|
|
new Goal()
|
|
{
|
|
Product = Product.Vehicle,
|
|
Value = 4,
|
|
EmployeeId = "11771",
|
|
DepartmentId = 55
|
|
}
|
|
};
|
|
|
|
Mock.Get(_goalRepository).Setup(s =>
|
|
s.FindDepartmentGoalsByMonthRange(userDept.DepartmentId, It.IsAny<MonthRange>()))
|
|
.ReturnsAsync(goals);
|
|
|
|
var result = await _goalService.GetEmployeeDepartmentsGoalsForMonthRangeAsync(user, range);
|
|
|
|
Assert.NotNull(result);
|
|
Assert.NotNull(result);
|
|
}
|
|
|
|
[Test]
|
|
public async Task GetEmployeeGoalsForMonth_Basic()
|
|
{
|
|
var searchRequest = new DepartmentPersonnelSearchRequest()
|
|
{
|
|
DepartmentId = 55,
|
|
Year = 2020,
|
|
Month = 3
|
|
};
|
|
var range = new MonthRange(2021, 1);
|
|
|
|
var user = new AppUser()
|
|
{
|
|
FullName = "Tester Doe",
|
|
EmployeeId = "11771",
|
|
Departments = new List<UserDepartment>()
|
|
};
|
|
var userDept = new UserDepartment()
|
|
{
|
|
Role = Role.Teller,
|
|
DepartmentId = 55,
|
|
Employee = user,
|
|
IsHome = true,
|
|
SlidingPayout = 100,
|
|
Department = new Department()
|
|
{
|
|
Id = 55,
|
|
DepartmentName = "Dept1",
|
|
State = DepartmentState.Active
|
|
}
|
|
};
|
|
user.Departments.Add(userDept);
|
|
|
|
var goals = new List<Goal>()
|
|
{
|
|
new Goal()
|
|
{
|
|
Product = Product.Mortgage,
|
|
Value = 4,
|
|
EmployeeId = "11771",
|
|
DepartmentId = 55
|
|
},
|
|
new Goal()
|
|
{
|
|
Product = Product.Vehicle,
|
|
Value = 4,
|
|
EmployeeId = "11771",
|
|
DepartmentId = 55
|
|
}
|
|
};
|
|
|
|
Mock.Get(_goalRepository).Setup(s =>
|
|
s.FindPersonnelGoalsByMonthRange(userDept.DepartmentId, It.IsAny<List<AppUser>>(), range))
|
|
.ReturnsAsync(goals);
|
|
|
|
var result = await _goalService.GetEmployeeGoalsForMonthRangeAsync(user, range);
|
|
Assert.NotNull(result);
|
|
Assert.NotNull(result.GoalAudit);
|
|
Assert.IsNotEmpty(result.GoalAudit);
|
|
}
|
|
|
|
[Test]
|
|
public async Task GetDeptGoals()
|
|
{
|
|
var goal = new Goal()
|
|
{
|
|
Product = Product.CheckCard,
|
|
DepartmentId = 1,
|
|
Value = 98,
|
|
StartDate = DateTime.Parse("2021-07-01T00:00:00.000"),
|
|
EndDate = DateTime.Parse("2021-07-31T23:59:00.000")
|
|
};
|
|
var goal2 = new Goal()
|
|
{
|
|
Product = Product.CheckCard,
|
|
DepartmentId = 1,
|
|
Value = 99,
|
|
StartDate = DateTime.Parse("2021-08-01T00:00:00.000"),
|
|
EndDate = DateTime.Parse("2021-08-31T23:59:00.000")
|
|
};
|
|
var goal3 = new Goal()
|
|
{
|
|
Product = Product.CheckCard,
|
|
DepartmentId = 1,
|
|
Value = 100,
|
|
StartDate = DateTime.Parse("2020-09-01T00:00:00.000"),
|
|
EndDate = DateTime.Parse("2020-09-30T23:59:00.000")
|
|
};
|
|
var goalDiffDept = new Goal()
|
|
{
|
|
Product = Product.CheckCard,
|
|
DepartmentId = 2,
|
|
Value = 101,
|
|
StartDate = DateTime.Parse("2021-09-01T00:00:00.000"),
|
|
EndDate = DateTime.Parse("2021-09-30T23:59:00.000")
|
|
};
|
|
var inputGoals = new List<Goal>()
|
|
{
|
|
goal, goal2, goal3, goalDiffDept
|
|
};
|
|
|
|
var startDate = goal.StartDate;
|
|
Mock.Get(_goalRepository).Setup(mock => mock.FindAnnualDepartmentGoals(It.IsAny<int>(), It.IsAny<int>()))
|
|
.ReturnsAsync(inputGoals);
|
|
|
|
var goals = await _goalService.GetAnnualDepartmentGoalsAsync(goal.DepartmentId, startDate.Year);
|
|
Assert.NotNull(goals);
|
|
var checkCardGoals = goals.MonthlyGoals[goal.StartDate.Month - 1].ProductGoals[Product.CheckCard];
|
|
Assert.AreEqual(goal.Value, checkCardGoals);
|
|
}
|
|
|
|
[Test]
|
|
public async Task GetAllDeptGoals()
|
|
{
|
|
var goal = new Goal()
|
|
{
|
|
Product = Product.CheckCard,
|
|
DepartmentId = 1,
|
|
Value = 98,
|
|
StartDate = DateTime.Parse("2021-07-01T00:00:00.000"),
|
|
EndDate = DateTime.Parse("2021-07-31T23:59:00.000")
|
|
};
|
|
var goal2 = new Goal()
|
|
{
|
|
Product = Product.CheckCard,
|
|
DepartmentId = 1,
|
|
Value = 99,
|
|
StartDate = DateTime.Parse("2021-08-01T00:00:00.000"),
|
|
EndDate = DateTime.Parse("2021-08-31T23:59:00.000")
|
|
};
|
|
var goalDiffDept = new Goal()
|
|
{
|
|
Product = Product.CheckCard,
|
|
DepartmentId = 2,
|
|
Value = 100,
|
|
StartDate = DateTime.Parse("2020-09-01T00:00:00.000"),
|
|
EndDate = DateTime.Parse("2020-09-30T23:59:00.000")
|
|
};
|
|
var goalDiffDept2 = new Goal()
|
|
{
|
|
Product = Product.CheckCard,
|
|
DepartmentId = 2,
|
|
Value = 101,
|
|
StartDate = DateTime.Parse("2021-09-01T00:00:00.000"),
|
|
EndDate = DateTime.Parse("2021-09-30T23:59:00.000")
|
|
};
|
|
var inputGoals = new List<Goal>()
|
|
{
|
|
goal, goal2
|
|
};
|
|
var inputGoals2 = new List<Goal>()
|
|
{
|
|
goalDiffDept, goalDiffDept2
|
|
};
|
|
var departments = new List<Department>()
|
|
{
|
|
new Department()
|
|
{
|
|
Id = 1,
|
|
DepartmentName = "dept1"
|
|
},
|
|
new Department()
|
|
{
|
|
Id = 2,
|
|
DepartmentName = "dept2"
|
|
}
|
|
};
|
|
|
|
var startDate = goal.StartDate;
|
|
Mock.Get(_goalRepository).Setup(mock => mock.FindAnnualDepartmentGoals(1, It.IsAny<int>()))
|
|
.ReturnsAsync(inputGoals);
|
|
Mock.Get(_goalRepository).Setup(mock => mock.FindAnnualDepartmentGoals(2, It.IsAny<int>()))
|
|
.ReturnsAsync(inputGoals2);
|
|
Mock.Get(_departmentRepository).Setup(mock => mock.GetAllDepartmentsAsync()).ReturnsAsync(departments);
|
|
|
|
var goals = await _goalService.GetAllAnnualDepartmentGoalsAsync(startDate.Year);
|
|
Assert.NotNull(goals);
|
|
var checkCardGoals = goals.First().MonthlyGoals[goal.StartDate.Month - 1].ProductGoals[Product.CheckCard];
|
|
Assert.AreEqual(goal.Value, checkCardGoals);
|
|
}
|
|
|
|
[Test]
|
|
public async Task GetGoalChanges_Basic()
|
|
{
|
|
var goals = new List<GoalChange>()
|
|
{
|
|
new GoalChange()
|
|
{
|
|
Product = Product.Mortgage,
|
|
Value = 4,
|
|
DepartmentId = 55
|
|
},
|
|
new GoalChange()
|
|
{
|
|
Product = Product.Vehicle,
|
|
Value = 4,
|
|
DepartmentId = 55
|
|
}
|
|
};
|
|
|
|
Mock.Get(_goalChangeRepository).Setup(s => s.GetGoalChangesAsync())
|
|
.ReturnsAsync(goals);
|
|
|
|
var result = await _goalService.GetGoalChangesAsync();
|
|
Assert.NotNull(result);
|
|
Assert.IsNotEmpty(result);
|
|
}
|
|
}
|
|
}
|