using FabApprovalWorkerService.Services; using Microsoft.Extensions.Logging; using Moq; namespace FabApprovalWorkerServiceTests; public class TrainingServiceTests { private Mock> _mockLogger; private Mock _mockDalService; private TrainingService _trainingService; [SetUp] public void Setup() { _mockLogger = new Mock>(); _mockDalService = new Mock(); } [Test] public void TrainingServiceWithNullLoggerShouldThrowException() { Assert.Throws(() => new TrainingService(null, _mockDalService.Object)); } [Test] public void TrainingServiceWithNullDalServiceShouldThrowException() { Assert.Throws(() => new TrainingService(_mockLogger.Object, null)); } [Test] public void DeleteDocAssignmentWithInvalidIdShouldThrowException() { _trainingService = new TrainingService(_mockLogger.Object, _mockDalService.Object); Assert.ThrowsAsync(async Task () => await _trainingService.DeleteDocAssignment(-1)); } [Test] public void DeleteDocAssignmentWithDbErrorShouldThrowException() { _mockDalService.Setup(d => d.ExecuteAsync(It.IsAny())).Throws(new Exception()); _trainingService = new TrainingService(_mockLogger.Object, _mockDalService.Object); Assert.ThrowsAsync(async Task () => await _trainingService.DeleteDocAssignment(1)); } [Test] public async Task DeleteDocAssignmentShouldExecuteSqlQuery() { _mockDalService.Setup(d => d.ExecuteAsync(It.IsAny())).Returns(Task.FromResult(3)); _trainingService = new TrainingService(_mockLogger.Object, _mockDalService.Object); await _trainingService.DeleteDocAssignment(3); _mockDalService.Verify(d => d.ExecuteAsync(It.IsAny())); } [Test] public void DeleteTrainingAssignmentWithInvalidIdShouldThrowException() { _trainingService = new TrainingService(_mockLogger.Object, _mockDalService.Object); Assert.ThrowsAsync(async Task () => await _trainingService.DeleteTrainingAssignment(-1)); } [Test] public void DeleteTrainingAssignmentWithDbErrorShouldThrowException() { _mockDalService.Setup(d => d.ExecuteAsync(It.IsAny())).Throws(new Exception()); _trainingService = new TrainingService(_mockLogger.Object, _mockDalService.Object); Assert.ThrowsAsync(async Task () => await _trainingService.DeleteTrainingAssignment(1)); } [Test] public async Task DeleteTrainingAssignmentShouldExecuteSqlQuery() { _mockDalService.Setup(d => d.ExecuteAsync(It.IsAny())).Returns(Task.FromResult(3)); _trainingService = new TrainingService(_mockLogger.Object, _mockDalService.Object); await _trainingService.DeleteTrainingAssignment(3); _mockDalService.Verify(d => d.ExecuteAsync(It.IsAny())); } [Test] public void GetTrainingAssignmentIdsForTrainingWithInvalidIdShouldThrowException() { _trainingService = new TrainingService(_mockLogger.Object, _mockDalService.Object); Assert.ThrowsAsync(async Task () => { IEnumerable ids = await _trainingService.GetTrainingAssignmentIdsForTraining(-1); }); } [Test] public void GetTrainingAssignmentIdsForTrainingWithDbErrorShouldThrowException() { _mockDalService.Setup(d => d.QueryAsync(It.IsAny())).Throws(new Exception()); _trainingService = new TrainingService(_mockLogger.Object, _mockDalService.Object); Assert.ThrowsAsync(async Task () => await _trainingService.GetTrainingAssignmentIdsForTraining(1)); } [Test] public async Task GetTrainingAssignmentIdsForTrainingShouldReturnExpectedIds() { IEnumerable expectedIds = new List() { 4, 7, 2 }; _mockDalService.Setup(d => d.QueryAsync(It.IsAny())).Returns(Task.FromResult(expectedIds)); _trainingService = new TrainingService(_mockLogger.Object, _mockDalService.Object); IEnumerable actualIds = await _trainingService.GetTrainingAssignmentIdsForTraining(1); Assert.That(actualIds.Count(), Is.EqualTo(expectedIds.Count())); } [Test] public void GetTrainingIdsForEcnWithInvalidIdShouldThrowException() { _trainingService = new TrainingService(_mockLogger.Object, _mockDalService.Object); Assert.ThrowsAsync(async Task () => { IEnumerable ids = await _trainingService.GetTrainingIdsForECN(-1); }); } [Test] public void GetTrainingIdsForEcnWithDbErrorShouldThrowException() { _mockDalService.Setup(d => d.QueryAsync(It.IsAny())).Throws(new Exception()); _trainingService = new TrainingService(_mockLogger.Object, _mockDalService.Object); Assert.ThrowsAsync(async Task () => await _trainingService.GetTrainingIdsForECN(1)); } [Test] public async Task GetTrainingIdsForEcnsShouldReturnExpectedIds() { IEnumerable expectedIds = new List() { 4, 7, 2 }; _mockDalService.Setup(d => d.QueryAsync(It.IsAny())).Returns(Task.FromResult(expectedIds)); _trainingService = new TrainingService(_mockLogger.Object, _mockDalService.Object); IEnumerable actualIds = await _trainingService.GetTrainingIdsForECN(1); Assert.That(actualIds.Count(), Is.EqualTo(expectedIds.Count())); } [Test] public void MarkTrainingAsCompleteWithInvalidIdShouldThrowException() { _trainingService = new TrainingService(_mockLogger.Object, _mockDalService.Object); Assert.ThrowsAsync(async Task() => await _trainingService.MarkTrainingAsComplete(-1)); } [Test] public void MarkTrainingCompleteWithDbErrorShouldThrowException() { _mockDalService.Setup(d => d.ExecuteAsync(It.IsAny())).Throws(new Exception()); _trainingService = new TrainingService(_mockLogger.Object, _mockDalService.Object); Assert.ThrowsAsync(async Task () => await _trainingService.MarkTrainingAsComplete(1)); } [Test] public async Task MarkTrainingCompleteShouldExecuteSql() { _mockDalService.Setup(d => d.ExecuteAsync(It.IsAny())).Returns(Task.FromResult(1)); _trainingService = new TrainingService(_mockLogger.Object, _mockDalService.Object); await _trainingService.MarkTrainingAsComplete(1); _mockDalService.Verify(d => d.ExecuteAsync(It.IsAny())); } }