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

674 lines
31 KiB
C#

using LCU.API.Internal.Operations.IncentiveApiLib.Repositories;
using LCU.API.Internal.Operations.IncentiveApi.Services;
using Moq;
using NUnit.Framework;
using System.Threading.Tasks;
using System;
using System.Collections.Generic;
using CsvHelper.Configuration;
using CsvHelper;
using System.Globalization;
using System.IO;
using LCU.Library.Internal.IncentiveApiModels.Requests;
using LCU.Library.Internal.IncentiveApiModels.Entities;
using LCU.Library.Internal.IncentiveApiModels.Enums;
using LCU.Library.Internal.Exceptions;
using LCU.API.Internal.Operations.IncentiveApi.Services.MicroApiServices;
using LCU.API.Internal.Operations.IncentiveApi.Services.Temenos;
using LCU.API.Internal.Operations.IncentiveApi.Models.Temenos;
using LCU.Library.Internal.FileOperationsModels.Models;
namespace Application.UnitTests.Services.Temenos
{
public class ImportIndirectVehicleSalesServiceTest
{
private ImportIndirectVehicleSalesService _importIndirectVehicleSalesService;
private Mock<IUserRepository> _mockUserRepository;
private Mock<IActivityService> _mockActivityService;
private Mock<IFileOperationsApiService> _mockFileOperationsApiService;
private Mock<IDeadActivityService> _mockDeadActivityService;
[SetUp]
public void SetUp()
{
_mockUserRepository = new Mock<IUserRepository>();
_mockActivityService = new Mock<IActivityService>();
_mockFileOperationsApiService = new Mock<IFileOperationsApiService>();
_mockDeadActivityService = new Mock<IDeadActivityService>();
_importIndirectVehicleSalesService = new ImportIndirectVehicleSalesService(_mockActivityService.Object,
_mockUserRepository.Object,
_mockFileOperationsApiService.Object,
_mockDeadActivityService.Object);
}
[Test]
public async Task HandleImportIndirectVehicleSales_DeadAndAcceptedActivities_Ok()
{
var directFileContent = new List<DirectVehicleSaleRecord>()
{
new DirectVehicleSaleRecord()
{
ApplicantSSN = "123-45-6789",
ApplicationID = "123",
CreatedDate = DateTime.Now.AddDays(-50).ToString(),
ReferringEmployeeEmail = "[email protected]"
},
new DirectVehicleSaleRecord()
{
ApplicantSSN = "555-55-5555",
ApplicationID = "321",
CreatedDate = DateTime.Now.AddDays(-30).ToString(),
ReferringEmployeeEmail = "[email protected]"
}
};
var directWriter = GetWriter(directFileContent);
var indirectFileContent = new List<IndirectVehicleSaleRecord>()
{
new IndirectVehicleSaleRecord()
{
ApplicantSSN = "123-45-6789",
CreatedDate = DateTime.Now.AddDays(-40).ToString(),
ApplicationID = "123",
DisbursedDate = DateTime.Now.ToString()
},
new IndirectVehicleSaleRecord()
{
ApplicantSSN = "555-55-5555",
CreatedDate = DateTime.Now.AddDays(-10).ToString(),
ApplicationID = "321",
DisbursedDate = DateTime.Now.ToString()
}
};
var indirectWriter = GetWriter(indirectFileContent);
var fileResponse = new string[] { "filename" };
_mockFileOperationsApiService.Setup(x => x.BuildDynamicFileList(It.IsAny<DynamicFileListRequest>())).ReturnsAsync(fileResponse);
_mockFileOperationsApiService.SetupSequence(x => x.GetFileContent(It.IsAny<string>()))
.ReturnsAsync(directWriter.ToString())
.ReturnsAsync(indirectWriter.ToString());
var user = GetAppUser("[email protected]");
_mockUserRepository.SetupSequence(x => x.FindUserByAdEmailAsync(It.IsAny<string>()))
.ReturnsAsync(user)
.ReturnsAsync((AppUser)null);
var request = new ImportIndirectVehicleSalesRequest()
{
FilePath = "path\\",
DirectDynamicFileName = "directFileName",
IndirectDynamicFileName = "indirectFileName"
};
await _importIndirectVehicleSalesService.HandleImportIndirectVehicleSales(request);
_mockDeadActivityService.Verify(x => x.SaveDeadActivityRange(It.IsAny<List<DeadActivity>>()), Times.Once);
_mockActivityService.Verify(x => x.SaveActivityRangeAsync(It.IsAny<List<Activity>>()), Times.Once);
_mockUserRepository.Verify(x => x.FindUserByAdEmailAsync(It.IsAny<string>()), Times.Exactly(2));
_mockFileOperationsApiService.Verify(x => x.GetFileContent(It.IsAny<string>()), Times.Exactly(2));
}
[Test]
public async Task HandleImportIndirectVehicleSales_NoMatches_NoActivitiesSaved()
{
var directFileContent = new List<DirectVehicleSaleRecord>()
{
new DirectVehicleSaleRecord()
{
ApplicantSSN = "123-45-6789",
ApplicationID = "123",
CreatedDate = DateTime.Now.AddDays(-10).ToString(),
ReferringEmployeeEmail = "[email protected]"
},
new DirectVehicleSaleRecord()
{
ApplicantSSN = "555-55-5555",
ApplicationID = "321",
CreatedDate = DateTime.Now.AddDays(-10).ToString(),
ReferringEmployeeEmail = "[email protected]"
}
};
var directWriter = GetWriter(directFileContent);
var indirectFileContent = new List<IndirectVehicleSaleRecord>()
{
new IndirectVehicleSaleRecord()
{
ApplicantSSN = "987-65-4321",
CreatedDate = DateTime.Now.AddDays(-40).ToString(),
ApplicationID = "123",
DisbursedDate = DateTime.Now.ToString()
},
new IndirectVehicleSaleRecord()
{
ApplicantSSN = "555-55-5555",
CreatedDate = DateTime.Now.AddDays(-20).ToString(),
ApplicationID = "321",
DisbursedDate = DateTime.Now.ToString()
}
};
var indirectWriter = GetWriter(indirectFileContent);
var fileResponse = new string[] { "filename" };
_mockFileOperationsApiService.Setup(x => x.BuildDynamicFileList(It.IsAny<DynamicFileListRequest>())).ReturnsAsync(fileResponse);
_mockFileOperationsApiService.SetupSequence(x => x.GetFileContent(It.IsAny<string>()))
.ReturnsAsync(directWriter.ToString())
.ReturnsAsync(indirectWriter.ToString());
var user = GetAppUser("[email protected]");
_mockUserRepository.SetupSequence(x => x.FindUserByAdEmailAsync(It.IsAny<string>()))
.ReturnsAsync(user)
.ReturnsAsync((AppUser)null);
var request = new ImportIndirectVehicleSalesRequest()
{
FilePath = "path\\",
DirectDynamicFileName = "directFileName",
IndirectDynamicFileName = "indirectFileName"
};
await _importIndirectVehicleSalesService.HandleImportIndirectVehicleSales(request);
_mockDeadActivityService.Verify(x => x.SaveDeadActivityRange(It.IsAny<List<DeadActivity>>()), Times.Never);
_mockActivityService.Verify(x => x.SaveActivityRangeAsync(It.IsAny<List<Activity>>()), Times.Never);
_mockUserRepository.Verify(x => x.FindUserByAdEmailAsync(It.IsAny<string>()), Times.Never);
_mockFileOperationsApiService.Verify(x => x.GetFileContent(It.IsAny<string>()), Times.Exactly(2));
}
[Test]
public async Task HandleImportIndirectVehicleSales_OneIndirectMatch_CorrectActivitySaved()
{
var referringEmail = "[email protected]";
var matchedSsn = "123-45-6789";
var directCreatedDate = DateTime.Now.AddDays(-50).ToString();
var indirectCreatedDate = DateTime.Now.AddDays(-10).ToString();
var disbursedDate = DateTime.Now.ToString();
var directFileContent = new List<DirectVehicleSaleRecord>()
{
new DirectVehicleSaleRecord()
{
ApplicantSSN = matchedSsn,
ApplicationID = "123",
CreatedDate = directCreatedDate,
ReferringEmployeeEmail = referringEmail
},
new DirectVehicleSaleRecord()
{
ApplicantSSN = "123-45-9876",
ApplicationID = "123",
CreatedDate = DateTime.Now.AddDays(-30).ToString(),
ReferringEmployeeEmail = "[email protected]"
}
};
var directWriter = GetWriter(directFileContent);
var indirectFileContent = new List<IndirectVehicleSaleRecord>()
{
new IndirectVehicleSaleRecord()
{
ApplicantSSN = matchedSsn,
CreatedDate = DateTime.Now.AddDays(-40).ToString(),
ApplicationID = "123",
DisbursedDate = disbursedDate
},
new IndirectVehicleSaleRecord()
{
ApplicantSSN = "555-55-5555",
CreatedDate = DateTime.Now.AddDays(-60).ToString(),
ApplicationID = "123",
DisbursedDate = DateTime.Now.AddDays(-70).ToString()
},
new IndirectVehicleSaleRecord()
{
ApplicantSSN = "999-99-9999",
CreatedDate = DateTime.Now.AddDays(-60).ToString(),
ApplicationID = "999",
DisbursedDate = DateTime.Now.AddDays(-65).ToString()
}
};
var indirectWriter = GetWriter(indirectFileContent);
var fileResponse = new string[] { "filename" };
_mockFileOperationsApiService.Setup(x => x.BuildDynamicFileList(It.IsAny<DynamicFileListRequest>())).ReturnsAsync(fileResponse);
_mockFileOperationsApiService.SetupSequence(x => x.GetFileContent(It.IsAny<string>()))
.ReturnsAsync(directWriter.ToString())
.ReturnsAsync(indirectWriter.ToString());
var user = GetAppUser(referringEmail);
_mockUserRepository.Setup(x => x.FindUserByAdEmailAsync(It.IsAny<string>())).ReturnsAsync(user);
_mockActivityService.Setup(x => x.SaveActivityRangeAsync(It.IsAny<List<Activity>>()));
var request = new ImportIndirectVehicleSalesRequest()
{
FilePath = "path\\",
DirectDynamicFileName = "filename",
IndirectDynamicFileName = "indirectFileName"
};
await _importIndirectVehicleSalesService.HandleImportIndirectVehicleSales(request);
_mockActivityService.Verify(x => x.SaveActivityRangeAsync(It.Is<List<Activity>>(x => x.Count == 1
&& x[0].EmployeeEmail == referringEmail
&& x[0].SourceCreated == DateTime.Parse(disbursedDate)
&& x[0].Accepted == DateTime.Parse(disbursedDate).Date.AddHours(12))));
_mockDeadActivityService.Verify(x => x.SaveDeadActivityRange(It.IsAny<List<DeadActivity>>()), Times.Never);
_mockUserRepository.Verify(x => x.FindUserByAdEmailAsync(It.IsAny<string>()), Times.Once);
_mockFileOperationsApiService.Verify(x => x.GetFileContent(It.IsAny<string>()), Times.Exactly(2));
}
[Test]
public async Task HandleImportIndirectVehicleSales_MultipleIndirectApplicants_FirstRecordMatches()
{
var referringEmail = "[email protected]";
var matchedSsn = "123-45-6789";
var directCreatedDate = DateTime.Now.AddDays(-50).ToString();
var indirectCreatedDate = DateTime.Now.AddDays(-10).ToString();
var disbursedDate = DateTime.Now.ToString();
var matchedApplicantName = "matchedName";
var directFileContent = new List<DirectVehicleSaleRecord>()
{
new DirectVehicleSaleRecord()
{
ApplicantSSN = matchedSsn,
ApplicationID = "123",
CreatedDate = directCreatedDate,
ReferringEmployeeEmail = referringEmail
},
new DirectVehicleSaleRecord()
{
ApplicantSSN = matchedSsn,
ApplicationID = "123",
CreatedDate = directCreatedDate,
ReferringEmployeeEmail = "[email protected]"
}
};
var directWriter = GetWriter(directFileContent);
var indirectFileContent = new List<IndirectVehicleSaleRecord>()
{
new IndirectVehicleSaleRecord()
{
ApplicantSSN = matchedSsn,
CreatedDate = DateTime.Now.AddDays(-40).ToString(),
ApplicationID = "123",
DisbursedDate = disbursedDate,
ApplicantName = matchedApplicantName
},
new IndirectVehicleSaleRecord()
{
ApplicantSSN = matchedSsn,
CreatedDate = DateTime.Now.AddDays(-40).ToString(),
ApplicationID = "123",
DisbursedDate = disbursedDate
}
};
var indirectWriter = GetWriter(indirectFileContent);
var fileResponse = new string[] { "filename" };
_mockFileOperationsApiService.Setup(x => x.BuildDynamicFileList(It.IsAny<DynamicFileListRequest>())).ReturnsAsync(fileResponse);
_mockFileOperationsApiService.SetupSequence(x => x.GetFileContent(It.IsAny<string>()))
.ReturnsAsync(directWriter.ToString())
.ReturnsAsync(indirectWriter.ToString());
var user = GetAppUser(referringEmail);
_mockUserRepository.Setup(x => x.FindUserByAdEmailAsync(It.IsAny<string>())).ReturnsAsync(user);
_mockActivityService.Setup(x => x.SaveActivityRangeAsync(It.IsAny<List<Activity>>()));
var request = new ImportIndirectVehicleSalesRequest()
{
FilePath = "path\\",
DirectDynamicFileName = "filename",
IndirectDynamicFileName = "indirectFileName"
};
await _importIndirectVehicleSalesService.HandleImportIndirectVehicleSales(request);
_mockActivityService.Verify(x => x.SaveActivityRangeAsync(It.Is<List<Activity>>(x => x.Count == 1
&& x[0].Detail.MemberName == matchedApplicantName
&& x[0].EmployeeEmail == referringEmail
&& x[0].SourceCreated == DateTime.Parse(disbursedDate)
&& x[0].Accepted == DateTime.Parse(disbursedDate).Date.AddHours(12))));
_mockDeadActivityService.Verify(x => x.SaveDeadActivityRange(It.IsAny<List<DeadActivity>>()), Times.Never);
_mockUserRepository.Verify(x => x.FindUserByAdEmailAsync(It.IsAny<string>()), Times.Once);
_mockFileOperationsApiService.Verify(x => x.GetFileContent(It.IsAny<string>()), Times.Exactly(2));
}
[Test]
public void HandleImportIndirectVehicleSales_DeadActivityServiceFails_ExceptionThrown()
{
var directFileContent = new List<DirectVehicleSaleRecord>()
{
new DirectVehicleSaleRecord()
{
ApplicantSSN = "555-55-5555",
ApplicationID = "321",
CreatedDate = DateTime.Now.AddDays(-30).ToString(),
ReferringEmployeeEmail = "[email protected]"
}
};
var directWriter = GetWriter(directFileContent);
var indirectFileContent = new List<IndirectVehicleSaleRecord>()
{
new IndirectVehicleSaleRecord()
{
ApplicantSSN = "123-45-6789",
CreatedDate = DateTime.Now.AddDays(-40).ToString(),
ApplicationID = "123",
DisbursedDate = DateTime.Now.ToString()
},
new IndirectVehicleSaleRecord()
{
ApplicantSSN = "555-55-5555",
CreatedDate = DateTime.Now.AddDays(-10).ToString(),
ApplicationID = "321",
DisbursedDate = DateTime.Now.ToString()
}
};
var indirectWriter = GetWriter(indirectFileContent);
var fileResponse = new string[] { "filename" };
_mockFileOperationsApiService.Setup(x => x.BuildDynamicFileList(It.IsAny<DynamicFileListRequest>())).ReturnsAsync(fileResponse);
_mockFileOperationsApiService.SetupSequence(x => x.GetFileContent(It.IsAny<string>()))
.ReturnsAsync(directWriter.ToString())
.ReturnsAsync(indirectWriter.ToString());
var user = GetAppUser("[email protected]");
_mockUserRepository.Setup(x => x.FindUserByAdEmailAsync(It.IsAny<string>())).ReturnsAsync((AppUser)null);
_mockDeadActivityService.Setup(x => x.SaveDeadActivityRange(It.IsAny<List<DeadActivity>>())).ThrowsAsync(new Exception("Failure"));
var request = new ImportIndirectVehicleSalesRequest()
{
FilePath = "path\\",
DirectDynamicFileName = "directFileName",
IndirectDynamicFileName = "indirectFileName"
};
Assert.ThrowsAsync<ServiceException>(() => _importIndirectVehicleSalesService.HandleImportIndirectVehicleSales(request));
_mockDeadActivityService.Verify(x => x.SaveDeadActivityRange(It.IsAny<List<DeadActivity>>()), Times.Once);
_mockActivityService.Verify(x => x.SaveActivityRangeAsync(It.IsAny<List<Activity>>()), Times.Never);
_mockUserRepository.Verify(x => x.FindUserByAdEmailAsync(It.IsAny<string>()), Times.Once);
_mockFileOperationsApiService.Verify(x => x.GetFileContent(It.IsAny<string>()), Times.Exactly(2));
}
[Test]
public void HandleImportIndirectVehicleSales_ActivityServiceFails_ExceptionThrown()
{
var directFileContent = new List<DirectVehicleSaleRecord>()
{
new DirectVehicleSaleRecord()
{
ApplicantSSN = "555-55-5555",
ApplicationID = "321",
CreatedDate = DateTime.Now.AddDays(-30).ToString(),
ReferringEmployeeEmail = "[email protected]"
}
};
var directWriter = GetWriter(directFileContent);
var indirectFileContent = new List<IndirectVehicleSaleRecord>()
{
new IndirectVehicleSaleRecord()
{
ApplicantSSN = "555-55-5555",
CreatedDate = DateTime.Now.AddDays(-10).ToString(),
ApplicationID = "123",
DisbursedDate = DateTime.Now.ToString()
}
};
var indirectWriter = GetWriter(indirectFileContent);
var fileResponse = new string[] { "filename" };
_mockFileOperationsApiService.Setup(x => x.BuildDynamicFileList(It.IsAny<DynamicFileListRequest>()))
.ReturnsAsync(fileResponse);
_mockFileOperationsApiService.SetupSequence(x => x.GetFileContent(It.IsAny<string>()))
.ReturnsAsync(directWriter.ToString())
.ReturnsAsync(indirectWriter.ToString());
var user = GetAppUser("[email protected]");
_mockUserRepository.Setup(x => x.FindUserByAdEmailAsync(It.IsAny<string>())).ReturnsAsync(user);
_mockActivityService.Setup(x => x.SaveActivityRangeAsync(It.IsAny<List<Activity>>())).ThrowsAsync(new Exception("Failure"));
var request = new ImportIndirectVehicleSalesRequest()
{
FilePath = "path\\",
DirectDynamicFileName = "directFileName",
IndirectDynamicFileName = "indirectFileName"
};
Assert.ThrowsAsync<ServiceException>(() => _importIndirectVehicleSalesService.HandleImportIndirectVehicleSales(request));
_mockDeadActivityService.Verify(x => x.SaveDeadActivityRange(It.IsAny<List<DeadActivity>>()), Times.Never);
_mockActivityService.Verify(x => x.SaveActivityRangeAsync(It.IsAny<List<Activity>>()), Times.Once);
_mockUserRepository.Verify(x => x.FindUserByAdEmailAsync(It.IsAny<string>()), Times.Once);
_mockFileOperationsApiService.Verify(x => x.GetFileContent(It.IsAny<string>()), Times.Exactly(2));
}
[Test]
public async Task HandleImportIndirectVehicleSales_UserRepositoryFails_DeadActivitySaved()
{
var directFileContent = new List<DirectVehicleSaleRecord>()
{
new DirectVehicleSaleRecord()
{
ApplicantSSN = "123-45-6789",
ApplicationID = "123",
CreatedDate = DateTime.Now.AddDays(-50).ToString(),
ReferringEmployeeEmail = "[email protected]"
}
};
var directWriter = GetWriter(directFileContent);
var indirectFileContent = new List<IndirectVehicleSaleRecord>()
{
new IndirectVehicleSaleRecord()
{
ApplicantSSN = "123-45-6789",
CreatedDate = DateTime.Now.AddDays(-40).ToString(),
ApplicationID = "123",
DisbursedDate = DateTime.Now.ToString()
},
new IndirectVehicleSaleRecord()
{
ApplicantSSN = "555-55-5555",
CreatedDate = DateTime.Now.AddDays(-10).ToString(),
ApplicationID = "321",
DisbursedDate = DateTime.Now.ToString()
}
};
var indirectWriter = GetWriter(indirectFileContent);
var fileResponse = new string[] { "filename" };
_mockFileOperationsApiService.Setup(x => x.BuildDynamicFileList(It.IsAny<DynamicFileListRequest>())).ReturnsAsync(fileResponse);
_mockFileOperationsApiService.SetupSequence(x => x.GetFileContent(It.IsAny<string>()))
.ReturnsAsync(directWriter.ToString())
.ReturnsAsync(indirectWriter.ToString());
_mockUserRepository.Setup(x => x.FindUserByAdEmailAsync(It.IsAny<string>())).ThrowsAsync(new Exception("Failure"));
var request = new ImportIndirectVehicleSalesRequest()
{
FilePath = "path\\",
DirectDynamicFileName = "directFileName",
IndirectDynamicFileName = "indirectFileName"
};
await _importIndirectVehicleSalesService.HandleImportIndirectVehicleSales(request);
_mockDeadActivityService.Verify(x => x.SaveDeadActivityRange(It.Is<List<DeadActivity>>(x => x.Count == 1)), Times.Once);
_mockActivityService.Verify(x => x.SaveActivityRangeAsync(It.IsAny<List<Activity>>()), Times.Never);
_mockUserRepository.Verify(x => x.FindUserByAdEmailAsync(It.IsAny<string>()), Times.Once);
_mockFileOperationsApiService.Verify(x => x.GetFileContent(It.IsAny<string>()), Times.Exactly(2));
}
[Test]
public async Task HandleImportIndirectVehicleSales_NullEmployeeHomedepartment_DeadActivitySaved()
{
var directFileContent = new List<DirectVehicleSaleRecord>()
{
new DirectVehicleSaleRecord()
{
ApplicantSSN = "123-45-6789",
ApplicationID = "123",
CreatedDate = DateTime.Now.AddDays(-50).ToString(),
ReferringEmployeeEmail = "[email protected]"
}
};
var directWriter = GetWriter(directFileContent);
var indirectFileContent = new List<IndirectVehicleSaleRecord>()
{
new IndirectVehicleSaleRecord()
{
ApplicantSSN = "123-45-6789",
CreatedDate = DateTime.Now.AddDays(-40).ToString(),
ApplicationID = "123",
DisbursedDate = DateTime.Now.ToString()
},
new IndirectVehicleSaleRecord()
{
ApplicantSSN = "555-55-5555",
CreatedDate = DateTime.Now.AddDays(-10).ToString(),
ApplicationID = "321",
DisbursedDate = DateTime.Now.ToString()
}
};
var indirectWriter = GetWriter(indirectFileContent);
var fileResponse = new string[] { "filename" };
_mockFileOperationsApiService.Setup(x => x.BuildDynamicFileList(It.IsAny<DynamicFileListRequest>())).ReturnsAsync(fileResponse);
_mockFileOperationsApiService.SetupSequence(x => x.GetFileContent(It.IsAny<string>()))
.ReturnsAsync(directWriter.ToString())
.ReturnsAsync(indirectWriter.ToString());
var user = GetAppUser("[email protected]", false);
_mockUserRepository.Setup(x => x.FindUserByAdEmailAsync(It.IsAny<string>())).ReturnsAsync(user);
var request = new ImportIndirectVehicleSalesRequest()
{
FilePath = "path\\",
DirectDynamicFileName = "directFileName",
IndirectDynamicFileName = "indirectFileName"
};
await _importIndirectVehicleSalesService.HandleImportIndirectVehicleSales(request);
_mockDeadActivityService.Verify(x => x.SaveDeadActivityRange(It.Is<List<DeadActivity>>(x => x.Count == 1)), Times.Once);
_mockActivityService.Verify(x => x.SaveActivityRangeAsync(It.IsAny<List<Activity>>()), Times.Never);
_mockUserRepository.Verify(x => x.FindUserByAdEmailAsync(It.IsAny<string>()), Times.Once);
_mockFileOperationsApiService.Verify(x => x.GetFileContent(It.IsAny<string>()), Times.Exactly(2));
}
[Test]
public Task HandleImportIndirectVehicleSales_FileOperationsGetContentServiceFails_ExceptionThrown()
{
var fileResponse = new string[] { "filename" };
_mockFileOperationsApiService.Setup(x => x.BuildDynamicFileList(It.IsAny<DynamicFileListRequest>())).ReturnsAsync(fileResponse);
_mockFileOperationsApiService.Setup(x => x.GetFileContent(It.IsAny<string>())).ThrowsAsync(new Exception("Failure"));
var request = new ImportIndirectVehicleSalesRequest()
{
FilePath = "path\\",
DirectDynamicFileName = "directFileName",
IndirectDynamicFileName = "indirectFileName"
};
Assert.ThrowsAsync<ServiceException>(() => _importIndirectVehicleSalesService.HandleImportIndirectVehicleSales(request));
_mockDeadActivityService.Verify(x => x.SaveDeadActivityRange(It.IsAny<List<DeadActivity>>()), Times.Never);
_mockActivityService.Verify(x => x.SaveActivityRangeAsync(It.IsAny<List<Activity>>()), Times.Never);
_mockUserRepository.Verify(x => x.FindUserByAdEmailAsync(It.IsAny<string>()), Times.Never);
_mockFileOperationsApiService.Verify(x => x.GetFileContent(It.IsAny<string>()), Times.Once);
return Task.CompletedTask;
}
[Test]
public Task HandleImportIndirectVehicleSales_FileOperationsBuildListServiceFails_ExceptionThrown()
{
var fileResponse = new string[] { "filename" };
_mockFileOperationsApiService.Setup(x => x.BuildDynamicFileList(It.IsAny<DynamicFileListRequest>())).ThrowsAsync(new Exception("Failure"));
var request = new ImportIndirectVehicleSalesRequest()
{
FilePath = "path\\",
DirectDynamicFileName = "directFileName",
IndirectDynamicFileName = "indirectFileName"
};
Assert.ThrowsAsync<ServiceException>(() => _importIndirectVehicleSalesService.HandleImportIndirectVehicleSales(request));
_mockDeadActivityService.Verify(x => x.SaveDeadActivityRange(It.IsAny<List<DeadActivity>>()), Times.Never);
_mockActivityService.Verify(x => x.SaveActivityRangeAsync(It.IsAny<List<Activity>>()), Times.Never);
_mockUserRepository.Verify(x => x.FindUserByAdEmailAsync(It.IsAny<string>()), Times.Never);
_mockFileOperationsApiService.Verify(x => x.GetFileContent(It.IsAny<string>()), Times.Never);
return Task.CompletedTask;
}
private StringWriter GetWriter<T>(List<T> fileContent)
{
var writer = new StringWriter();
var config = new CsvConfiguration(CultureInfo.InvariantCulture) { Delimiter = "|", HasHeaderRecord = false };
using (var csv = new CsvWriter(writer, config))
{
csv.WriteRecords(fileContent);
}
return writer;
}
private AppUser GetAppUser(string emailAddress, bool assignHomeDepartment = true)
{
var department = new Department
{
DepartmentName = "Dept1",
Id = 55,
State = DepartmentState.Active
};
var user = new AppUser
{
AdEmail = emailAddress,
EmployeeId = "11771",
FullName = "John Doe",
Departments = new List<UserDepartment>()
};
var assignment = new UserDepartment
{
Id = 99,
Department = department,
Employee = user,
Role = Role.BM,
IsHome = true,
StartDate = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1),
EndDate = null
};
if (assignHomeDepartment)
{
user.Departments.Add(assignment);
}
return user;
}
}
}