Files
2026-04-20 14:47:24 -05:00

740 lines
33 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Castle.DynamicProxy.Generators;
using LCU.API.Collections.RepoApi.Exceptions;
using LCU.API.Collections.RepoApi.Models;
using LCU.API.Collections.RepoApi.Services;
using LCU.Shared.Collections.RepoApiLib.Exceptions;
using LCU.Shared.Collections.RepoApiLib.Models;
using LCU.Shared.Collections.RepoApiLib.Repositories;
using Moq;
using Xunit;
using Xunit.Sdk;
namespace LCU.API.Collections.RepoApiTests.Services
{
public class EventAlertServiceTest
{
[Fact]
public async void ListAll_Ok()
{
var mockEventAlertRepository = new Mock<IEventAlertRepository>();
var mockUnitOfWork = new Mock<IUnitOfWork>();
var mockRepoRepository = new Mock<IRepoAccountRepository>();
mockEventAlertRepository.Setup(repo => repo.ListAllAsync()).ReturnsAsync(new List<EventAlert>() { new EventAlert(), new EventAlert(), new EventAlert() });
EventAlertService eventAlertService = new EventAlertService(mockEventAlertRepository.Object, mockUnitOfWork.Object, mockRepoRepository.Object);
var res = await eventAlertService.ListAll();
Assert.NotNull(res);
Assert.Equal(3, res.Count());
}
[Fact]
public async void ListAll_Exception()
{
var mockEventAlertRepository = new Mock<IEventAlertRepository>();
var mockUnitOfWork = new Mock<IUnitOfWork>();
var mockRepoRepository = new Mock<IRepoAccountRepository>();
mockEventAlertRepository.Setup(repo => repo.ListAllAsync()).ThrowsAsync(new Exception("oops"));
EventAlertService eventAlertService = new EventAlertService(mockEventAlertRepository.Object, mockUnitOfWork.Object, mockRepoRepository.Object);
await Assert.ThrowsAsync<ServerErrorException>(async () => await eventAlertService.ListAll());
}
[Fact]
public async void ListUnread_Ok()
{
var mockEventAlertRepository = new Mock<IEventAlertRepository>();
var mockUnitOfWork = new Mock<IUnitOfWork>();
var mockRepoRepository = new Mock<IRepoAccountRepository>();
mockEventAlertRepository.Setup(repo => repo.ListUnreadAsync()).ReturnsAsync(new List<EventAlert>() { new EventAlert(), new EventAlert(), new EventAlert() });
EventAlertService eventAlertService = new EventAlertService(mockEventAlertRepository.Object, mockUnitOfWork.Object, mockRepoRepository.Object);
var res = await eventAlertService.ListUnread();
Assert.NotNull(res);
Assert.Equal(3, res.Count());
}
[Fact]
public async void ListUnread_Exception()
{
var mockEventAlertRepository = new Mock<IEventAlertRepository>();
var mockUnitOfWork = new Mock<IUnitOfWork>();
var mockRepoRepository = new Mock<IRepoAccountRepository>();
mockEventAlertRepository.Setup(repo => repo.ListUnreadAsync()).ThrowsAsync(new Exception("oops"));
EventAlertService eventAlertService = new EventAlertService(mockEventAlertRepository.Object, mockUnitOfWork.Object, mockRepoRepository.Object);
await Assert.ThrowsAsync<ServerErrorException>(async () => await eventAlertService.ListUnread());
}
[Fact]
public async void ListWithinDateRange_OK()
{
var mockEventAlertRepository = new Mock<IEventAlertRepository>();
var mockUnitOfWork = new Mock<IUnitOfWork>();
var mockRepoRepository = new Mock<IRepoAccountRepository>();
mockEventAlertRepository.Setup(repo => repo.ListWithinDateRangeAsync(It.IsAny<DateTime>(), It.IsAny<DateTime>())).ReturnsAsync(new List<EventAlert>() { new EventAlert(), new EventAlert(), new EventAlert() });
EventAlertService eventAlertService = new EventAlertService(mockEventAlertRepository.Object, mockUnitOfWork.Object, mockRepoRepository.Object);
var res = await eventAlertService.ListWithinDateRange(DateTime.Now, DateTime.Now.AddDays(5));
Assert.NotNull(res);
Assert.Equal(3, res.Count());
}
[Fact]
public async void ListWithinDateRange_Exception()
{
var mockEventAlertRepository = new Mock<IEventAlertRepository>();
var mockUnitOfWork = new Mock<IUnitOfWork>();
var mockRepoRepository = new Mock<IRepoAccountRepository>();
mockEventAlertRepository.Setup(repo => repo.ListWithinDateRangeAsync(It.IsAny<DateTime>(), It.IsAny<DateTime>())).ThrowsAsync(new Exception("oops"));
EventAlertService eventAlertService = new EventAlertService(mockEventAlertRepository.Object, mockUnitOfWork.Object, mockRepoRepository.Object);
await Assert.ThrowsAsync<ServerErrorException>(async () => await eventAlertService.ListWithinDateRange(DateTime.Now, DateTime.Now.AddDays(5)));
}
[Fact]
public async void ListActionNeeded_Exception()
{
var mockEventAlertRepository = new Mock<IEventAlertRepository>();
var mockUnitOfWork = new Mock<IUnitOfWork>();
var mockRepoRepository = new Mock<IRepoAccountRepository>();
mockEventAlertRepository.Setup(repo => repo.ListRepoNoAuctionAsync()).ReturnsAsync(new List<EventAlert>() { new EventAlert(), new EventAlert() });
mockEventAlertRepository.Setup(repo => repo.ListRepoNoCompanyAsync()).ReturnsAsync(new List<EventAlert>() { new EventAlert() });
mockEventAlertRepository.Setup(repo => repo.ListO4rNoCompanyAsync()).ReturnsAsync(new List<EventAlert>() { new EventAlert(), new EventAlert() });
mockEventAlertRepository.Setup(repo => repo.ListReadyForRetitleAsync()).ReturnsAsync(new List<EventAlert>() { new EventAlert(), new EventAlert(), new EventAlert() });
mockEventAlertRepository.Setup(repo => repo.ListFloorUpdateFailedAsync()).ThrowsAsync(new Exception("oops"));
mockEventAlertRepository.Setup(repo => repo.ListFloorNeedsSettingAsync()).ReturnsAsync(new List<EventAlert>() { new EventAlert(), new EventAlert(), new EventAlert() });
EventAlertService eventAlertService = new EventAlertService(mockEventAlertRepository.Object, mockUnitOfWork.Object, mockRepoRepository.Object);
await Assert.ThrowsAsync<ServerErrorException>(async () => await eventAlertService.ListActionNeeded());
}
[Fact]
public async void ListActionNeeded_OK()
{
var mockEventAlertRepository = new Mock<IEventAlertRepository>();
var mockUnitOfWork = new Mock<IUnitOfWork>();
var mockRepoRepository = new Mock<IRepoAccountRepository>();
mockEventAlertRepository.Setup(repo => repo.ListRepoNoAuctionAsync()).ReturnsAsync(new List<EventAlert>() { new EventAlert(), new EventAlert() });
mockEventAlertRepository.Setup(repo => repo.ListRepoNoCompanyAsync()).ReturnsAsync(new List<EventAlert>() { new EventAlert() });
mockEventAlertRepository.Setup(repo => repo.ListO4rNoCompanyAsync()).ReturnsAsync(new List<EventAlert>() { new EventAlert(), new EventAlert() });
mockEventAlertRepository.Setup(repo => repo.ListReadyForRetitleAsync()).ReturnsAsync(new List<EventAlert>() { new EventAlert(), new EventAlert(), new EventAlert() });
mockEventAlertRepository.Setup(repo => repo.ListFloorUpdateFailedAsync()).ReturnsAsync(new List<EventAlert>() { new EventAlert() });
mockEventAlertRepository.Setup(repo => repo.ListFloorNeedsSettingAsync()).ReturnsAsync(new List<EventAlert>() { new EventAlert(), new EventAlert(), new EventAlert() });
EventAlertService eventAlertService = new EventAlertService(mockEventAlertRepository.Object, mockUnitOfWork.Object, mockRepoRepository.Object);
var res = await eventAlertService.ListActionNeeded();
Assert.NotNull(res);
Assert.Equal(12, res.Count());
}
[Fact]
public async void SaveAsync_OK()
{
EventAlert eventAlert = new EventAlert()
{
Id = 5,
RepoId = 100
};
RepoAccount account = new RepoAccount()
{
RepoId = 100,
Status = "O4R"
};
var mockEventAlertRepository = new Mock<IEventAlertRepository>();
var mockUnitOfWork = new Mock<IUnitOfWork>();
var mockRepoRepository = new Mock<IRepoAccountRepository>();
mockEventAlertRepository.Setup(repo => repo.AddAsync(It.Is<EventAlert>(param => param.Id == 5))).Returns(Task.CompletedTask);
mockRepoRepository.Setup(repo => repo.FindByIdAsync(It.Is<Int32>(param => param == 100))).Returns(Task.FromResult(account));
mockUnitOfWork.Setup(mock => mock.CompleteAsync()).Returns(Task.CompletedTask);
EventAlertService eventAlertService = new EventAlertService(mockEventAlertRepository.Object, mockUnitOfWork.Object, mockRepoRepository.Object);
var res = await eventAlertService.SaveAsync(eventAlert);
Assert.NotNull(res);
Assert.Equal(eventAlert, res);
}
[Fact]
public async void SaveAsync_DuplicateResource_Exception()
{
EventAlert eventAlert = new EventAlert()
{
Id = 5,
RepoId = 100,
Message = "RTC Letter Not Found"
};
RepoAccount account = new RepoAccount()
{
RepoId = 100,
Status = "RTC Letter Not Found"
};
var mockEventAlertRepository = new Mock<IEventAlertRepository>();
var mockUnitOfWork = new Mock<IUnitOfWork>();
var mockRepoRepository = new Mock<IRepoAccountRepository>();
mockEventAlertRepository.Setup(repo => repo.AddAsync(It.Is<EventAlert>(param => param.Id == 5))).ThrowsAsync(new DuplicateResourceException("resource"));
mockRepoRepository.Setup(repo => repo.FindByIdAsync(It.Is<Int32>(param => param == 100))).Returns(Task.FromResult(account));
mockUnitOfWork.Setup(mock => mock.CompleteAsync()).Returns(Task.CompletedTask);
EventAlertService eventAlertService = new EventAlertService(mockEventAlertRepository.Object, mockUnitOfWork.Object, mockRepoRepository.Object);
await Assert.ThrowsAsync<DuplicateResourceException>(async () => await eventAlertService.SaveAsync(eventAlert));
}
[Fact]
public async void SaveAsync_Exception()
{
EventAlert eventAlert = new EventAlert()
{
Id = 5
};
var mockEventAlertRepository = new Mock<IEventAlertRepository>();
var mockUnitOfWork = new Mock<IUnitOfWork>();
var mockRepoRepository = new Mock<IRepoAccountRepository>();
mockEventAlertRepository.Setup(repo => repo.AddAsync(It.Is<EventAlert>(param => param.Id == 5))).ThrowsAsync(new Exception("oops"));
mockUnitOfWork.Setup(mock => mock.CompleteAsync()).Returns(Task.CompletedTask);
EventAlertService eventAlertService = new EventAlertService(mockEventAlertRepository.Object, mockUnitOfWork.Object, mockRepoRepository.Object);
await Assert.ThrowsAsync<ServerErrorException>(async () => await eventAlertService.SaveAsync(eventAlert));
}
[Fact]
public async void saveRangeAsync_Ok()
{
List<EventAlert> range = new List<EventAlert>() { new EventAlert(), new EventAlert(), new EventAlert() };
var mockEventAlertRepository = new Mock<IEventAlertRepository>();
var mockUnitOfWork = new Mock<IUnitOfWork>();
var mockRepoRepository = new Mock<IRepoAccountRepository>();
mockEventAlertRepository.Setup(repo => repo.AddRangeAsync(It.Is<List<EventAlert>>(param => param.Count() == 3))).ReturnsAsync(new List<EventAlert>() { new EventAlert(), new EventAlert() });
mockUnitOfWork.Setup(mock => mock.CompleteAsync()).Returns(Task.CompletedTask);
EventAlertService eventAlertService = new EventAlertService(mockEventAlertRepository.Object, mockUnitOfWork.Object, mockRepoRepository.Object);
var res = await eventAlertService.SaveRangeAsync(range);
Assert.NotNull(res);
Assert.Equal(2, res.Count());
}
[Fact]
public async void saveRangeAsync_Exception()
{
List<EventAlert> range = new List<EventAlert>() { new EventAlert(), new EventAlert(), new EventAlert() };
var mockEventAlertRepository = new Mock<IEventAlertRepository>();
var mockUnitOfWork = new Mock<IUnitOfWork>();
var mockRepoRepository = new Mock<IRepoAccountRepository>();
mockEventAlertRepository.Setup(repo => repo.AddRangeAsync(It.Is<List<EventAlert>>(param => param.Count() == 3))).ThrowsAsync(new Exception("oops"));
mockUnitOfWork.Setup(mock => mock.CompleteAsync()).Returns(Task.CompletedTask);
EventAlertService eventAlertService = new EventAlertService(mockEventAlertRepository.Object, mockUnitOfWork.Object, mockRepoRepository.Object);
var res = await eventAlertService.SaveRangeAsync(range);
Assert.NotNull(res);
Assert.Empty(res);
}
[Fact]
public async void Get_Ok()
{
var mockEventAlertRepository = new Mock<IEventAlertRepository>();
var mockUnitOfWork = new Mock<IUnitOfWork>();
var mockRepoRepository = new Mock<IRepoAccountRepository>();
mockEventAlertRepository.Setup(repo => repo.FindByIdAsync(It.IsAny<int>())).ReturnsAsync(new EventAlert() { Id = 5 });
mockUnitOfWork.Setup(mock => mock.CompleteAsync()).Returns(Task.CompletedTask);
EventAlertService eventAlertService = new EventAlertService(mockEventAlertRepository.Object, mockUnitOfWork.Object, mockRepoRepository.Object);
var res = await eventAlertService.Get(5);
Assert.NotNull(res);
Assert.Equal(5, res.Id);
}
[Fact]
public async void Get_Exception()
{
var mockEventAlertRepository = new Mock<IEventAlertRepository>();
var mockUnitOfWork = new Mock<IUnitOfWork>();
var mockRepoRepository = new Mock<IRepoAccountRepository>();
mockEventAlertRepository.Setup(repo => repo.FindByIdAsync(It.IsAny<int>())).ThrowsAsync(new Exception("Oops"));
mockUnitOfWork.Setup(mock => mock.CompleteAsync()).Returns(Task.CompletedTask);
EventAlertService eventAlertService = new EventAlertService(mockEventAlertRepository.Object, mockUnitOfWork.Object, mockRepoRepository.Object);
await Assert.ThrowsAsync<ServerErrorException>(async () => await eventAlertService.Get(5));
}
[Fact]
public async void Get_Null_Exception()
{
var mockEventAlertRepository = new Mock<IEventAlertRepository>();
var mockUnitOfWork = new Mock<IUnitOfWork>();
var mockRepoRepository = new Mock<IRepoAccountRepository>();
mockEventAlertRepository.Setup(repo => repo.FindByIdAsync(It.IsAny<int>())).Returns(Task.FromResult<EventAlert>(null));
mockUnitOfWork.Setup(mock => mock.CompleteAsync()).Returns(Task.CompletedTask);
EventAlertService eventAlertService = new EventAlertService(mockEventAlertRepository.Object, mockUnitOfWork.Object, mockRepoRepository.Object);
await Assert.ThrowsAsync<NotFoundException>(async () => await eventAlertService.Get(5));
}
[Fact]
public async void Update_Null()
{
var mockEventAlertRepository = new Mock<IEventAlertRepository>();
var mockUnitOfWork = new Mock<IUnitOfWork>();
var mockRepoRepository = new Mock<IRepoAccountRepository>();
mockEventAlertRepository.Setup(repo => repo.FindByIdAsync(It.IsAny<int>())).Returns(Task.FromResult<EventAlert>(null));
var eventAlertService = new EventAlertService(mockEventAlertRepository.Object, mockUnitOfWork.Object, mockRepoRepository.Object);
var dummyAlert = new EventAlert
{
Message = "Message",
DateMarkedRead = DateTime.Now,
CreatedBy = "Some Guy"
};
var dummyUser = new AppUser
{
FirstName = "John",
LastName = "Doe"
};
await Assert.ThrowsAsync<NotFoundException>(async () => await eventAlertService.UpdateAsync(dummyAlert, dummyUser));
}
[Fact]
public async void Update_Exception()
{
var mockEventAlertRepository = new Mock<IEventAlertRepository>();
var mockUnitOfWork = new Mock<IUnitOfWork>();
var mockRepoRepository = new Mock<IRepoAccountRepository>();
mockEventAlertRepository.Setup(repo => repo.FindByIdAsync(It.IsAny<int>())).ReturnsAsync(new EventAlert());
var eventAlertService = new EventAlertService(mockEventAlertRepository.Object, mockUnitOfWork.Object, mockRepoRepository.Object);
var dummyAlert = new EventAlert
{
Message = "Message",
DateMarkedRead = DateTime.Now,
CreatedBy = "Some Guy"
};
var dummyUser = new AppUser
{
FirstName = "John",
LastName = "Doe"
};
mockEventAlertRepository.Setup(repo => repo.Update(It.IsAny<EventAlert>())).Throws(new Exception("oops"));
await Assert.ThrowsAsync<ServerErrorException>(async () => await eventAlertService.UpdateAsync(dummyAlert, dummyUser));
}
[Fact]
public async void Update_Ok()
{
var mockEventAlertRepository = new Mock<IEventAlertRepository>();
var mockUnitOfWork = new Mock<IUnitOfWork>();
var mockRepoRepository = new Mock<IRepoAccountRepository>();
mockEventAlertRepository.Setup(repo => repo.FindByIdAsync(It.IsAny<int>())).ReturnsAsync(new EventAlert());
var eventAlertService = new EventAlertService(mockEventAlertRepository.Object, mockUnitOfWork.Object, mockRepoRepository.Object);
var dummyAlert = new EventAlert
{
Message = "Message",
DateMarkedRead = DateTime.Now,
CreatedBy = "Some Guy"
};
var dummyUser = new AppUser
{
FirstName = "John",
LastName = "Doe"
};
var result = await eventAlertService.UpdateAsync(dummyAlert, dummyUser);
Assert.NotNull(result);
Assert.Equal(dummyAlert.DateMarkedRead, result.DateMarkedRead);
Assert.Equal("Message", result.Message);
Assert.Equal("John Doe", result.MarkedReadBy);
Assert.Null(result.CreatedBy);
}
[Fact]
public async void Update_Existing_Exception()
{
var mockEventAlertRepository = new Mock<IEventAlertRepository>();
var mockUnitOfWork = new Mock<IUnitOfWork>();
var mockRepoRepository = new Mock<IRepoAccountRepository>();
mockEventAlertRepository.Setup(repo => repo.FindByIdAsync(It.IsAny<int>())).Throws(new Exception("oops"));
var eventAlertService = new EventAlertService(mockEventAlertRepository.Object, mockUnitOfWork.Object, mockRepoRepository.Object);
var dummyAlert = new EventAlert
{
Message = "Message",
DateMarkedRead = DateTime.Now,
CreatedBy = "Some Guy"
};
var dummyUser = new AppUser
{
FirstName = "John",
LastName = "Doe"
};
await Assert.ThrowsAsync<ServerErrorException>(async () => await eventAlertService.UpdateAsync(dummyAlert, dummyUser));
}
[Fact]
public async void Duplicate_Add_Exception()
{
RepoAccount account = new RepoAccount()
{
RepoId = 100,
Status = "RTC Letter Not Found"
};
EventAlert eventAlert = new EventAlert()
{
Id = 5,
RepoId = 100
};
// arrange
var mockEventAlertRepository = new Mock<IEventAlertRepository>();
var mockUnitOfWork = new Mock<IUnitOfWork>();
var mockRepoRepository = new Mock<IRepoAccountRepository>();
mockEventAlertRepository.Setup(repo => repo.AddAsync(It.Is<EventAlert>(param => param.Id == 5))).ThrowsAsync(new DuplicateResourceException("EventAlert"));
mockRepoRepository.Setup(repo => repo.FindByIdAsync(It.Is<Int32>(param => param == 100))).Returns(Task.FromResult(account));
var eventAlertService = new EventAlertService(mockEventAlertRepository.Object, mockUnitOfWork.Object, mockRepoRepository.Object);
// act / assert
try
{
var result = await eventAlertService.SaveAsync(eventAlert);
Assert.True(false, "An exception should have been thrown.");
}
catch (DuplicateResourceException ex)
{
Assert.Equal("Duplicate Resources of type EventAlert were found.", ex.Message);
}
catch (Exception)
{
Assert.True(false, "An exception other than DuplicateResourceException was thrown.");
}
}
[Fact]
public async void DeleteAsync_Ok()
{
var dummyAlert = new EventAlert
{
Message = "Message",
DateMarkedRead = DateTime.Now,
CreatedBy = "Some Guy"
};
var mockEventAlertRepository = new Mock<IEventAlertRepository>();
var mockUnitOfWork = new Mock<IUnitOfWork>();
var mockRepoRepository = new Mock<IRepoAccountRepository>();
mockEventAlertRepository.Setup(repo => repo.FindByIdAsync(It.IsAny<int>())).ReturnsAsync(dummyAlert);
mockUnitOfWork.Setup(mock => mock.CompleteAsync()).Returns(Task.CompletedTask);
mockEventAlertRepository.Setup(repo => repo.Remove(It.Is<EventAlert>(param => param.Message == "message")));
EventAlertService eventAlertService = new EventAlertService(mockEventAlertRepository.Object, mockUnitOfWork.Object, mockRepoRepository.Object);
var res = await eventAlertService.DeleteAsync(5);
}
[Fact]
public async void DeleteAsync_Null()
{
var dummyAlert = new EventAlert
{
Message = "Message",
DateMarkedRead = DateTime.Now,
CreatedBy = "Some Guy"
};
var mockEventAlertRepository = new Mock<IEventAlertRepository>();
var mockUnitOfWork = new Mock<IUnitOfWork>();
var mockRepoRepository = new Mock<IRepoAccountRepository>();
mockEventAlertRepository.Setup(repo => repo.FindByIdAsync(It.IsAny<int>())).Returns(Task.FromResult<EventAlert>(null));
mockUnitOfWork.Setup(mock => mock.CompleteAsync()).Returns(Task.CompletedTask);
mockEventAlertRepository.Setup(repo => repo.Remove(It.Is<EventAlert>(param => param.Message == "message")));
EventAlertService eventAlertService = new EventAlertService(mockEventAlertRepository.Object, mockUnitOfWork.Object, mockRepoRepository.Object);
await Assert.ThrowsAsync<NotFoundException>(async () => await eventAlertService.DeleteAsync(5));
}
[Fact]
public async void DeleteAsync_Remove_Exception()
{
var dummyAlert = new EventAlert
{
Message = "Message",
DateMarkedRead = DateTime.Now,
CreatedBy = "Some Guy"
};
var mockEventAlertRepository = new Mock<IEventAlertRepository>();
var mockUnitOfWork = new Mock<IUnitOfWork>();
var mockRepoRepository = new Mock<IRepoAccountRepository>();
mockEventAlertRepository.Setup(repo => repo.FindByIdAsync(It.IsAny<int>())).ReturnsAsync(dummyAlert);
mockUnitOfWork.Setup(mock => mock.CompleteAsync()).Returns(Task.CompletedTask);
mockEventAlertRepository.Setup(repo => repo.Remove(It.Is<EventAlert>(param => param.Message == "Message"))).Throws(new Exception("oops"));
EventAlertService eventAlertService = new EventAlertService(mockEventAlertRepository.Object, mockUnitOfWork.Object, mockRepoRepository.Object);
await Assert.ThrowsAsync<ServerErrorException>(async () => await eventAlertService.DeleteAsync(5));
}
[Fact]
public async void DeleteAsync_Existing_Exception()
{
var dummyAlert = new EventAlert
{
Message = "Message",
DateMarkedRead = DateTime.Now,
CreatedBy = "Some Guy"
};
var mockEventAlertRepository = new Mock<IEventAlertRepository>();
var mockUnitOfWork = new Mock<IUnitOfWork>();
var mockRepoRepository = new Mock<IRepoAccountRepository>();
mockEventAlertRepository.Setup(repo => repo.FindByIdAsync(It.IsAny<int>())).Throws(new Exception("oops"));
mockUnitOfWork.Setup(mock => mock.CompleteAsync()).Returns(Task.CompletedTask);
mockEventAlertRepository.Setup(repo => repo.Remove(It.Is<EventAlert>(param => param.Message == "message")));
EventAlertService eventAlertService = new EventAlertService(mockEventAlertRepository.Object, mockUnitOfWork.Object, mockRepoRepository.Object);
await Assert.ThrowsAsync<ServerErrorException>(async () => await eventAlertService.DeleteAsync(5));
}
[Fact]
public async void MarkAllAsRead_OK()
{
var alertList = new List<EventAlert> {
new EventAlert
{
Id = 1,
Message = "Message",
CreatedBy = "Some Guy",
AccountNo = "123-04566"
},
new EventAlert
{
Id = 2,
Message = "Message",
CreatedBy = "Some Guy",
AccountNo = "123-04566"
},
new EventAlert
{
Id = 3,
Message = "Message",
CreatedBy = "Some Guy",
AccountNo = "123-04566"
}
};
var mockEventAlertRepository = new Mock<IEventAlertRepository>();
var mockUnitOfWork = new Mock<IUnitOfWork>();
var mockRepoRepository = new Mock<IRepoAccountRepository>();
mockEventAlertRepository.Setup(repo => repo.ListUnreadByAccountNoAsync(It.IsAny<string>())).ReturnsAsync(alertList);
EventAlertService eventAlertService = new EventAlertService(mockEventAlertRepository.Object, mockUnitOfWork.Object, mockRepoRepository.Object);
var result = await eventAlertService.MarkAllAsRead("123-04566");
mockUnitOfWork.Verify(m => m.CompleteAsync(), Times.Once());
mockEventAlertRepository.Verify(m => m.Update(It.IsAny<EventAlert>()), Times.Exactly(3));
Assert.NotNull(result);
Assert.Equal(3, result.Count());
Assert.Equal(alertList, result);
}
[Fact]
public async void MarkAllAsRead_NotFoundException()
{
var mockEventAlertRepository = new Mock<IEventAlertRepository>();
var mockUnitOfWork = new Mock<IUnitOfWork>();
var mockRepoRepository = new Mock<IRepoAccountRepository>();
mockEventAlertRepository.Setup(repo => repo.ListUnreadByAccountNoAsync(It.IsAny<string>())).Returns(Task.FromResult<IEnumerable<EventAlert>>(null));
EventAlertService eventAlertService = new EventAlertService(mockEventAlertRepository.Object, mockUnitOfWork.Object, mockRepoRepository.Object);
await Assert.ThrowsAsync<NotFoundException>(async () => await eventAlertService.MarkAllAsRead("123-04566"));
mockUnitOfWork.Verify(m => m.CompleteAsync(), Times.Never());
mockEventAlertRepository.Verify(m => m.Update(It.IsAny<EventAlert>()), Times.Never);
}
[Fact]
public async void MarkAllAsRead_Existing_Exception()
{
var mockEventAlertRepository = new Mock<IEventAlertRepository>();
var mockUnitOfWork = new Mock<IUnitOfWork>();
var mockRepoRepository = new Mock<IRepoAccountRepository>();
mockEventAlertRepository.Setup(repo => repo.ListUnreadByAccountNoAsync(It.IsAny<string>())).ThrowsAsync(new Exception("oops"));
EventAlertService eventAlertService = new EventAlertService(mockEventAlertRepository.Object, mockUnitOfWork.Object, mockRepoRepository.Object);
await Assert.ThrowsAsync<ServerErrorException>(async () => await eventAlertService.MarkAllAsRead("123-04566"));
mockUnitOfWork.Verify(m => m.CompleteAsync(), Times.Never());
mockEventAlertRepository.Verify(m => m.Update(It.IsAny<EventAlert>()), Times.Never);
}
[Fact]
public async void MarkAllAsRead_Update_Exception()
{
var alertList = new List<EventAlert> {
new EventAlert
{
Id = 1,
Message = "Message",
CreatedBy = "Some Guy",
AccountNo = "123-04566"
},
new EventAlert
{
Id = 2,
Message = "Message",
CreatedBy = "Some Guy",
AccountNo = "123-04566"
},
new EventAlert
{
Id = 3,
Message = "Message",
CreatedBy = "Some Guy",
AccountNo = "123-04566"
}
};
var mockEventAlertRepository = new Mock<IEventAlertRepository>();
var mockUnitOfWork = new Mock<IUnitOfWork>();
var mockRepoRepository = new Mock<IRepoAccountRepository>();
mockEventAlertRepository.Setup(repo => repo.ListUnreadByAccountNoAsync(It.IsAny<string>())).ReturnsAsync(alertList);
mockEventAlertRepository.Setup(m => m.Update(It.IsAny<EventAlert>())).Throws(new Exception("oops"));
EventAlertService eventAlertService = new EventAlertService(mockEventAlertRepository.Object, mockUnitOfWork.Object, mockRepoRepository.Object);
await Assert.ThrowsAsync<ServerErrorException>(async () => await eventAlertService.MarkAllAsRead("123-04566"));
mockUnitOfWork.Verify(m => m.CompleteAsync(), Times.Never());
mockEventAlertRepository.Verify(m => m.Update(It.IsAny<EventAlert>()), Times.Once);
}
[Fact]
public async void MarkAllAsRead_Update_Exception_On_2nd()
{
var count = 0;
var alertList = new List<EventAlert> {
new EventAlert
{
Id = 1,
Message = "Message",
CreatedBy = "Some Guy",
AccountNo = "123-04566"
},
new EventAlert
{
Id = 2,
Message = "Message",
CreatedBy = "Some Guy",
AccountNo = "123-04566"
},
new EventAlert
{
Id = 3,
Message = "Message",
CreatedBy = "Some Guy",
AccountNo = "123-04566"
}
};
var mockEventAlertRepository = new Mock<IEventAlertRepository>();
var mockUnitOfWork = new Mock<IUnitOfWork>();
var mockRepoRepository = new Mock<IRepoAccountRepository>();
mockEventAlertRepository.Setup(repo => repo.ListUnreadByAccountNoAsync(It.IsAny<string>())).ReturnsAsync(alertList);
mockEventAlertRepository.Setup(m => m.Update(It.IsAny<EventAlert>())).Callback(() =>
{
count++;
if (count == 2)
{
throw new Exception("oops");
}
});
EventAlertService eventAlertService = new EventAlertService(mockEventAlertRepository.Object, mockUnitOfWork.Object, mockRepoRepository.Object);
await Assert.ThrowsAsync<ServerErrorException>(async () => await eventAlertService.MarkAllAsRead("123-04566"));
mockUnitOfWork.Verify(m => m.CompleteAsync(), Times.Never());
mockEventAlertRepository.Verify(m => m.Update(It.IsAny<EventAlert>()), Times.Exactly(2));
}
}
}