def test_requests_errors(responses):
    responses.add(
        responses.GET,
        "https://pokeapi.co/api/v2/pokemon/sample",
        body=requests.exceptions.RequestException("Some error"),
    )

    with pytest.raises(PyPokedexError):
        pypokedex.get(name="sample")
def test_404_pokemon_not_found(responses):
    responses.add(responses.GET,
                  "https://pokeapi.co/api/v2/pokemon/sample",
                  json={},
                  status=404)

    with pytest.raises(PyPokedexHTTPError) as not_found:
        pypokedex.get(name="sample")

    assert not_found.value.http_code == 404
def test_other_HTTP_errors(responses):
    responses.add(responses.GET,
                  "https://pokeapi.co/api/v2/pokemon/sample",
                  json={},
                  status=408)

    with pytest.raises(PyPokedexHTTPError) as other_http_error:
        pypokedex.get(name="sample")

    assert other_http_error.value.http_code == 408
def test_pokemon_str_function(responses):
    responses.add(
        responses.GET,
        "https://pokeapi.co/api/v2/pokemon/sample",
        json=SAMPLE_POKEMON,
        status=200,
    )

    pokemon = pypokedex.get(name="sample")
    assert str(pokemon) == "Pokemon(dex=999, name='sample')"
def test_pokemon_existence_in_games(responses):
    responses.add(
        responses.GET,
        "https://pokeapi.co/api/v2/pokemon/sample",
        json=SAMPLE_POKEMON,
        status=200,
    )

    pokemon = pypokedex.get(name="sample")

    assert pokemon.exists_in("game_1")
def test_get_pokemon_by_dex(responses):
    responses.add(
        responses.GET,
        "https://pokeapi.co/api/v2/pokemon/999",
        json=SAMPLE_POKEMON,
        status=200,
    )

    pokemon = pypokedex.get(dex=999)

    assert _is_properly_initialized_pokemon(pokemon)
def test_get_pokemon_by_name(responses):
    responses.add(
        responses.GET,
        "https://pokeapi.co/api/v2/pokemon/sample",
        json=SAMPLE_POKEMON,
        status=200,
    )

    pokemon = pypokedex.get(name="sample")

    assert _is_properly_initialized_pokemon(pokemon)
def test_pokemon_does_not_learn_move(responses):
    responses.add(
        responses.GET,
        "https://pokeapi.co/api/v2/pokemon/sample",
        json=SAMPLE_POKEMON,
        status=200,
    )

    pokemon = pypokedex.get(name="sample")

    assert not pokemon.learns("random move", "game_1")
def test_missing_data_keys_for_pokemon(responses):
    cloned_sample_pokemon = deepcopy(SAMPLE_POKEMON)
    del cloned_sample_pokemon["weight"]
    responses.add(
        responses.GET,
        "https://pokeapi.co/api/v2/pokemon/sample",
        json=cloned_sample_pokemon,
        status=200,
    )

    with pytest.raises(PyPokedexError):
        pypokedex.get(name="sample")
def test_pokemon_does_not_learn_move_because_it_is_not_in_the_specified_game(
        responses):  # noqa
    responses.add(
        responses.GET,
        "https://pokeapi.co/api/v2/pokemon/sample",
        json=SAMPLE_POKEMON,
        status=200,
    )

    pokemon = pypokedex.get(name="sample")

    with pytest.raises(PyPokedexError):
        pokemon.learns("random move", "random game")
def test_pokemon_equality(responses):
    responses.add(
        responses.GET,
        "https://pokeapi.co/api/v2/pokemon/sample",
        json=SAMPLE_POKEMON,
        status=200,
    )
    responses.add(
        responses.GET,
        "https://pokeapi.co/api/v2/pokemon/999",
        json=SAMPLE_POKEMON,
        status=200,
    )

    first_pokemon = pypokedex.get(name="sample")
    second_pokemon = pypokedex.get(dex=999)
    assert first_pokemon == second_pokemon
def test_pokemon_inequality(responses):
    cloned_sample_pokemon = deepcopy(SAMPLE_POKEMON)
    cloned_sample_pokemon["id"] = 998
    responses.add(
        responses.GET,
        "https://pokeapi.co/api/v2/pokemon/998",
        json=cloned_sample_pokemon,
        status=200,
    )
    responses.add(
        responses.GET,
        "https://pokeapi.co/api/v2/pokemon/999",
        json=SAMPLE_POKEMON,
        status=200,
    )

    first_pokemon = pypokedex.get(dex=998)
    second_pokemon = pypokedex.get(dex=999)
    assert first_pokemon != second_pokemon
def test_pokemon_greater_than(responses):
    cloned_sample_pokemon = deepcopy(SAMPLE_POKEMON)
    cloned_sample_pokemon["id"] = 998
    responses.add(
        responses.GET,
        "https://pokeapi.co/api/v2/pokemon/998",
        json=cloned_sample_pokemon,
        status=200,
    )
    responses.add(
        responses.GET,
        "https://pokeapi.co/api/v2/pokemon/999",
        json=SAMPLE_POKEMON,
        status=200,
    )

    first_pokemon = pypokedex.get(dex=998)
    second_pokemon = pypokedex.get(dex=999)
    assert second_pokemon > first_pokemon
    assert not second_pokemon == first_pokemon
    assert not second_pokemon < first_pokemon
def test_pokemon_less_than_or_equal_to(responses):
    cloned_sample_pokemon = deepcopy(SAMPLE_POKEMON)
    cloned_sample_pokemon["id"] = 998
    responses.add(
        responses.GET,
        "https://pokeapi.co/api/v2/pokemon/998",
        json=cloned_sample_pokemon,
        status=200,
    )
    responses.add(
        responses.GET,
        "https://pokeapi.co/api/v2/pokemon/999",
        json=SAMPLE_POKEMON,
        status=200,
    )

    first_pokemon = pypokedex.get(dex=998)
    second_pokemon = pypokedex.get(dex=999)
    third_pokemon = pypokedex.get(dex=999)
    assert first_pokemon <= second_pokemon
    assert second_pokemon <= third_pokemon
    assert not third_pokemon <= first_pokemon