using System; using System.Threading.Tasks; using MesaFabApproval.API.Services; using MesaFabApproval.Shared.Models; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Logging; using Moq; using Xunit; namespace MesaFabApproval.API.Test; public class ApprovalServiceTests { private readonly Mock> _loggerMock; private readonly Mock _cacheMock; private readonly Mock _dalServiceMock; private readonly Mock _userServiceMock; private readonly ApprovalService _approvalService; public ApprovalServiceTests() { _loggerMock = new Mock>(); _cacheMock = new Mock(); _dalServiceMock = new Mock(); _userServiceMock = new Mock(); _approvalService = new ApprovalService(_loggerMock.Object, _cacheMock.Object, _dalServiceMock.Object, _userServiceMock.Object); } [Fact] public async Task DeleteApproval_ValidApprovalID_DeletesApproval() { int approvalID = 1; _dalServiceMock.Setup(d => d.ExecuteAsync(It.IsAny(), It.IsAny())).ReturnsAsync(1); await _approvalService.DeleteApproval(approvalID); _dalServiceMock.Verify(d => d.ExecuteAsync(It.IsAny(), It.IsAny()), Times.Once); } [Fact] public async Task DeleteApproval_InvalidApprovalID_ThrowsArgumentException() { int approvalID = 0; await Assert.ThrowsAsync(() => _approvalService.DeleteApproval(approvalID)); } [Fact] public async Task DeleteApproval_DeletionFails_ThrowsException() { int approvalID = 1; _dalServiceMock.Setup(d => d.ExecuteAsync(It.IsAny(), It.IsAny())).ReturnsAsync(0); await Assert.ThrowsAsync(() => _approvalService.DeleteApproval(approvalID)); } }