public void WhenPlacingAPiece_ThenCallsWriter()
        {
            var spy = new BoardWriterSpy();
            var emptyBoardReaderStub = new EmptyBoardReaderStub();
            var placePiece           = new PlacePiece(spy, emptyBoardReaderStub);

            placePiece.Execute(0, 0);
            Assert.True(spy.Called);
        }
        public void MustIgnoreMoveOnExistingPiece(int x, int y)
        {
            var spy             = new BoardWriterSpy();
            var boardReaderStub = new PieceSetOriginBoardReaderStub(x, y);

            var placePiece = new PlacePiece(spy, boardReaderStub);

            placePiece.Execute(x, y);

            Assert.That(spy.LastBoard, Is.Null);
        }
        public void GivenAPieceHasBeenPlaced_WhenPlacingAPiece_ThenUpdatedBoardIncludesBothPieces()
        {
            var spy             = new BoardWriterSpy();
            var boardReaderStub = new PieceSetOriginBoardReaderStub();
            var placePiece      = new PlacePiece(spy, boardReaderStub);

            placePiece.Execute(1, 0);

            Assert.AreEqual(0, spy.LastBoard.PieceAt(0, 0));
            Assert.AreEqual(1, spy.LastBoard.PieceAt(1, 0));
        }
        public void WhenPlacingTheFirstPiece_ThenUpdatesBoard(
            int x, int y,
            int?expectedPieceType, int expectedX, int expectedY)
        {
            var spy = new BoardWriterSpy();
            var emptyBoardReaderStub = new EmptyBoardReaderStub();
            var placePiece           = new PlacePiece(spy, emptyBoardReaderStub);

            placePiece.Execute(x, y);
            Assert.AreEqual(expectedPieceType, spy.LastBoard.PieceAt(expectedX, expectedY));
        }
        public void DoesNotMutateTheBoard()
        {
            var spy             = new BoardWriterSpy();
            var boardReaderStub = new PieceSetOriginBoardReaderStub();
            var originalBoard   = boardReaderStub.Fetch();

            var placePiece = new PlacePiece(spy, boardReaderStub);

            placePiece.Execute(1, 0);

            Assert.IsNull(originalBoard.PieceAt(1, 0));
        }