コード例 #1
0
        public void Valid_King_Movement_Should_Satisfy()
        {
            Piece whiteKing = Piece.Create(PieceType.King, PieceColor.White);
            Piece blackKing = Piece.Create(PieceType.King, PieceColor.Black);

            ISpecification <PieceMovement> specification = MovementValidator.ResolveSpecification(_board, PieceType.King);

            Assert.IsTrue(
                specification.IsSatisfied(PieceMovement.Create(whiteKing, Position.Create("E1"), Position.Create("E2")))
                );
            Assert.IsTrue(
                specification.IsSatisfied(PieceMovement.Create(whiteKing, Position.Create("E1"), Position.Create("F1")))
                );
            Assert.IsTrue(
                specification.IsSatisfied(PieceMovement.Create(whiteKing, Position.Create("E1"), Position.Create("D2")))
                );

            Assert.IsTrue(
                specification.IsSatisfied(PieceMovement.Create(blackKing, Position.Create("E8"), Position.Create("E7")))
                );
            Assert.IsTrue(
                specification.IsSatisfied(PieceMovement.Create(blackKing, Position.Create("E8"), Position.Create("F8")))
                );
            Assert.IsTrue(
                specification.IsSatisfied(PieceMovement.Create(blackKing, Position.Create("E8"), Position.Create("F7")))
                );
        }
コード例 #2
0
        public async Task <Guid> Handle(CreateMovementCommand command,
                                        CancellationToken cancellationToken)
        {
            if (await _userRepository.Get(command.UserId) is var user && user is null)
            {
                throw new Exception("Invalid user");
            }

            if (await _accountRepository.Get(command.AccountId) is var account && account is null)
            {
                throw new Exception("Invalid account");
            }

            var movement = new Movement(command.Value, command.Description, (EMovementCategory)command.Category,
                                        (EMovementType)command.Type, command.AccountId, command.UserId);

            var movementValidator = new MovementValidator();
            var result            = await movementValidator.ValidateAsync(movement, default);

            if (!result.IsValid)
            {
                throw new Exception(String.Join("--", result.Errors));
            }

            var balance = await _transactionService.CreateOrUpdateBalance(movement);

            return(balance.Id);
        }
コード例 #3
0
        public void Valid_Queen_Movement_Should_Satisfy()
        {
            Piece whiteQueen = Piece.Create(PieceType.Queen, PieceColor.White);
            Piece blackQueen = Piece.Create(PieceType.Queen, PieceColor.Black);

            ISpecification <PieceMovement> specification = specification = MovementValidator.ResolveSpecification(_board, PieceType.Queen);

            Assert.IsTrue(
                specification.IsSatisfied(PieceMovement.Create(whiteQueen, Position.Create("D1"), Position.Create("H1")))
                );
            Assert.IsTrue(
                specification.IsSatisfied(PieceMovement.Create(whiteQueen, Position.Create("D1"), Position.Create("D8")))
                );
            Assert.IsTrue(
                specification.IsSatisfied(PieceMovement.Create(whiteQueen, Position.Create("D1"), Position.Create("G4")))
                );

            Assert.IsTrue(
                specification.IsSatisfied(PieceMovement.Create(blackQueen, Position.Create("D8"), Position.Create("A8")))
                );
            Assert.IsTrue(
                specification.IsSatisfied(PieceMovement.Create(blackQueen, Position.Create("D8"), Position.Create("D3")))
                );
            Assert.IsTrue(
                specification.IsSatisfied(PieceMovement.Create(blackQueen, Position.Create("D8"), Position.Create("H4")))
                );
        }
コード例 #4
0
        public void DoClientAttemptPieceMove(IPiece piece, ISquare targetSquare)
        {
            //
            Piece  p = _pieces[piece.id];
            Square s = _board.Data.Squares[targetSquare.id];

            // Gather move data
            MoveData moveData = new MoveData
            {
                Board  = _board.Data,
                Piece  = p,
                Square = s
            };

            // Send result to client simulation
            MoveResultData result = MovementValidator.MoveIsValid(moveData);

            if (result.Success)
            {
                p.Data.CurrentSquare.Data.CurrentPiece = null;
                p.Data.CurrentSquare = s;
                s.Data.CurrentPiece  = p;
            }

            _gameClient.DoPieceMoveValidationResult(result);
        }
コード例 #5
0
        public bool IsSatisfied(PieceMovement candidate)
        {
            var isMovementAllowedSpecification  = MovementValidator.ResolveSpecification(_board, candidate.Piece.Type);
            var isLandableMovementSpecification = LandableMovementSpecification.Create(_board);

            return(SpecificationEvaluator.And(candidate,
                                              isMovementAllowedSpecification,
                                              isLandableMovementSpecification));
        }
コード例 #6
0
        public void Diagonal_Pawn_Movement_Should_Not_Satisfy()
        {
            Piece whitePawn = Piece.Create(PieceType.Pawn, PieceColor.White);

            _board.AddPiece(whitePawn, "D4");

            ISpecification <PieceMovement> specification = specification = MovementValidator.ResolveSpecification(_board, PieceType.Pawn);

            Assert.IsFalse(
                specification.IsSatisfied(PieceMovement.Create(whitePawn, Position.Create("D4"), Position.Create("C5")))
                );
        }
コード例 #7
0
        public void Inalid_Rook_Movement_Should_Not_Satisfy()
        {
            Piece whiteRook = Piece.Create(PieceType.Rook, PieceColor.White);
            Piece blackRook = Piece.Create(PieceType.Rook, PieceColor.Black);

            ISpecification <PieceMovement> specification = specification = MovementValidator.ResolveSpecification(_board, PieceType.Rook);

            Assert.IsFalse(
                specification.IsSatisfied(PieceMovement.Create(whiteRook, Position.Create("A1"), Position.Create("C3")))
                );

            Assert.IsFalse(
                specification.IsSatisfied(PieceMovement.Create(blackRook, Position.Create("A8"), Position.Create("C6")))
                );
        }
コード例 #8
0
        public void NotInitial_Valid_Pawn_Movement_Should_Satisfy()
        {
            Piece whitePawn = Piece.Create(PieceType.Pawn, PieceColor.White);
            Piece blackPawn = Piece.Create(PieceType.Pawn, PieceColor.Black);

            whitePawn.Moved();
            blackPawn.Moved();

            ISpecification <PieceMovement> specification = specification = MovementValidator.ResolveSpecification(_board, PieceType.Pawn);

            Assert.IsTrue(
                specification.IsSatisfied(PieceMovement.Create(whitePawn, Position.Create("A2"), Position.Create("A3")))
                );
            Assert.IsTrue(
                specification.IsSatisfied(PieceMovement.Create(blackPawn, Position.Create("A7"), Position.Create("A6")))
                );
        }
コード例 #9
0
        public void Initial_Invalid_Pawn_Movement_Should_Not_Satisfy()
        {
            Piece whitePawn = Piece.Create(PieceType.Pawn, PieceColor.White);
            Piece blackPawn = Piece.Create(PieceType.Pawn, PieceColor.Black);

            ISpecification <PieceMovement> specification = specification = MovementValidator.ResolveSpecification(_board, PieceType.Pawn);

            Assert.IsFalse(
                specification.IsSatisfied(PieceMovement.Create(whitePawn, Position.Create("A2"), Position.Create("A5")))
                );
            Assert.IsFalse(
                specification.IsSatisfied(PieceMovement.Create(whitePawn, Position.Create("A2"), Position.Create("A1")))
                );

            Assert.IsFalse(
                specification.IsSatisfied(PieceMovement.Create(blackPawn, Position.Create("A7"), Position.Create("A4")))
                );
            Assert.IsFalse(
                specification.IsSatisfied(PieceMovement.Create(blackPawn, Position.Create("A7"), Position.Create("A8")))
                );
        }
コード例 #10
0
        public async Task <Guid> Handle(EditMovementCommand command, CancellationToken cancellationToken)
        {
            var movement = await _expenseRepository.Get(command.MovementId);

            movement.SetCategory((EMovementCategory)command.Category);
            movement.SetValue(command.Value);
            movement.SetDescription(command.Description);
            movement.SetMovementType((EMovementType)command.Type);

            var movementValidatorValidator = new MovementValidator();
            var result = await movementValidatorValidator.ValidateAsync(movement, default);

            if (!result.IsValid)
            {
                throw new Exception(String.Join("--", result.Errors));
            }

            await _expenseRepository.Update(movement.Id, movement);

            return(movement.Id);
        }
コード例 #11
0
        public void Inalid_King_Movement_Should_Not_Satisfy()
        {
            Piece whiteKing = Piece.Create(PieceType.King, PieceColor.White);
            Piece blackKing = Piece.Create(PieceType.King, PieceColor.Black);

            ISpecification <PieceMovement> specification = specification = MovementValidator.ResolveSpecification(_board, PieceType.King);

            Assert.IsFalse(
                specification.IsSatisfied(PieceMovement.Create(whiteKing, Position.Create("E1"), Position.Create("E3")))
                );

            Assert.IsFalse(
                specification.IsSatisfied(PieceMovement.Create(whiteKing, Position.Create("E1"), Position.Create("H1")))
                );

            Assert.IsFalse(
                specification.IsSatisfied(PieceMovement.Create(blackKing, Position.Create("E8"), Position.Create("G6")))
                );
            Assert.IsFalse(
                specification.IsSatisfied(PieceMovement.Create(blackKing, Position.Create("E8"), Position.Create("E1")))
                );
        }
コード例 #12
0
        public void Inalid_Knight_Movement_Should_Not_Satisfy()
        {
            Piece whiteKnight = Piece.Create(PieceType.Knight, PieceColor.White);
            Piece blackKnight = Piece.Create(PieceType.Knight, PieceColor.Black);

            ISpecification <PieceMovement> specification = specification = MovementValidator.ResolveSpecification(_board, PieceType.Knight);

            Assert.IsFalse(
                specification.IsSatisfied(PieceMovement.Create(whiteKnight, Position.Create("B1"), Position.Create("B3")))
                );

            Assert.IsFalse(
                specification.IsSatisfied(PieceMovement.Create(whiteKnight, Position.Create("B1"), Position.Create("C2")))
                );

            Assert.IsFalse(
                specification.IsSatisfied(PieceMovement.Create(blackKnight, Position.Create("B8"), Position.Create("B5")))
                );
            Assert.IsFalse(
                specification.IsSatisfied(PieceMovement.Create(blackKnight, Position.Create("B8"), Position.Create("D8")))
                );
        }
コード例 #13
0
        public void Inalid_Bishop_Movement_Should_Not_Satisfy()
        {
            Piece whiteBishop = Piece.Create(PieceType.Bishop, PieceColor.White);
            Piece blackBishop = Piece.Create(PieceType.Bishop, PieceColor.Black);

            ISpecification <PieceMovement> specification = specification = MovementValidator.ResolveSpecification(_board, PieceType.Bishop);

            Assert.IsFalse(
                specification.IsSatisfied(PieceMovement.Create(whiteBishop, Position.Create("C1"), Position.Create("C3")))
                );

            Assert.IsFalse(
                specification.IsSatisfied(PieceMovement.Create(whiteBishop, Position.Create("C1"), Position.Create("H1")))
                );

            Assert.IsFalse(
                specification.IsSatisfied(PieceMovement.Create(blackBishop, Position.Create("C8"), Position.Create("D6")))
                );
            Assert.IsFalse(
                specification.IsSatisfied(PieceMovement.Create(blackBishop, Position.Create("C8"), Position.Create("A8")))
                );
        }