using FabApprovalWorkerService.Models; using FabApprovalWorkerService.Services; using Microsoft.Extensions.Logging; using Moq; namespace FabApprovalWorkerServiceTests; public class CorrectiveActionServiceTests { private Mock> _mockLogger; private Mock _mockDalService; private CorrectiveActionService _caService; [SetUp] public void Setup() { _mockLogger = new Mock>(); _mockDalService = new Mock(); } [Test] public void CAServiceWithNullLoggerShouldThrowException() { Assert.Throws(() => new CorrectiveActionService(null, _mockDalService.Object)); } [Test] public void CAServiceWithNullDalServiceShouldThrowException() { Assert.Throws(() => new CorrectiveActionService(_mockLogger.Object, null)); } [Test] public void GetCorrectiveActionsWithFollowUpInFiveDaysDbErrorShouldThrowError() { _mockDalService.Setup(d => d.QueryAsync(It.IsAny())).Throws(new Exception()); _caService = new CorrectiveActionService(_mockLogger.Object, _mockDalService.Object); Assert.ThrowsAsync(async Task () => await _caService.GetCorrectiveActionsWithFollowUpInFiveDays()); } [Test] public async Task GetCorrectiveActionsWithFollowUpInFiveDaysShouldReturnExpectedCAs() { IEnumerable expectedCAs = new List() { new CorrectiveAction() { CANo = 1, CATitle = "title" }, new CorrectiveAction() { CANo = 2, CATitle = "title" }, new CorrectiveAction() { CANo = 3, CATitle = "title" } }; _mockDalService.Setup(d => d.QueryAsync(It.IsAny())).Returns(Task.FromResult(expectedCAs)); _caService = new CorrectiveActionService(_mockLogger.Object, _mockDalService.Object); IEnumerable actualCAs = await _caService.GetCorrectiveActionsWithFollowUpInFiveDays(); Assert.That(expectedCAs, Is.EquivalentTo(actualCAs)); } //CreateCorrectiveActionFollowUpApproval [Test] public void CreateCorrectiveActionFollowUpApprovalWithInvalidCaNoShouldThrowException() { _caService = new CorrectiveActionService(_mockLogger.Object, _mockDalService.Object); Assert.ThrowsAsync(async Task () => await _caService.CreateCorrectiveActionFollowUpApproval(0, 5)); Assert.ThrowsAsync(async Task () => await _caService.CreateCorrectiveActionFollowUpApproval(-5, 5)); } [Test] public void CreateCorrectiveActionFollowUpApprovalWithInvalidQaIdShouldThrowException() { _caService = new CorrectiveActionService(_mockLogger.Object, _mockDalService.Object); Assert.ThrowsAsync(async Task () => await _caService.CreateCorrectiveActionFollowUpApproval(5, 0)); Assert.ThrowsAsync(async Task () => await _caService.CreateCorrectiveActionFollowUpApproval(5, -5)); } [Test] public void CreateCorrectiveActionFollowUpApprovalDbErrorShouldThrowException() { _mockDalService.Setup(d => d.ExecuteAsync(It.IsAny())).Throws(new Exception()); _caService = new CorrectiveActionService(_mockLogger.Object, _mockDalService.Object); Assert.ThrowsAsync(async Task () => await _caService.CreateCorrectiveActionFollowUpApproval(5, 5)); } [Test] public async Task CreateCorrectiveActionFollowUpApprovalShouldExecuteSql() { _caService = new CorrectiveActionService(_mockLogger.Object, _mockDalService.Object); await _caService.CreateCorrectiveActionFollowUpApproval(5, 5); _mockDalService.Verify(d => d.ExecuteAsync(It.IsAny()), Times.Once()); } }