2024-04-10 10:23:54 -07:00

290 lines
9.8 KiB
C#

using FabApprovalWorkerService.Models;
using FabApprovalWorkerService.Services;
using Microsoft.Extensions.Logging;
using Moq;
namespace FabApprovalWorkerServiceTests;
internal class ECNServiceTests {
Mock<ILogger<ECNService>> _mockLogger;
Mock<IDalService> _mockDalService;
ECNService _ecnService;
[SetUp]
public void Setup() {
_mockLogger = new Mock<ILogger<ECNService>>();
_mockDalService = new Mock<IDalService>();
}
[Test]
public void EcnServiceWithNullLoggerShouldThrowException() {
Assert.Throws<ArgumentNullException>(() => new ECNService(null, _mockDalService.Object));
}
[Test]
public void EcnServiceWithNullDalServiceShouldThrowException() {
Assert.Throws<ArgumentNullException>(() => new ECNService(_mockLogger.Object, null));
}
[Test]
public void GetExpiringTECNsWithDbErrorShouldThrowException() {
_mockDalService.Setup(d => d.QueryAsync<ECN>(It.IsAny<string>())).ThrowsAsync(new Exception());
_ecnService = new ECNService(_mockLogger.Object, _mockDalService.Object);
Assert.ThrowsAsync<Exception>(async Task () => await _ecnService.GetExpiringTECNs());
}
[Test]
public void GetExpiredTECNsWithDbErrorShouldThrowException() {
_mockDalService.Setup(d => d.QueryAsync<ECN>(It.IsAny<string>())).ThrowsAsync(new Exception());
_ecnService = new ECNService(_mockLogger.Object, _mockDalService.Object);
Assert.ThrowsAsync<Exception>(async Task () => await _ecnService.GetExpiredTECNs());
}
[Test]
public async Task GetExpiringTECNsWithNoResultsFromDbShouldReturnEmpty() {
IEnumerable<ECN> emptyEcns = new List<ECN>();
_mockDalService.Setup(d => d.QueryAsync<ECN>(It.IsAny<string>())).Returns(Task.FromResult(emptyEcns));
_ecnService = new ECNService(_mockLogger.Object, _mockDalService.Object);
IEnumerable<ECN> actual = await _ecnService.GetExpiringTECNs();
Assert.That(actual, Is.Empty);
}
[Test]
public async Task GetExpiredTECNsWithNoResultsFromDbShouldReturnEmpty() {
IEnumerable<ECN> emptyEcns = new List<ECN>();
_mockDalService.Setup(d => d.QueryAsync<ECN>(It.IsAny<string>())).Returns(Task.FromResult(emptyEcns));
_ecnService = new ECNService(_mockLogger.Object, _mockDalService.Object);
IEnumerable<ECN> actual = await _ecnService.GetExpiredTECNs();
Assert.That(actual, Is.Empty);
}
[Test]
public async Task GetExpiringTECNsWithNoExtensionFromDbShouldReturnSameResults() {
IEnumerable<ECN> ecns = new List<ECN>() {
new ECN() {
ECNNumber = 1,
OriginatorID = 1,
Title = "title1",
IsTECN = true,
ExpirationDate = DateTime.Now.AddDays(1)
},
new ECN() {
ECNNumber = 2,
OriginatorID = 1,
Title = "title2",
IsTECN = true,
ExpirationDate = DateTime.Now.AddDays(2)
},
new ECN() {
ECNNumber = 3,
OriginatorID = 1,
Title = "title3",
IsTECN = true,
ExpirationDate = DateTime.Now.AddDays(3)
},
};
_mockDalService.Setup(d => d.QueryAsync<ECN>(It.IsAny<string>())).Returns(Task.FromResult(ecns));
_ecnService = new ECNService(_mockLogger.Object, _mockDalService.Object);
IEnumerable<ECN> actual = await _ecnService.GetExpiringTECNs();
Assert.That(actual.Count(), Is.EqualTo(3));
}
[Test]
public async Task GetExpiredTECNsWithNoExtensionFromDbShouldReturnSameResults() {
IEnumerable<ECN> ecns = new List<ECN>() {
new ECN() {
ECNNumber = 1,
OriginatorID = 1,
Title = "title1",
IsTECN = true,
ExpirationDate = DateTime.Now.Date.AddHours(2)
},
new ECN() {
ECNNumber = 2,
OriginatorID = 1,
Title = "title2",
IsTECN = true,
ExpirationDate = DateTime.Now.Date.AddHours(20)
},
new ECN() {
ECNNumber = 3,
OriginatorID = 1,
Title = "title3",
IsTECN = true,
ExpirationDate = DateTime.Now.Date.AddHours(12)
},
};
_mockDalService.Setup(d => d.QueryAsync<ECN>(It.IsAny<string>())).Returns(Task.FromResult(ecns));
_ecnService = new ECNService(_mockLogger.Object, _mockDalService.Object);
IEnumerable<ECN> actual = await _ecnService.GetExpiredTECNs();
Assert.That(actual.Count(), Is.EqualTo(3));
}
[Test]
public async Task GetExpiringTECNsWithExtensionsFromDbShouldReturnSameResults() {
IEnumerable<ECN> ecns = new List<ECN>() {
new ECN() {
ECNNumber = 1,
OriginatorID = 1,
Title = "title1",
IsTECN = true,
ExpirationDate = DateTime.Now.AddDays(1)
},
new ECN() {
ECNNumber = 2,
OriginatorID = 1,
Title = "title2",
IsTECN = true,
ExpirationDate = DateTime.Now.AddDays(2)
},
new ECN() {
ECNNumber = 3,
OriginatorID = 1,
Title = "title3",
IsTECN = true,
ExpirationDate = DateTime.Now.AddDays(3),
ExtensionDate = DateTime.Now.AddDays(10)
},
};
_mockDalService.Setup(d => d.QueryAsync<ECN>(It.IsAny<string>())).Returns(Task.FromResult(ecns));
_ecnService = new ECNService(_mockLogger.Object, _mockDalService.Object);
IEnumerable<ECN> actual = await _ecnService.GetExpiringTECNs();
Assert.That(actual.Count(), Is.EqualTo(2));
}
[Test]
public async Task GetExpiredTECNsWithExtensionsFromDbShouldReturnSameResults() {
IEnumerable<ECN> ecns = new List<ECN>() {
new ECN() {
ECNNumber = 1,
OriginatorID = 1,
Title = "title1",
IsTECN = true,
ExpirationDate = DateTime.Now.Date.AddHours(2)
},
new ECN() {
ECNNumber = 2,
OriginatorID = 1,
Title = "title2",
IsTECN = true,
ExpirationDate = DateTime.Now.Date.AddHours(20)
},
new ECN() {
ECNNumber = 3,
OriginatorID = 1,
Title = "title3",
IsTECN = true,
ExpirationDate = DateTime.Now.Date.AddHours(12),
ExtensionDate = DateTime.Now.Date.AddDays(10)
},
};
_mockDalService.Setup(d => d.QueryAsync<ECN>(It.IsAny<string>())).Returns(Task.FromResult(ecns));
_ecnService = new ECNService(_mockLogger.Object, _mockDalService.Object);
IEnumerable<ECN> actual = await _ecnService.GetExpiredTECNs();
Assert.That(actual.Count(), Is.EqualTo(2));
}
[Test]
public void GetTECNNotificationUserEmailsDbErrorShouldThrowException() {
_mockDalService.Setup(d => d.QueryAsync<string>(It.IsAny<string>())).Throws(new Exception());
_ecnService = new ECNService(_mockLogger.Object, _mockDalService.Object);
Assert.ThrowsAsync<Exception>(async Task () => await _ecnService.GetTECNNotificationUserEmails());
}
[Test]
public async Task GetTECNNotificationUserEmailsShouldReturnExpectedUserEmails() {
IEnumerable<string> userEmails = new List<string>() {
"fake1@email.com",
"fake2@email.com"
};
_mockDalService.Setup(d => d.QueryAsync<string>(It.IsAny<string>())).Returns(Task.FromResult(userEmails));
_ecnService = new ECNService(_mockLogger.Object, _mockDalService.Object);
IEnumerable<string> actualEmails = await _ecnService.GetTECNNotificationUserEmails();
Assert.That(actualEmails.Count(), Is.EqualTo(2));
}
[Test]
public void GetEcnByNumberWithInvalidNumberShouldThrowException() {
_ecnService = new ECNService(_mockLogger.Object, _mockDalService.Object);
Assert.ThrowsAsync<ArgumentException>(async Task () => await _ecnService.GetEcnByNumber(0));
Assert.ThrowsAsync<ArgumentException>(async Task () => await _ecnService.GetEcnByNumber(-4));
}
[Test]
public void GetEcnByNumberDbErrorShouldThrowException() {
_mockDalService.Setup(d => d.QueryAsync<ECN>(It.IsAny<string>())).Throws(new Exception());
_ecnService = new ECNService(_mockLogger.Object, _mockDalService.Object);
Assert.ThrowsAsync<Exception>(async Task () => await _ecnService.GetEcnByNumber(2));
}
[Test]
public void GetEcnByNumberEcnNotFoundShouldThrowException() {
IEnumerable<ECN> expectedEcns = new List<ECN>();
_mockDalService.Setup(d => d.QueryAsync<ECN>(It.IsAny<string>())).Returns(Task.FromResult(expectedEcns));
_ecnService = new ECNService(_mockLogger.Object, _mockDalService.Object);
Assert.ThrowsAsync<Exception>(async Task () => await _ecnService.GetEcnByNumber(8));
}
[Test]
public async Task GetEcnByNumberShouldReturnExpectedEcn() {
IEnumerable<ECN> expectedEcns = new List<ECN>() {
new ECN() {
ECNNumber = 1,
OriginatorID = 1,
Title = "title"
}
};
_mockDalService.Setup(d => d.QueryAsync<ECN>(It.IsAny<string>())).Returns(Task.FromResult(expectedEcns));
_ecnService = new ECNService(_mockLogger.Object, _mockDalService.Object);
ECN actualEcn = await _ecnService.GetEcnByNumber(9);
Assert.That(expectedEcns.First(), Is.EqualTo(actualEcn));
}
}