Exemple #1
0
        public async Task TestPostingValidSet()
        {
            SeedDTO seed = new SeedDTO {
                Seed = 42
            };
            StringContent postContent = TestUtilities.ObjToStringContent(seed);
            HttpClient    client      = TestUtilities.GetHttpClient();

            HttpResponseMessage response = await client.PostAsync("newgame", postContent);

            string content = await response.Content.ReadAsStringAsync();

            BoardDTO gameObj = JsonConvert.DeserializeObject <BoardDTO>(content);

            List <Card> cards = TestUtilities.FindSet(gameObj.Cards);
            GuessDTO    guess = new GuessDTO {
                GameID = gameObj.GameID, Card1 = cards[0], Card2 = cards[1], Card3 = cards[2]
            };
            StringContent guessContent = TestUtilities.ObjToStringContent(guess);

            HttpResponseMessage postResponse = await client.PostAsync("submitguess", guessContent);

            string responseContent = await postResponse.Content.ReadAsStringAsync();

            GameDTO gameDTO = JsonConvert.DeserializeObject <GameDTO>(responseContent);

            Assert.AreEqual(true, gameDTO.ValidSet, "Posted cards should have registered as valid but are invalid");
            Assert.AreEqual(78, gameDTO.CardsRemaining, "Cards remaining should have been 78 but are not");
            Assert.IsFalse(gameDTO.WinState, "Win state after a single POST should be false but is true");
            Assert.IsFalse(TestUtilities.BoardContainsCards(gameDTO.Board, guess.Card1, guess.Card2, guess.Card3), "Posted cards should be removed from the board but are still present");
        }
        public GameDTO TryGuesst(GuessDTO guess)
        {
            var game = gamesRepository.Get(guess.Id);

            if (game == null)
            {
                throw new GameException("Game Id is not valid");
            }

            if (game.Status != Domian.Enums.GameStatus.pending)
            {
                throw new GameException("Game already ended");
            }

            HandleIfTimesUp(game);
            Check(game, guess.Number);

            gamesRepository.Edit(game);
            var result = new GameDTO();

            result.Status = game.Status;

            if (game.Status == Domian.Enums.GameStatus.won)
            {
                AddToHightScores(game, result);
            }

            return(result);
        }
Exemple #3
0
        public IActionResult PostSelectedCards(GuessDTO guess)
        {
            GameResult gameResult = GameHolder.RetrieveGame(guess.GameID);

            if (!gameResult.ValidGameID)
            {
                return(BadRequest());
            }

            Game game = gameResult.GameObj;

            if (!game.ValidCards(guess.Card1, guess.Card2, guess.Card3) || game.WinState)
            {
                return(BadRequest());
            }

            bool validSet = game.MakeGuess(guess.Card1, guess.Card2, guess.Card3);

            return(Ok(new GameDTO
            {
                GameID = guess.GameID,
                Board = game.Board,
                ValidSet = validSet,
                WinState = game.WinState,
                CardsRemaining = game.CardsRemaining,
                TopScores = new List <Player>()
            }));
        }
Exemple #4
0
        public async Task TestReset()
        {
            SeedDTO seed = new SeedDTO {
                Seed = 42
            };
            StringContent postContent = TestUtilities.ObjToStringContent(seed);
            HttpClient    client      = TestUtilities.GetHttpClient();

            HttpResponseMessage response = await client.PostAsync("newgame", postContent);

            string content = await response.Content.ReadAsStringAsync();

            BoardDTO gameObj = JsonConvert.DeserializeObject <BoardDTO>(content);

            List <Card> cards = TestUtilities.FindSet(gameObj.Cards);
            GuessDTO    guess = new GuessDTO {
                GameID = gameObj.GameID, Card1 = cards[0], Card2 = cards[1], Card3 = cards[2]
            };
            StringContent guessContent = TestUtilities.ObjToStringContent(guess);

            HttpResponseMessage postResponse = await client.PostAsync("submitguess", guessContent);

            string responseContent = await postResponse.Content.ReadAsStringAsync();

            gameDTO = JsonConvert.DeserializeObject <GameDTO>(responseContent);

            Assert.IsFalse(gameDTO.WinState, "After a reset, game marked as won still");
            Assert.AreEqual(78, gameDTO.CardsRemaining, "After a reset, expected 78 cards remaining but actual was different");
        }
Exemple #5
0
        public async Task TestSetup()
        {
            SeedDTO seed = new SeedDTO {
                Seed = 42
            };
            StringContent postContent = TestUtilities.ObjToStringContent(seed);
            HttpClient    client      = TestUtilities.GetHttpClient();

            HttpResponseMessage response = await client.PostAsync("newgame", postContent);

            string content = await response.Content.ReadAsStringAsync();

            BoardDTO gameObj = JsonConvert.DeserializeObject <BoardDTO>(content);

            gameDTO = new GameDTO {
                Board = gameObj.Cards, GameID = gameObj.GameID
            };

            for (int i = 0; i < 24; i++)
            {
                List <Card> cards = TestUtilities.FindSet(gameDTO.Board);
                GuessDTO    guess = new GuessDTO {
                    GameID = gameDTO.GameID, Card1 = cards[0], Card2 = cards[1], Card3 = cards[2]
                };
                StringContent guessContent = TestUtilities.ObjToStringContent(guess);

                HttpResponseMessage postResponse = await client.PostAsync("submitguess", guessContent);

                string responseContent = await postResponse.Content.ReadAsStringAsync();

                gameDTO = JsonConvert.DeserializeObject <GameDTO>(responseContent);
            }
        }
Exemple #6
0
        public async Task TestInvalidSetNotOnBoard()
        {
            HttpClient client     = TestUtilities.GetHttpClient();
            Card       card1      = new Card(Characteristic.Option1, Characteristic.Option1, Characteristic.Option1, Characteristic.Option1);
            Card       card2      = new Card(Characteristic.Option1, Characteristic.Option1, Characteristic.Option2, Characteristic.Option1);
            Card       card3      = new Card(Characteristic.Option1, Characteristic.Option1, Characteristic.Option3, Characteristic.Option1);
            GuessDTO   notOnBoard = new GuessDTO {
                GameID = gameDTO.GameID, Card1 = card1, Card2 = card2, Card3 = card3
            };
            StringContent       guessContent = TestUtilities.ObjToStringContent(notOnBoard);
            HttpResponseMessage postResponse = await client.PostAsync("submitguess", guessContent);

            Assert.AreEqual(HttpStatusCode.BadRequest, postResponse.StatusCode);
        }
Exemple #7
0
        public void TryGuessNumber_NumberOutOfRange()
        {
            var game = new NewGameDTO().ToNewGameModel();

            game.Id = "ABCDE";

            var gameService = GetSampleGameService(game);

            var guess = new GuessDTO
            {
                Id     = game.Id,
                Number = game.From - 1
            };

            Assert.Throws <GameException>(() => gameService.TryGuesst(guess));
        }
Exemple #8
0
        public async Task TestInvalidSet()
        {
            HttpClient client  = TestUtilities.GetHttpClient();
            GuessDTO   notASet = new GuessDTO {
                GameID = gameDTO.GameID, Card1 = gameDTO.Board[0], Card2 = gameDTO.Board[1], Card3 = gameDTO.Board[2]
            };
            StringContent guessContent = TestUtilities.ObjToStringContent(notASet);

            HttpResponseMessage postResponse = await client.PostAsync("submitguess", guessContent);

            string responseContent = await postResponse.Content.ReadAsStringAsync();

            gameDTO = JsonConvert.DeserializeObject <GameDTO>(responseContent);

            Assert.IsFalse(gameDTO.ValidSet, "Posted cards should have been an invalid set but are a valid set");
            Assert.IsTrue(TestUtilities.BoardContainsCards(gameDTO.Board, notASet.Card1, notASet.Card2, notASet.Card3), "The board no longer contains the invalid set cards");
        }
Exemple #9
0
        public void TryGuessNumber_TimeUp()
        {
            var game = new NewGameDTO().ToNewGameModel();

            game.Id = "ABCDE";
            game.LastAttemptDate = game.LastAttemptDate.AddDays(-1);

            var gameService = GetSampleGameService(game);


            var guess = new GuessDTO
            {
                Id     = game.Id,
                Number = game.Number
            };

            Assert.Throws <GameException>(() => gameService.TryGuesst(guess));
        }
        public async Task <ActionResult <ResultDTO> > PostQuiz(int quizId, [FromBody] GuessDTO dto)
        {
            var quiz = await _context.Quizes.FindAsync(quizId);

            if (quiz is null)
            {
                return(BadRequest("Quiz doesnt exist"));
            }

            var qs = await _context.Questions.Where(q => q.Quiz == quiz)
                     .Include(q => q.AnswerOptions).ToListAsync();

            var result = _quizChecker.CheckQuiz(qs, dto);

            result.QuizId = quizId;

            return(result);
        }
        public async Task <ComputerAnswerDTO> Play(ValueOnlyGuessDTO ValueOnlyUserGuessDTO)
        {
            if (!ModelState.IsValid)
            {
                return(null);
            }
            Game game = await _gameHandler.GetActiveGame(HttpContext);

            _context.Attach(game);
            if (game == null)
            {
                return(null);
            }

            GuessOutcome userGuessOutcome = await _gameHandler.GetUserGuessOutcome(HttpContext, ValueOnlyUserGuessDTO.Value);

            Guess userGuess = new Guess()
            {
                Value        = ValueOnlyUserGuessDTO.Value,
                GuessOutcome = userGuessOutcome,
                GuessMaker   = GuessMaker.User,
                Game         = game
            };

            _context.Attach(userGuess);

            string AIGuess = await _gameHandler.GetAIGuess(HttpContext);

            GuessOutcome aiGuessOutcomeDTO = await _gameHandler.GetAIGuessOutcome(HttpContext, AIGuess);

            Guess aiGuess = new Guess()
            {
                Value        = AIGuess,
                GuessOutcome = aiGuessOutcomeDTO,
                GuessMaker   = GuessMaker.AI,
                Game         = game
            };

            _context.Attach(aiGuess);

            GuessDTO          aiGuessDTO     = new GuessDTO(aiGuess);
            GuessDTO          userGuessDTO   = new GuessDTO(userGuess);
            ComputerAnswerDTO computerAnswer = new ComputerAnswerDTO
            {
                AIGuess   = aiGuessDTO,
                UserGuess = userGuessDTO
            };

            if (userGuessOutcome.BullsNumber == ValueOnlyUserGuessDTO.Value.Length)//All numbers match - User wins
            {
                game.WonByUser             = true;
                computerAnswer.UserVictory = true;
                computerAnswer.AIGuess     = null;
            }
            else if (aiGuessOutcomeDTO.BullsNumber == AIGuess.Length)//All numbers match - AI wins
            {
                game.WonByAI             = true;
                computerAnswer.AIVictory = true;
            }
            await _context.SaveChangesAsync();

            return(computerAnswer);
        }
        public IActionResult Guess([FromBody] GuessDTO guess)
        {
            var result = gameService.TryGuesst(guess);

            return(Ok(result.ToString()));
        }