"""YouTube API logic test.""" from unittest.mock import MagicMock from unittest.mock import patch import pytest from pyyoutube import PyYouTubeException from src import youtube_api_utils URL = 'https://www.youtube.com/channel/UC3IZKseVpdzPSBaWxBxundA' @pytest.mark.parametrize('url, youtube_id', [ ('https://www.youtube.com/channel/UC3IZKseVpdzPSBaWxBxundA?=wfwq2fewfw', 'UC3IZKseVpdzPSBaWxBxundA'), ('https://www.youtube.com/channel/UC3IZKseVpdzPSBaWxBxundA/', 'UC3IZKseVpdzPSBaWxBxundA'), ('youtube.com/channel/UC3IZKseVpdzPSBaWxBxundA', 'UC3IZKseVpdzPSBaWxBxundA'), ('https://www.youtube.com/user/dilsinhocomposicao', 'dilsinhocomposicao'), ('https://www.youtube.com/user/dilsinhocomposicao/', 'dilsinhocomposicao'), ]) def test__get_youtube_id_from_url(url, youtube_id): """Test _get_youtube_id_from_url.""" assert youtube_id == youtube_api_utils._get_youtube_id_from_url(url) @pytest.mark.parametrize('url, clean_url', [ ('https://www.youtube.com/channel/UC3IZKseVpdzPSBaWxBxundA?=wfwq2fewfw', 'https://www.youtube.com/channel/UC3IZKseVpdzPSBaWxBxundA'), ('https://www.youtube.com/channel/UC3IZKseVpdzPSBaWxBxundA/?ffwwq13f11', 'https://www.youtube.com/channel/UC3IZKseVpdzPSBaWxBxundA/'), ('youtube.com/channel/UC3IZKseVpdzPSBaWxBxundA?=cr23vw', 'youtube.com/channel/UC3IZKseVpdzPSBaWxBxundA'), ('https://www.youtube.com/user/dilsinhocomposicao?21e21d-', 'https://www.youtube.com/user/dilsinhocomposicao'), ('https://www.youtube.com/user/dilsinhocomposicao/?wdwqdqd', 'https://www.youtube.com/user/dilsinhocomposicao/'), ]) def test__remove_url_params(url, clean_url): """Test _remove_url_params.""" assert clean_url == youtube_api_utils._remove_url_params(url) @pytest.mark.parametrize('url, url_type', [ ('https://www.youtube.com/channel/UC3IZKseVpdzPSBaWxBxundA', 'channel'), ('https://www.youtube.com/channel/UC3IZKseVpdzPSBaWxBxundA/', 'channel'), ('youtube.com/channel/UC3IZKseVpdzPSBaWxBxundA?=wfwq2fewfw', 'channel'), ('https://www.youtube.com/user/dilsinhocomposicao', 'user'), ('https://www.youtube.com/user/dilsinhocomposicao/', 'user'), ]) def test__check_if_url_contains_channel_id_or_username(url, url_type): """Test _check_if_url_contains_channel_id_or_username.""" assert url_type == youtube_api_utils._check_if_url_contains_channel_id_or_username(url) @patch('src.youtube_api_utils.Api') def test_successful_api_request(api_class_mock): """Test getting subscribers successfully.""" class Result: channel = MagicMock() channel.statistics.subscriberCount = 100 items = [channel] api_mock = MagicMock() api_mock.get_channel_info.return_value = Result() api_class_mock.return_value = api_mock result = youtube_api_utils.get_youtube_subscribers(URL) assert result == 100 @patch('src.youtube_api_utils.Api') def test_unsuccessful_api_request(api_class_mock): """Test getting subscribers unsuccessfully.""" api_mock = MagicMock() api_mock.get_channel_info.side_effect = PyYouTubeException('') api_class_mock.return_value = api_mock with pytest.raises(PyYouTubeException): youtube_api_utils.get_youtube_subscribers(URL)