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); }
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()); }