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

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

            var command = new UpdateBoardColumnCommand
            {
                BoardSlug = "board-name",
                BoardColumnSlug = "board-column-name",
                BoardColumn = new BoardColumn()
            };

            // Act
            await handler.HandleAsync(command);

            // Assert
            mockDataContext.Verify(x => x.SetModified(boardColumnEntity), Times.Once);
            mockDataContext.Verify(x => x.SaveChangesAsync(), 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));
        }
        public async void GivenABoardTaskWhenOkThenBoardColumnAddedToBoardTask()
        {
            // Arrange
            var boardColumnEntity = new BoardColumnEntity {Slug = "board-column-name"};
            SetupCommandHandler(new List<BoardEntity>
            {
                new BoardEntity
                {
                    Slug = "board-name",
                    Columns = new List<BoardColumnEntity>
                    {
                        boardColumnEntity
                    }
                }
            });

            var command = new CreateBoardTaskCommand
            {
                BoardSlug = "board-name",
                BoardTask = new BoardTask
                {
                    BoardColumnSlug = "board-column-name",
                    Name = "test task"
                }
            };

            mockMappingService.Setup(x => x.Map<BoardTaskEntity>(It.IsAny<BoardTask>()))
                .Returns(new BoardTaskEntity());

            // Act
            await handler.HandleAsync(command);

            // Assert
            Assert.Equal(boardColumnEntity,
                mockDataContext.Object.Set<BoardTaskEntity>().Local.First().BoardColumnEntity);
        }
        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 GivenCommandWhenTaskExistsThenMappedBackToDto()
        {
            // Arrange
            var boardEntity = new BoardEntity { Slug = "board-name" };
            var boardColumnEntity = new BoardColumnEntity
            {
                Slug = "board-column-name",
                BoardEntity = boardEntity
            };

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

            var command = new UpdateBoardColumnCommand
            {
                BoardSlug = "board-name",
                BoardColumnSlug = "board-column-name",
                BoardColumn = new BoardColumn()
            };

            // Act
            await handler.HandleAsync(command);

            // Assert
            mockMappingService.Verify(x => x.Map<BoardColumn>(It.IsAny<BoardColumnEntity>()), Times.Once);
        }