public async Task BoardService_FindWithTasksAsync_InputInvalid_Should_ReturnNull()
        {
            var mockUnitOfWork      = new Mock <IUnitOfWork>();
            var mockBoardRepository = new MockBoardRepository().MockFindByIdWithTasksAsyncInvalid();

            var boardService = new BoardService(mockBoardRepository.Object, mockUnitOfWork.Object);

            var results = await boardService.FindWithTasksAsync(1);

            Assert.IsNull(results);
            mockBoardRepository.VerifyFindByIdWithTasksAsync(Times.Once());
        }
        public async Task BoardService_FindAsync_Should_ReturnBoard()
        {
            var mockUnitOfWork      = new Mock <IUnitOfWork>();
            var mockBoardRepository = new MockBoardRepository().MockFindAsync(Task.FromResult(Generics.Board));

            var boardService = new BoardService(mockBoardRepository.Object, mockUnitOfWork.Object);

            var results = await boardService.FindAsync(1);

            Assert.IsNotNull(results);
            mockBoardRepository.VerifyFindAsync(Times.Once());
        }
        public async Task BoardService_SaveAsync_Should_ReturnBoard()
        {
            var mockUnitOfWork      = new Mock <IUnitOfWork>();
            var mockBoardRepository = new MockBoardRepository().MockAddAsync(Task.FromResult(Generics.Board));

            var boardService = new BoardService(mockBoardRepository.Object, mockUnitOfWork.Object);

            var results = await boardService.SaveAsync(Generics.Board);

            Assert.IsNotNull(results);
            Assert.IsTrue(results.Success);
            Assert.IsInstanceOfType(results.Board, typeof(Domain.Models.Board));
            mockBoardRepository.VerifyAddAsync(Times.Once());
        }
        public async Task BoardService_SaveAsync_InputInvalid_Should_ReturnBadResponse()
        {
            var mockUnitOfWork      = new Mock <IUnitOfWork>();
            var mockBoardRepository = new MockBoardRepository().MockAddAsyncInvalid();

            var boardService = new BoardService(mockBoardRepository.Object, mockUnitOfWork.Object);

            var results = await boardService.SaveAsync(Generics.Board);

            Assert.IsNotNull(results);
            Assert.IsNull(results.Board);
            Assert.IsFalse(results.Success);
            Assert.IsTrue(results.Message.Contains("An error occurred when saving this board:"));
            mockBoardRepository.VerifyAddAsync(Times.Once());
        }
        public async Task BoardService_ListAsync_Should_ReturnEmptyList()
        {
            var boards = new List <Domain.Models.Board> {
            };

            var mockUnitOfWork      = new Mock <IUnitOfWork>();
            var mockBoardRepository = new MockBoardRepository().MockListAsync(boards);

            var boardService = new BoardService(mockBoardRepository.Object, mockUnitOfWork.Object);

            var results = await boardService.ListAsync();

            Assert.IsNotNull(results);
            Assert.IsTrue(results.Count() == 0);
            mockBoardRepository.VerifyListAsync(Times.Once());
        }
        public async Task BoardService_DeleteAsync_Should_DeleteFromRepository()
        {
            var mockUnitOfWork      = new Mock <IUnitOfWork>();
            var mockBoardRepository = new MockBoardRepository()
                                      .MockFindAsync(Task.FromResult(Generics.Board))
                                      .MockRemove();

            var BoardService = new BoardService(mockBoardRepository.Object, mockUnitOfWork.Object);

            var results = await BoardService.DeleteAsync(1);

            Assert.IsNotNull(results);
            Assert.IsTrue(results.Success);
            Assert.IsInstanceOfType(results.Board, typeof(Domain.Models.Board));
            mockBoardRepository.VerifyFindAsync(Times.Once());
            mockBoardRepository.VerifyRemove(Times.Once());
        }
        public async Task BoardService_DeleteAsync_InputInvalid_Should_DeleteFromRepository()
        {
            var mockUnitOfWork      = new Mock <IUnitOfWork>();
            var mockBoardRepository = new MockBoardRepository()
                                      .MockFindAsync(Task.FromResult(Generics.Board))
                                      .MockRemoveInvalid();

            var BoardService = new BoardService(mockBoardRepository.Object, mockUnitOfWork.Object);

            var results = await BoardService.DeleteAsync(1);

            Assert.IsNotNull(results);
            Assert.IsNull(results.Board);
            Assert.IsFalse(results.Success);
            Assert.IsTrue(results.Message.Contains("An error occurred when deleting the board:"));
            mockBoardRepository.VerifyFindAsync(Times.Once());
            mockBoardRepository.VerifyRemove(Times.Once());
        }
        public async Task BoardService_DeleteAsync_InputNotFound_Should_DeleteFromRepository()
        {
            var mockUnitOfWork      = new Mock <IUnitOfWork>();
            var mockBoardRepository = new MockBoardRepository()
                                      .MockFindAsyncInvalid()
                                      .MockRemove();

            var BoardService = new BoardService(mockBoardRepository.Object, mockUnitOfWork.Object);

            var results = await BoardService.DeleteAsync(1);

            Assert.IsNotNull(results);
            Assert.IsNull(results.Board);
            Assert.IsFalse(results.Success);
            Assert.IsTrue(results.Message == Generics.BoardResponseNotFound);
            mockBoardRepository.VerifyFindAsync(Times.Once());
            mockBoardRepository.VerifyRemove(Times.Never());
        }