Exemplo n.º 1
0
    def test_create_code_peg_bad_request(self):
        url = reverse("api:code-pegs:code-pegs-view")
        code_breaker = User.objects.get(username="******")
        token = Token.objects.create(user=code_breaker)
        self.client.credentials(HTTP_AUTHORIZATION=f"Token {token}")

        data = {
            "slot1": CodePeg.get_color_index(CodePeg.ORANGE),
            "slot2": CodePeg.get_color_index(CodePeg.PURPLE),
            "slot3": CodePeg.get_color_index(CodePeg.PURPLE),
            "slot4": CodePeg.get_color_index(CodePeg.PURPLE),
        }

        response = self.client.post(url, data, format="json")
        assert response.status_code == status.HTTP_400_BAD_REQUEST
Exemplo n.º 2
0
 def setup_users(self):
     self.client = APIClient()
     u1 = User.objects.create(
         username="******", email="*****@*****.**", password="******"
     )
     u2 = User.objects.create(
         username="******", email="*****@*****.**", password="******"
     )
     game = Game.objects.create(code_maker=u1, code_breaker=u2, attempts=5)
     CodePeg.objects.create(
         game=game,
         is_solution=True,
         slot1=CodePeg.get_color_index(CodePeg.PURPLE),
         slot2=CodePeg.get_color_index(CodePeg.PURPLE),
         slot3=CodePeg.get_color_index(CodePeg.PURPLE),
         slot4=CodePeg.get_color_index(CodePeg.PURPLE),
     )
Exemplo n.º 3
0
 def setup_users(self):
     user1 = User.objects.create(username="******",
                                 email="*****@*****.**",
                                 password="******")
     user2 = User.objects.create(username="******",
                                 email="*****@*****.**",
                                 password="******")
     game = Game.objects.create(code_breaker=user1,
                                code_maker=user2,
                                attempts=4)
     CodePeg.objects.create(
         game=game,
         is_solution=True,
         slot1=CodePeg.get_color_index(CodePeg.BLUE),
         slot2=CodePeg.get_color_index(CodePeg.RED),
         slot3=CodePeg.get_color_index(CodePeg.ORANGE),
         slot4=CodePeg.get_color_index(CodePeg.GREEN),
     )
Exemplo n.º 4
0
    def test_create_code_peg_game_finished_with_winner(self):
        url = reverse("api:code-pegs:code-pegs-view")
        code_breaker = User.objects.get(username="******")
        token = Token.objects.create(user=code_breaker)
        self.client.credentials(HTTP_AUTHORIZATION=f"Token {token}")

        data = {
            "game": Game.objects.get().id,
            "slot1": CodePeg.get_color_index(CodePeg.PURPLE),
            "slot2": CodePeg.get_color_index(CodePeg.PURPLE),
            "slot3": CodePeg.get_color_index(CodePeg.PURPLE),
            "slot4": CodePeg.get_color_index(CodePeg.PURPLE),
        }

        self.client.post(url, data, format="json")
        response = self.client.post(url, data, format="json")
        assert response
        assert response.status_code == status.HTTP_409_CONFLICT
Exemplo n.º 5
0
    def test_create_code_peg_unauthorized_game(self):
        url = reverse("api:code-pegs:code-pegs-view")
        u3 = User.objects.create(username="******", password="******")
        token = Token.objects.create(user=u3)

        self.client.credentials(HTTP_AUTHORIZATION=f"Token {token}")

        data = {
            "game": Game.objects.get().id,
            "slot1": CodePeg.get_color_index(CodePeg.RED),
            "slot2": CodePeg.get_color_index(CodePeg.PURPLE),
            "slot3": CodePeg.get_color_index(CodePeg.PURPLE),
            "slot4": CodePeg.get_color_index(CodePeg.PURPLE),
        }
        response = self.client.post(url, data, format="json")
        assert response
        assert response.status_code == status.HTTP_403_FORBIDDEN
        assert response.data == "You can't play this game."
Exemplo n.º 6
0
    def test_create_code_peg_with_duplicate_solution(self):
        url = reverse("api:code-pegs:code-pegs-view")
        code_maker = User.objects.get(username="******")
        token = Token.objects.create(user=code_maker)
        game = Game.objects.get()
        self.client.credentials(HTTP_AUTHORIZATION=f"Token {token}")

        data = {
            "game": game.id,
            "slot1": CodePeg.get_color_index(CodePeg.RED),
            "slot2": CodePeg.get_color_index(CodePeg.PURPLE),
            "slot3": CodePeg.get_color_index(CodePeg.PURPLE),
            "slot4": CodePeg.get_color_index(CodePeg.PURPLE),
        }
        response = self.client.post(url, data, format="json")
        assert response
        assert response.status_code == status.HTTP_409_CONFLICT
        assert (
            response.data == f"One solution was provided before for this game: {game}"
        )
Exemplo n.º 7
0
    def test_create_code_peg_game_doesnt_started_yet(self):
        url = reverse("api:code-pegs:code-pegs-view")
        u1 = User.objects.create(username="******", password="******")
        u2 = User.objects.create(username="******", password="******")
        game = Game.objects.create(code_maker=u1, code_breaker=u2, attempts=1)
        token = Token.objects.create(user=u2)

        self.client.credentials(HTTP_AUTHORIZATION=f"Token {token}")

        data = {
            "game": game.id,
            "slot1": CodePeg.get_color_index(CodePeg.ORANGE),
            "slot2": CodePeg.get_color_index(CodePeg.PURPLE),
            "slot3": CodePeg.get_color_index(CodePeg.PURPLE),
            "slot4": CodePeg.get_color_index(CodePeg.PURPLE),
        }

        response = self.client.post(url, data, format="json")
        assert response
        assert response.status_code == status.HTTP_409_CONFLICT
        assert response.data == "The game isn't started yet."
Exemplo n.º 8
0
    def test_create_code_peg_game_finished_with_attemps(self):
        url = reverse("api:code-pegs:code-pegs-view")
        code_breaker = User.objects.get(username="******")
        token = Token.objects.create(user=code_breaker)
        game = Game.objects.get()
        self.client.credentials(HTTP_AUTHORIZATION=f"Token {token}")

        data = {
            "game": game.id,
            "slot1": CodePeg.get_color_index(CodePeg.RED),
            "slot2": CodePeg.get_color_index(CodePeg.PURPLE),
            "slot3": CodePeg.get_color_index(CodePeg.PURPLE),
            "slot4": CodePeg.get_color_index(CodePeg.PURPLE),
        }
        attempts = 5
        for code_peg in range(attempts):
            self.client.post(url, data, format="json")

        response = self.client.post(url, data, format="json")
        assert response
        assert response.status_code == status.HTTP_409_CONFLICT
        assert response.data == f"The game: {game} is already over."
Exemplo n.º 9
0
 def test_create_code_peg(self):
     game = Game.objects.get()
     code_peg = CodePeg.objects.create(
         game=game,
         slot1=CodePeg.get_color_index(CodePeg.YELLOW),
         slot2=CodePeg.get_color_index(CodePeg.YELLOW),
         slot3=CodePeg.get_color_index(CodePeg.RED),
         slot4=CodePeg.get_color_index(CodePeg.BLUE),
     )
     assert code_peg
     assert not code_peg.is_solution
     assert code_peg.slot1 == CodePeg.get_color_index(CodePeg.YELLOW)
     assert code_peg.slot2 == CodePeg.get_color_index(CodePeg.YELLOW)
     assert code_peg.slot3 == CodePeg.get_color_index(CodePeg.RED)
     assert code_peg.slot4 == CodePeg.get_color_index(CodePeg.BLUE)
     assert code_peg.game == game
Exemplo n.º 10
0
    def test_create_code_peg(self):
        url = reverse("api:code-pegs:code-pegs-view")
        code_breaker = User.objects.get(username="******")
        token = Token.objects.create(user=code_breaker)
        self.client.credentials(HTTP_AUTHORIZATION=f"Token {token}")

        data = {
            "game": Game.objects.get().id,
            "slot1": CodePeg.get_color_index(CodePeg.ORANGE),
            "slot2": CodePeg.get_color_index(CodePeg.PURPLE),
            "slot3": CodePeg.get_color_index(CodePeg.PURPLE),
            "slot4": CodePeg.get_color_index(CodePeg.PURPLE),
        }

        response = self.client.post(url, data, format="json")
        assert response
        assert response.status_code == status.HTTP_201_CREATED
        assert response.data == [
            CodeKey.BLANK.value,
            CodeKey.BLACK.value,
            CodeKey.BLACK.value,
            CodeKey.BLACK.value,
        ]
Exemplo n.º 11
0
 def test_get_color_index(self, color, expected):
     index = CodePeg.get_color_index(color)
     assert index == expected
Exemplo n.º 12
0
class TestGameChecker:
    @pytest.fixture(autouse=True)
    def setup_users(self):
        user1 = User.objects.create(username="******",
                                    email="*****@*****.**",
                                    password="******")
        user2 = User.objects.create(username="******",
                                    email="*****@*****.**",
                                    password="******")
        game = Game.objects.create(code_breaker=user1,
                                   code_maker=user2,
                                   attempts=4)
        CodePeg.objects.create(
            game=game,
            is_solution=True,
            slot1=CodePeg.get_color_index(CodePeg.BLUE),
            slot2=CodePeg.get_color_index(CodePeg.RED),
            slot3=CodePeg.get_color_index(CodePeg.ORANGE),
            slot4=CodePeg.get_color_index(CodePeg.GREEN),
        )

    @pytest.mark.parametrize(
        "slots, expected",
        [
            (
                (
                    CodePeg.get_color_index(CodePeg.BLUE),
                    CodePeg.get_color_index(CodePeg.RED),
                    CodePeg.get_color_index(CodePeg.ORANGE),
                    CodePeg.get_color_index(CodePeg.GREEN),
                ),
                True,
            ),
            (
                (
                    CodePeg.get_color_index(CodePeg.RED),
                    CodePeg.get_color_index(CodePeg.PURPLE),
                    CodePeg.get_color_index(CodePeg.PURPLE),
                    CodePeg.get_color_index(CodePeg.PURPLE),
                ),
                False,
            ),
        ],
    )
    def test_is_solution(self, slots, expected):
        game = Game.objects.get()
        code_peg = CodePeg.objects.create(game=game,
                                          slot1=slots[0],
                                          slot2=slots[1],
                                          slot3=slots[2],
                                          slot4=slots[3])
        is_solution = GameChecker.is_solution(code_peg, game)
        assert is_solution == expected

    @pytest.mark.parametrize("attempts, is_finished", [(3, False), (7, True)])
    def test_is_the_game_finished(self, attempts, is_finished):
        game = Game.objects.get()

        for _ in range(attempts):
            CodePeg.objects.create(game=game,
                                   slot1=1,
                                   slot2=1,
                                   slot3=1,
                                   slot4=1)

        assert GameChecker.is_the_game_finished(game) == is_finished

    @pytest.mark.parametrize(
        "slots, expected",
        [
            (
                (
                    CodePeg.get_color_index(CodePeg.ORANGE),
                    CodePeg.get_color_index(CodePeg.GREEN),
                    CodePeg.get_color_index(CodePeg.ORANGE),
                    CodePeg.get_color_index(CodePeg.BLUE),
                ),
                [
                    CodeKey.WHITE.value,
                    CodeKey.WHITE.value,
                    CodeKey.BLACK.value,
                    CodeKey.WHITE.value,
                ],
            ),
            (
                (
                    CodePeg.get_color_index(CodePeg.RED),
                    CodePeg.get_color_index(CodePeg.PURPLE),
                    CodePeg.get_color_index(CodePeg.PURPLE),
                    CodePeg.get_color_index(CodePeg.PURPLE),
                ),
                [
                    CodeKey.WHITE.value,
                    CodeKey.BLANK.value,
                    CodeKey.BLANK.value,
                    CodeKey.BLANK.value,
                ],
            ),
            (
                (
                    CodePeg.get_color_index(CodePeg.PURPLE),
                    CodePeg.get_color_index(CodePeg.PURPLE),
                    CodePeg.get_color_index(CodePeg.PURPLE),
                    CodePeg.get_color_index(CodePeg.PURPLE),
                ),
                [
                    CodeKey.BLANK.value,
                    CodeKey.BLANK.value,
                    CodeKey.BLANK.value,
                    CodeKey.BLANK.value,
                ],
            ),
        ],
    )
    def test_feedback_to_solution_provided(self, slots, expected):
        game = Game.objects.get()
        code_peg = CodePeg.objects.create(game=game,
                                          slot1=slots[0],
                                          slot2=slots[1],
                                          slot3=slots[2],
                                          slot4=slots[3])

        feedback = GameChecker.feedback_to_solution_provided(code_peg, game)
        assert feedback == expected