using LCU.API.Collections.CollectionsApiLib.Models; using LCU.API.Internal.RepoApi.Old_Repo_DataAccess; using LCU.API.Internal.RepoApi.Old_Repo_Exceptions; using LCU.API.Internal.RepoApi.Repos.Models; using LCU.API.Internal.RepoApi.Repos.Repositories; using LCU.API.Internal.RepoApi.Old_Repo_Services; namespace LCU.API.Internal.RepoApiTests.ServiceTests { public class RepoLetterServiceTests { private readonly Mock _mockLetterRepository; private readonly Mock _mockCollectionsDao; private readonly RepoLetterService _service; public RepoLetterServiceTests() { _mockLetterRepository = new Mock(); _mockCollectionsDao = new Mock(); _service = new RepoLetterService(_mockLetterRepository.Object, _mockCollectionsDao.Object); } [Fact] public async Task ListByAccountIdAsync_ReturnsEmptyList_WhenNoCollectionsLetters() { // Arrange int accountId = 1; _mockCollectionsDao .Setup(x => x.RetrieveHistoryAsync(accountId)) .ReturnsAsync(new List()); // Act var result = await _service.ListByAccountIdAsync(accountId); // Assert Assert.Empty(result); } [Fact] public async Task ListByAccountIdAsync_ReturnsProcessedLetters_WhenCollectionsLettersExist() { // Arrange int accountId = 1; var collectionsHistory = new List { new TemenosHistory { Type = HistoryType.Letter, Message = "Test Message", Created = DateTime.UtcNow } }; var letters = new List { new Letter { LetterDescription = "Test", DaysToWait = 5, ActionCode = "A1" } }; _mockCollectionsDao .Setup(x => x.RetrieveHistoryAsync(accountId)) .ReturnsAsync(collectionsHistory); _mockLetterRepository .Setup(x => x.ListAsync()) .ReturnsAsync(letters); // Act var result = await _service.ListByAccountIdAsync(accountId); // Assert Assert.Single(result); Assert.Equal("Test Message", result.First().NoticeType); } [Fact] public async Task ListByAccountIdAsync_ThrowsServerErrorException_OnGeneralException() { // Arrange int accountId = 1; _mockCollectionsDao .Setup(x => x.RetrieveHistoryAsync(accountId)) .ThrowsAsync(new Exception("Test Exception")); // Act & Assert await Assert.ThrowsAsync(() => _service.ListByAccountIdAsync(accountId)); } [Fact] public void ProcessLetters_ThrowsMissingRequirementException_WhenLetterDescriptionIsNull() { // Arrange var collectionsLetters = new List { new TemenosHistory { Message = "Test Message", Created = DateTime.UtcNow } }; var letters = new List { new Letter { LetterDescription = null } }; // Act & Assert Assert.Throws(() => RepoLetterService.ProcessLetters(collectionsLetters, letters)); } [Fact] public void ProcessLetters_ReturnsProcessedLetters_WhenValidDataProvided() { // Arrange var collectionsLetters = new List { new TemenosHistory { Message = "Test Message", Created = DateTime.UtcNow } }; var letters = new List { new Letter { LetterDescription = "Test", DaysToWait = 5, ActionCode = "A1" } }; // Act var result = RepoLetterService.ProcessLetters(collectionsLetters, letters); // Assert Assert.Single(result); Assert.Equal("Test Message", result.First().NoticeType); } } }