public void ReturnStatusNotFound_WhenSubscriberDoesNotExist()
        {
            // Arrange
            var  tournamentRepositoryFake = new Mock <ITournamentRepository>();
            var  mapper = Helper.SetupMapper();
            Guid gameId = Guid.NewGuid();

            tournamentRepositoryFake.Setup(p => p.Get(It.IsAny <Guid>())).Returns(new Tournament {
                InplayGameId = gameId
            });
            tournamentRepositoryFake.Setup(p => p.GetGame(It.IsAny <Guid>(), It.IsAny <Guid>())).Returns(new Game {
                Id = gameId
            });
            tournamentRepositoryFake.Setup(p => p.GetSubscriber(It.IsAny <Guid>(), It.IsAny <Guid>())).Returns <Subscriber>(null);
            var gameLogicFake                      = new Mock <IGameLogic>();
            var tournamnetLogicFake                = new Mock <ITournamentLogic>();
            var tournamentBroadcastFake            = new Mock <ITournamentBroadcast>();
            var tournamentController               = new TournamentController(tournamentRepositoryFake.Object, mapper, gameLogicFake.Object, tournamnetLogicFake.Object, tournamentBroadcastFake.Object);
            AnswerAttemptUpdateModel answerAttempt = new AnswerAttemptUpdateModel {
                Answer = "myanswer"
            };

            // Act
            var actionResult = tournamentController.AddTournamentSubscriberGameAnswerAttempt(new Guid(), new Guid(), new Guid(), new Guid(), answerAttempt);

            // Assert
            Assert.IsType <NotFoundResult>(actionResult);
        }
        public void RecordSubsciberGameScore()
        {
            // Arrange
            var  tournamentRepositoryMock = new Mock <ITournamentRepository>();
            var  mapper = Helper.SetupMapper();
            Guid clueId = Guid.NewGuid();
            Guid gameId = Guid.NewGuid();

            tournamentRepositoryMock.Setup(p => p.Get(It.IsAny <Guid>())).Returns(new Tournament {
                InplayGameId = gameId
            });
            tournamentRepositoryMock.Setup(p => p.GetGame(It.IsAny <Guid>(), It.IsAny <Guid>())).Returns(
                new Game {
                Id    = gameId,
                Clues = new List <Clue>
                {
                    new Clue
                    {
                        Id = clueId
                    }
                }
            });
            tournamentRepositoryMock.Setup(p => p.GetSubscriber(It.IsAny <Guid>(), It.IsAny <Guid>())).Returns(new Subscriber());
            var gameLogicFake = new Mock <IGameLogic>();
            int score         = 0;
            int fakeScore     = 3;

            gameLogicFake.Setup(x => x.EvaluateSubscriberAnswer(It.IsAny <string>(), It.IsAny <Clue>(), out score))
            .Callback(new EvaluateSubscriberAnswerFake((string ansAttempt, Clue clue, out int s) => { s = fakeScore; }))
            .Returns(true);

            var tournamentLogicFake                = new Mock <ITournamentLogic>();
            var tournamentBroadcastFake            = new Mock <ITournamentBroadcast>();
            var tournamentController               = new TournamentController(tournamentRepositoryMock.Object, mapper, gameLogicFake.Object, tournamentLogicFake.Object, tournamentBroadcastFake.Object);
            AnswerAttemptUpdateModel answerAttempt = new AnswerAttemptUpdateModel {
                Answer = "myanswer"
            };

            // Act
            var actionResult = tournamentController.AddTournamentSubscriberGameAnswerAttempt(new Guid(), new Guid(), new Guid(), clueId, answerAttempt);

            // Assert the respoitory was called with the fake score to be persisted
            tournamentRepositoryMock.Verify(x => x.UpdateSubscriberGameResult(It.IsAny <Guid>(), It.IsAny <Guid>(), It.IsAny <Guid>(), clueId, answerAttempt.Answer, fakeScore), Times.Once);
        }
        public void ReturnBadRequest_WhenGameNotInPlay()
        {
            // Arrange
            var  tournamentRepositoryFake = new Mock <ITournamentRepository>();
            var  mapper = Helper.SetupMapper();
            Guid clueId = Guid.NewGuid();
            Guid GameId = Guid.NewGuid();

            // Ensure game of test is PostPlay not InPlay
            tournamentRepositoryFake.Setup(p => p.Get(It.IsAny <Guid>())).Returns(new Tournament
            {
                PreplayGameId  = Guid.NewGuid(),
                InplayGameId   = Guid.NewGuid(),
                PostplayGameId = GameId
            });
            tournamentRepositoryFake.Setup(p => p.GetGame(It.IsAny <Guid>(), GameId)).Returns(
                new Game {
                Id    = GameId,
                Clues = new List <Clue>
                {
                    new Clue
                    {
                        Id = clueId
                    }
                }
            });
            tournamentRepositoryFake.Setup(p => p.GetSubscriber(It.IsAny <Guid>(), It.IsAny <Guid>())).Returns(new Subscriber());
            var gameLogicFake = new Mock <IGameLogic>();
            int score;

            gameLogicFake.Setup(x => x.EvaluateSubscriberAnswer(It.IsAny <string>(), It.IsAny <Clue>(), out score)).Returns(true);
            var tournamnetLogicFake                = new Mock <ITournamentLogic>();
            var tournamentBroadcastFake            = new Mock <ITournamentBroadcast>();
            var tournamentController               = new TournamentController(tournamentRepositoryFake.Object, mapper, gameLogicFake.Object, tournamnetLogicFake.Object, tournamentBroadcastFake.Object);
            AnswerAttemptUpdateModel answerAttempt = new AnswerAttemptUpdateModel {
                Answer = "myanswer"
            };
            // Act
            var actionResult = tournamentController.AddTournamentSubscriberGameAnswerAttempt(new Guid(), new Guid(), GameId, clueId, answerAttempt);

            // Assert
            Assert.IsType <BadRequestResult>(actionResult);
        }
        public void EvaluateSubscribeAnswerAttempt()
        {
            // Arrange
            var  tournamentRepositoryFake = new Mock <ITournamentRepository>();
            var  mapper = Helper.SetupMapper();
            Guid clueId = Guid.NewGuid();
            Guid gameId = Guid.NewGuid();

            tournamentRepositoryFake.Setup(p => p.Get(It.IsAny <Guid>())).Returns(new Tournament {
                InplayGameId = gameId
            });
            tournamentRepositoryFake.Setup(p => p.GetGame(It.IsAny <Guid>(), It.IsAny <Guid>())).Returns(
                new Game {
                Id    = gameId,
                Clues = new List <Clue>
                {
                    new Clue
                    {
                        Id = clueId
                    }
                }
            });
            tournamentRepositoryFake.Setup(p => p.GetSubscriber(It.IsAny <Guid>(), It.IsAny <Guid>())).Returns(new Subscriber());
            var gameLogicMock                      = new Mock <IGameLogic>();
            var tournamnetLogicFake                = new Mock <ITournamentLogic>();
            var tournamentBroadcastFake            = new Mock <ITournamentBroadcast>();
            var tournamentController               = new TournamentController(tournamentRepositoryFake.Object, mapper, gameLogicMock.Object, tournamnetLogicFake.Object, tournamentBroadcastFake.Object);
            AnswerAttemptUpdateModel answerAttempt = new AnswerAttemptUpdateModel {
                Answer = "myanswer"
            };

            // Act
            var actionResult = tournamentController.AddTournamentSubscriberGameAnswerAttempt(new Guid(), new Guid(), new Guid(), clueId, answerAttempt);

            // Assert
            int score;

            gameLogicMock.Verify(mocks => mocks.EvaluateSubscriberAnswer(It.IsAny <string>(), It.IsAny <Clue>(), out score), Times.Once);
        }
Exemple #5
0
        public IActionResult AddTournamentSubscriberGameAnswerAttempt(Guid tournamentid, Guid subscriberid, Guid gameid, Guid id, [FromBody] AnswerAttemptUpdateModel answerAttempt)
        {
            // Get the tournament
            Tournament tournament = this.TournamentRepository.Get(tournamentid);

            if (tournament == null)
            {
                return(NotFound());
            }
            Subscriber subscriber = this.TournamentRepository.GetSubscriber(tournamentid, subscriberid);

            if (subscriber == null)
            {
                return(NotFound());
            }

            Game tournamentGame = this.TournamentRepository.GetGame(tournamentid, gameid);

            if (tournamentGame == null)
            {
                return(NotFound());
            }

            // Reject any answer to a game that not in play
            if (tournament.InplayGameId != tournamentGame.Id)
            {
                return(BadRequest());
            }

            Clue clue = tournamentGame.Clues.FirstOrDefault(x => x.Id == id);

            if (clue == null)
            {
                return(NotFound());
            }

            // Check the answer
            int  score;
            bool isCorrect = this.GameLogic.EvaluateSubscriberAnswer(answerAttempt.Answer, clue, out score);

            // Records the answer attempt and score
            this.TournamentRepository.UpdateSubscriberGameResult(tournamentid, subscriberid, gameid, clue.Id, answerAttempt.Answer, score);

            if (isCorrect)
            {
                return(Ok());
            }

            return(BadRequest());
        }