123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- import os
- import pytest
- import requests
- from requests.models import Response
- import json
- from pyopenagi.tools.imdb.top_series import TopSeries
- from dotenv import load_dotenv, find_dotenv
- @pytest.fixture(scope="module")
- def test_rapid_api_key():
- load_dotenv(find_dotenv())
- if "RAPID_API_KEY" not in os.environ or not os.environ["RAPID_API_KEY"]:
- with pytest.raises(ValueError):
- TopSeries()
- pytest.skip("RAPID api key is not set.")
- else:
- return True
- class ImdbTopSeriesMock:
- @staticmethod
- def json():
- mock_items = []
- mock_title = "Mock Title"
- mock_description = "Mock Description."
- mock_image = "https://m.media-amazon.com/images/Mock/Standard.Image.jpg"
- mock_big_image = "https://m.media-amazon.com/images/Mock/Big.Image.jpg"
- mock_genre = ["Drama", "Fantasy"]
- mock_thumbnail = "https://m.media-amazon.com/images/Mock/Thumb.Image.jpg"
- mock_rating = 9.2
- mock_year = "2011-2019"
- mock_imdbid = "tt0000000"
- mock_imdb_link = "https://www.imdb.com/title/tt0000000"
- for i in range(100):
- mock_items.append(
- {
- "rank": i + 1,
- "title": mock_title,
- "description": mock_description,
- "image": mock_image,
- "big_image": mock_big_image,
- "genre": mock_genre,
- "thumbnail": mock_thumbnail,
- "rating": mock_rating,
- "id": f"top{i+1}",
- "year": mock_year,
- "imdbid": mock_imdbid,
- "mock_imdb_link": mock_imdb_link,
- }
- )
- mock_response = Response()
- mock_response.status_code = 200
- mock_response._content = str.encode(json.dumps(mock_items))
- return mock_response.json()
- @pytest.fixture(autouse=True)
- def mock_response(monkeypatch):
- def mock_get(*args, **kwargs):
- return ImdbTopSeriesMock()
- monkeypatch.setattr(requests, "get", mock_get)
- @pytest.mark.usefixtures("test_rapid_api_key")
- @pytest.mark.parametrize(
- "valid_start, valid_end",
- [
- [1, 100],
- [60, 61],
- [60, 62],
- ],
- )
- def test_top_series_api_valid_input_outputs_valid_delimiter_count(
- valid_start, valid_end
- ):
- load_dotenv(find_dotenv())
- top_series_api = TopSeries()
- params = {"start": valid_start, "end": valid_end}
- result = top_series_api.run(params=params)
- assert isinstance(result, str)
- assert result.count(";") == max(0, int(valid_end) - int(valid_start))
- @pytest.mark.usefixtures("test_rapid_api_key")
- def test_top_series_api_reverse_range_returns_blank():
- load_dotenv(find_dotenv())
- top_series_api = TopSeries()
- params = {"start": 100, "end": 0}
- result = top_series_api.run(params=params)
- assert result == "Top 100-0 series ranked by IMDB are: "
- @pytest.mark.parametrize(
- "invalid_start, valid_end",
- [
- ["0", 100],
- [0.5, 100],
- [[], 100],
- [{}, 100]
- ]
- )
- @pytest.mark.usefixtures("test_rapid_api_key")
- def test_top_series_api_invalid_start_type_raises_typeerror(invalid_start, valid_end):
- load_dotenv(find_dotenv())
- top_series_api = TopSeries()
- params = {"start": invalid_start, "end": valid_end}
- with pytest.raises(TypeError):
- top_series_api.run(params=params)
- @pytest.mark.parametrize(
- "invalid_start, valid_end",
- [
- [1, "0"],
- [1, 0.5],
- [1, []],
- [1, {}]
- ]
- )
- @pytest.mark.usefixtures("test_rapid_api_key")
- def test_top_series_api_invalid_end_type_raises_typeerror(invalid_start, valid_end):
- load_dotenv(find_dotenv())
- top_series_api = TopSeries()
- params = {"start": invalid_start, "end": valid_end}
- with pytest.raises(TypeError):
- top_series_api.run(params=params)
- @pytest.mark.usefixtures("test_rapid_api_key")
- def test_top_series_api_invalid_start_count_raises_indexerror():
- load_dotenv(find_dotenv())
- top_series_api = TopSeries()
- invalid_start = {"start": 101, "end": 102}
- with pytest.raises(IndexError):
- top_series_api.run(params=invalid_start)
- @pytest.mark.usefixtures("test_rapid_api_key")
- def test_top_series_api_invalid_end_count_raises_indexerror():
- load_dotenv(find_dotenv())
- top_series_api = TopSeries()
- invalid_end = {"start": 1, "end": 101}
- with pytest.raises(IndexError):
- top_series_api.run(params=invalid_end)
|