public async void GivenCommandWhenBoardColumnHasTasksThenBoardColumnNotEmptyExceptionThrown()
        {
            // Arrange
            var boardEntity = new BoardEntity {
                Slug = "board-name"
            };
            var boardColumnEntity = new BoardColumnEntity {
                Id = 1, Slug = "board-column-name", BoardEntity = boardEntity
            };

            SetupHandler(new List <BoardEntity> {
                boardEntity
            }, new List <BoardColumnEntity>
            {
                boardColumnEntity
            }, new List <BoardTaskEntity>
            {
                new BoardTaskEntity {
                    BoardColumnEntity = boardColumnEntity
                }
            });

            var command = new DeleteBoardColumnCommand
            {
                BoardSlug       = "board-name",
                BoardColumnSlug = "board-column-name"
            };

            // Act & Assert
            await Assert.ThrowsAsync <BoardColumnNotEmptyException>(() => handler.HandleAsync(command));
        }
        public async void GivenCommandWhenBoardColumnExisttsAndIsEmptyThenBoardColumnRemovedAndSaveChangesCalled()
        {
            // Arrange
            var boardEntity = new BoardEntity {
                Slug = "board-name"
            };
            var boardColumnEntity = new BoardColumnEntity {
                Id = 1, Slug = "board-column-name", BoardEntity = boardEntity
            };

            SetupHandler(new List <BoardEntity> {
                boardEntity
            }, new List <BoardColumnEntity>
            {
                boardColumnEntity
            }, new List <BoardTaskEntity>());

            var command = new DeleteBoardColumnCommand
            {
                BoardSlug       = "board-name",
                BoardColumnSlug = "board-column-name"
            };

            // Act
            await handler.HandleAsync(command);

            // Assert
            mockDataContext.Verify(x => x.SaveChangesAsync(), Times.Once());
            mockDataContext.Verify(x => x.Delete(boardColumnEntity), Times.Once());
        }
        public async void GivenCommandWhenBoardDoesNotExistThenBoardNotFoundExceptionThrown()
        {
            // Arrange
            SetupHandler(new List <BoardEntity>(), new List <BoardColumnEntity>(), new List <BoardTaskEntity>());
            var command = new DeleteBoardColumnCommand
            {
                BoardSlug       = "board-name",
                BoardColumnSlug = "board-column-name"
            };

            // Act & Assert
            await Assert.ThrowsAsync <BoardNotFoundException>(() => handler.HandleAsync(command));
        }
        public async void GivenCommandWhenBoardDoesNotExistThenBoardNotFoundExceptionThrown()
        {
            // Arrange
            SetupHandler(new List<BoardEntity>(), new List<BoardColumnEntity>(), new List<BoardTaskEntity>());
            var command = new DeleteBoardColumnCommand
            {
                BoardSlug = "board-name",
                BoardColumnSlug = "board-column-name"
            };

            // Act & Assert
            await Assert.ThrowsAsync<BoardNotFoundException>(() => handler.HandleAsync(command));
        }
        public async void GivenCommandWhenBoardColumnExisttsAndIsEmptyThenBoardColumnRemovedAndSaveChangesCalled()
        {
            // Arrange
            var boardEntity = new BoardEntity { Slug = "board-name" };
            var boardColumnEntity = new BoardColumnEntity { Id = 1, Slug = "board-column-name", BoardEntity = boardEntity };
            SetupHandler(new List<BoardEntity> { boardEntity }, new List<BoardColumnEntity>
            {
                boardColumnEntity
            }, new List<BoardTaskEntity>());

            var command = new DeleteBoardColumnCommand
            {
                BoardSlug = "board-name",
                BoardColumnSlug = "board-column-name"
            };

            // Act
            await handler.HandleAsync(command);

            // Assert
            mockDataContext.Verify(x => x.SaveChangesAsync(), Times.Once());
            mockDataContext.Verify(x => x.Delete(boardColumnEntity), Times.Once());
        }
        public async void GivenCommandWhenBoardColumnHasTasksThenBoardColumnNotEmptyExceptionThrown()
        {
            // Arrange
            var boardEntity = new BoardEntity {Slug = "board-name"};
            var boardColumnEntity = new BoardColumnEntity { Id = 1, Slug = "board-column-name", BoardEntity = boardEntity };
            SetupHandler(new List<BoardEntity> { boardEntity }, new List<BoardColumnEntity>
            {
                boardColumnEntity
            }, new List<BoardTaskEntity>
            {
                new BoardTaskEntity {BoardColumnEntity = boardColumnEntity}
            });

            var command = new DeleteBoardColumnCommand
            {
                BoardSlug = "board-name",
                BoardColumnSlug = "board-column-name"
            };

            // Act & Assert
            await Assert.ThrowsAsync<BoardColumnNotEmptyException>(() => handler.HandleAsync(command));
        }