Files
2026-03-17 09:53:09 -05:00

230 lines
11 KiB
C#

using System;
using System.Threading.Tasks;
using LCU.API.Internal.Operations.IncentiveApiLib.Repositories;
using LCU.Library.Internal.IncentiveApiModels.Entities;
using LCU.Library.Internal.IncentiveApiModels.Enums;
using LCU.API.Internal.Operations.IncentiveApi.Extensions;
using LCU.API.Internal.Operations.IncentiveApi.Models.ExternalActivities;
using Moq;
using NUnit.Framework;
using LCU.API.Internal.Operations.IncentiveApiLib.Services;
using LCU.API.Internal.Operations.IncentiveApi.Services.ExternalActivity;
using LCU.API.Internal.Operations.IncentiveApi.Models.DataTransfer;
namespace Application.UnitTests.Services.ExternalActivity
{
public class NewActivityManagerActivityStrategyTest
{
private Mock<IUserService> _mockUserService;
private Mock<IDepartmentRepository> _mockDepartmentRepository;
private NewIncentiveManagerActivityStrategy _externalActivityService;
[SetUp]
public void Setup()
{
_mockUserService = new Mock<IUserService>();
_mockDepartmentRepository = new Mock<IDepartmentRepository>();
_externalActivityService = new NewIncentiveManagerActivityStrategy(_mockUserService.Object, _mockDepartmentRepository.Object);
}
[TestCase("Atm Card", Product.ATMCard)]
[TestCase("Check Card Referral", Product.CheckCard)]
[TestCase("Checking Referral", Product.NewChecking)]
[TestCase("Mortgage Referral", Product.Mortgage)]
[TestCase("Direct Deposit", Product.DirectDeposit)]
[TestCase("CC Balance Transfer", Product.CreditCardBalanceTransfer)]
[TestCase("LIC Referral", Product.LIC)]
public async Task NewIncentiveManagerActivityStrategy_Ok(string campaign, Product product)
{
var externalActivity = new NewActivityManagerReferral()
{
OriginatingBranchName = "MEQUON",
OriginatorPersNbr = 5,
OriginatorUserId = "JSMITHB",
ReferredPersonNbr = "1234",
ReferredPersOrgNbr = null,
ReferralStation= "Submitted",
StationDateTime = DateTime.Today.StartOfMonth(),
Campaign = campaign,
OriginationDateTime = DateTime.Parse("2021-03-10"),
OriginatorFirstName = "John",
OriginatorLastName = "Smith",
OriginatorMiddleInitial = "B",
EmployeeEmail = "[email protected]"
};
_mockUserService.Setup(x => x.GetUserByAdEmailAsync(It.IsAny<string>())).ReturnsAsync(new AppUser()
{
AdEmail = "[email protected]",
EmployeeId = "7624"
});
_mockDepartmentRepository.Setup(x => x.FindDepartmentByBranchName(It.IsAny<string>())).ReturnsAsync(
new Department()
{
Id = 10
}
);
var activity = await _externalActivityService.MapToActivityManagerActivity(externalActivity);
Assert.True(activity.Product == product);
Assert.True(activity.Type == ActivityType.Referral);
Assert.AreEqual(10, activity.DepartmentId);
Assert.AreEqual("7624", activity.EmployeeId);
_mockUserService.Verify(x => x.GetUserByAdEmailAsync(It.Is<string>(x => x == "[email protected]")), Times.Once);
_mockDepartmentRepository.Verify(x => x.FindDepartmentByBranchName(It.Is<string>(x => x == "MEQUON")), Times.Once);
}
[Test]
public async Task NewIncentiveManagerActivityStrategy_NoEmail_Ok()
{
var externalActivity = new NewActivityManagerReferral()
{
OriginatingBranchName = "WEST BEND MAIN",
OriginatorPersNbr = 5,
OriginatorUserId = "JSMITHB",
ReferredPersonNbr = "1234",
ReferredPersOrgNbr = null,
ReferralStation= "Submitted",
StationDateTime = DateTime.Today.StartOfMonth(),
Campaign = "ATM Card",
OriginationDateTime = DateTime.Parse("2021-03-10"),
OriginatorFirstName = "John",
OriginatorLastName = "Smith",
OriginatorMiddleInitial = "B",
};
_mockUserService.Setup(x => x.GetUserByAdEmailAsync(It.IsAny<string>())).ReturnsAsync((AppUser)null);
_mockDepartmentRepository.Setup(x => x.FindDepartmentByBranchName(It.IsAny<string>())).ReturnsAsync(
new Department()
{
Id = 10
}
);
var activity = await _externalActivityService.MapToActivityManagerActivity(externalActivity);
Assert.True(activity.Product == Product.ATMCard);
Assert.True(activity.Type == ActivityType.Referral);
Assert.AreEqual(10, activity.DepartmentId);
Assert.AreEqual(null, activity.EmployeeId);
_mockUserService.Verify(x => x.TryFindSingleUserByName(It.IsAny<UserNameSearchRequest>()), Times.Once);
_mockUserService.Verify(x => x.GetUserByAdEmailAsync(It.IsAny<string>()), Times.Never);
_mockDepartmentRepository.Verify(x => x.FindDepartmentByBranchName(It.Is<string>(x => x == "WEST BEND MAIN")), Times.Once);
}
[Test]
public async Task Throws_WhenUnknownProduct_OK()
{
var externalActivity = new NewActivityManagerReferral()
{
OriginatingBranchName = "WEST BEND MAIN",
OriginatorPersNbr = 5,
OriginatorUserId = "JSMITHB",
ReferredPersonNbr = "1234",
ReferredPersOrgNbr = null,
ReferralStation= "Submitted",
StationDateTime = DateTime.Today.StartOfMonth(),
Campaign = "THIS PRODUCT DOES NOT EXIST",
OriginationDateTime = DateTime.Parse("2021-03-10"),
OriginatorFirstName = "John",
OriginatorLastName = "Smith",
OriginatorMiddleInitial = "B",
};
_mockUserService.Setup(x => x.GetUserByAdEmailAsync(It.IsAny<string>())).ReturnsAsync(new AppUser()
{
AdEmail = "[email protected]",
EmployeeId = "7624"
});
_mockDepartmentRepository.Setup(x => x.FindUserHomeDepartment(It.IsAny<AppUser>())).ReturnsAsync(
new Department()
{
Id = 10
}
);
Assert.ThrowsAsync<Exception>(async () => await _externalActivityService.MapToActivityManagerActivity(externalActivity));
_mockUserService.Verify(x => x.GetUserByAdEmailAsync(It.IsAny<string>()), Times.Exactly(0));
_mockDepartmentRepository.Verify(x => x.FindDepartmentByBranchName(It.Is<string>(x => x == "WEST BEND MAIN")), Times.Once);
}
[Test]
public async Task NewIncentiveManagerActivityStrategy_NoDepartment_Ok()
{
var externalActivity = new NewActivityManagerReferral()
{
OriginatingBranchName = "WEST BEND MAIN",
OriginatorPersNbr = 5,
OriginatorUserId = "JSMITHB",
ReferredPersonNbr = "1234",
ReferredPersOrgNbr = null,
ReferralStation= "Submitted",
StationDateTime = DateTime.Today.StartOfMonth(),
Campaign = "ATM Card",
OriginationDateTime = DateTime.Parse("2021-03-10"),
OriginatorFirstName = "John",
OriginatorLastName = "Smith",
OriginatorMiddleInitial = "B",
EmployeeEmail = "[email protected]"
};
_mockUserService.Setup(x => x.GetUserByAdEmailAsync(It.IsAny<string>())).ReturnsAsync(new AppUser()
{
AdEmail = "[email protected]",
EmployeeId = "7624"
});
_mockDepartmentRepository.Setup(x => x.FindDepartmentByBranchName(It.IsAny<string>())).ReturnsAsync((Department) null);
var activity = await _externalActivityService.MapToActivityManagerActivity(externalActivity);
Assert.True(activity.Product == Product.ATMCard);
Assert.True(activity.Type == ActivityType.Referral);
Assert.AreEqual(-1, activity.DepartmentId);
Assert.AreEqual("7624", activity.EmployeeId);
_mockUserService.Verify(x => x.GetUserByAdEmailAsync(It.Is<string>(x => x == "[email protected]")), Times.Once);
_mockUserService.Verify(x => x.TryFindSingleUserByName(It.IsAny<UserNameSearchRequest>()), Times.Never);
_mockDepartmentRepository.Verify(x => x.FindDepartmentByBranchName(It.Is<string>(x => x == "WEST BEND MAIN")), Times.Once);
}
[Test]
public async Task NewIncentiveManagerActivityStrategy_ExceptionReturnsBasic()
{
var externalActivity = new NewActivityManagerReferral()
{
OriginatingBranchName = "WEST BEND MAIN",
OriginatorPersNbr = 5,
OriginatorUserId = "JSMITHB",
ReferredPersonNbr = "1234",
ReferredPersOrgNbr = null,
ReferralStation= "Submitted",
StationDateTime = DateTime.Today.StartOfMonth(),
Campaign = "ATM Card",
OriginationDateTime = DateTime.Parse("2021-03-10"),
OriginatorFirstName = "John",
OriginatorLastName = "Smith",
OriginatorMiddleInitial = "B",
EmployeeEmail = "[email protected]"
};
_mockUserService.Setup(x => x.GetUserByAdEmailAsync(It.IsAny<string>())).ReturnsAsync(new AppUser()
{
AdEmail = "[email protected]",
EmployeeId = "7624"
});
_mockDepartmentRepository.Setup(x => x.FindDepartmentByBranchName(It.IsAny<string>()))
.ThrowsAsync(new Exception("OOPS"));
var activity = await _externalActivityService.MapToActivityManagerActivity(externalActivity);
Assert.True(activity.Product == Product.ATMCard);
Assert.True(activity.Type == ActivityType.Referral);
//we search for user before department, if department fails, we can still save user
Assert.AreEqual(-1, activity.DepartmentId);
Assert.AreEqual("7624", activity.EmployeeId);
_mockUserService.Verify(x => x.GetUserByAdEmailAsync(It.Is<string>(x => x == "[email protected]")), Times.Once);
_mockUserService.Verify(x => x.TryFindSingleUserByName(It.IsAny<UserNameSearchRequest>()), Times.Never);
_mockDepartmentRepository.Verify(x => x.FindDepartmentByBranchName(It.Is<string>(x => x == "WEST BEND MAIN")), Times.Once);
}
}
}