public ObjectResult ApiAttackPost(int boardId, BlockToAttackRequest blockToAttack)
        {
            var requestlogger = string.Format(
                "Start - Request for attack on board {0} and block number {1}",
                boardId,
                blockToAttack.Number);

            logger.LogDebug($"Start - {requestlogger}");

            ObjectResult result = null;

            var block = new Block
            {
                BoardId = boardId,
                Number  = blockToAttack.Number
            };
            // prep board to ask question
            var board = boardRepo.Get(boardId);
            // ask board whether given block can be attacked
            var attackResult = board.CanAttackBlock(block);

            // if attack is successful save the entity in database
            if (attackResult.Status == true)
            {
                var blockUnderAttack =
                    board.Blocks.First(b => b.Number == blockToAttack.Number);
                var attack = new Attack
                {
                    BlockId = blockUnderAttack.Id
                };
                attackRepo.Create(attack);
                result = CreatedAtAction(nameof(ApiAttackGet),
                                         new { boardId, id = attack.Id }, attackResult);
            }
            else
            {
                // 404
                result = new BadRequestObjectResult(attackResult);
            }

            logger.LogDebug($"End - {requestlogger}");

            return(result);
        }
Example #2
0
        public void ReturnCreatedAtResult()
        {
            //arrange
            var blockToAttack = new BlockToAttackRequest
            {
                Number = 1
            };
            var moqAttackRepo = new Mock <IAttackRepo>();

            moqAttackRepo.Setup(repo => repo.Create(It.IsAny <Attack>()));
            var fakeAttackRepo = moqAttackRepo.Object;
            var controller     = new AttackController(
                fakeBoardRepo, fakeAttackRepo, fakeLogger);

            //act
            var response = controller.ApiAttackPost(Helper.FAKE_BOARD_ID, blockToAttack);

            //assert
            Assert.AreEqual((int)HttpStatusCode.Created, response.StatusCode);
        }