diff --git a/tests/test_extract_video_id.py b/tests/test_extract_video_id.py new file mode 100644 index 0000000..7d97851 --- /dev/null +++ b/tests/test_extract_video_id.py @@ -0,0 +1,55 @@ +from pytchat.util.extract_video_id import extract_video_id +from pytchat.exceptions import InvalidVideoIdException + +VALID_TEST_PATTERNS = ( + ("ABC_EFG_IJK", "ABC_EFG_IJK"), + ("vid_test_be", "vid_test_be"), + ("https://www.youtube.com/watch?v=123_456_789", "123_456_789"), + ("https://www.youtube.com/watch?v=123_456_789&t=123s", "123_456_789"), + ("www.youtube.com/watch?v=123_456_789", "123_456_789"), + ("watch?v=123_456_789", "123_456_789"), + ("youtube.com/watch?v=123_456_789", "123_456_789"), + ("http://youtu.be/ABC_EFG_IJK", "ABC_EFG_IJK"), + ("youtu.be/ABC_EFG_IJK", "ABC_EFG_IJK"), + ("https://www.youtube.com/watch?v=ABC_EFG_IJK&list=XYZ_ABC_12345&start_radio=1&t=1", "ABC_EFG_IJK"), + ("https://www.youtube.com/embed/ABC_EFG_IJK", "ABC_EFG_IJK"), + ("www.youtube.com/embed/ABC_EFG_IJK", "ABC_EFG_IJK"), + ("youtube.com/embed/ABC_EFG_IJK", "ABC_EFG_IJK") +) + +INVALID_TEST_PATTERNS = ( + ("", ""), + ("0123456789", "0123456789"), # less than 11 letters id + ("more_than_11_letter_string", "more_than_11_letter_string"), + ("https://www.youtube.com/watch?v=more_than_11_letter_string", "more_than_11_letter_string"), + ("https://www.youtube.com/channel/123_456_789", "123_456_789"), +) + +TYPEERROR_TEST_PATTERNS = ( + (100, 100), # not string + (["123_456_789"], "123_456_789"), # not string +) + + +def test_extract_valid_pattern(): + for pattern in VALID_TEST_PATTERNS: + ret = extract_video_id(pattern[0]) + assert ret == pattern[1] + + +def test_extract_invalid_pattern(): + for pattern in INVALID_TEST_PATTERNS: + try: + extract_video_id(pattern[0]) + assert False + except InvalidVideoIdException: + assert True + + +def test_extract_typeerror_pattern(): + for pattern in TYPEERROR_TEST_PATTERNS: + try: + extract_video_id(pattern[0]) + assert False + except TypeError: + assert True diff --git a/tests/test_livechat.py b/tests/test_livechat.py index 6c0d38f..31c7677 100644 --- a/tests/test_livechat.py +++ b/tests/test_livechat.py @@ -11,13 +11,13 @@ def _open_file(path): @aioresponses() def test_Async(*mock): - vid = '' + vid = '__test_id__' _text = _open_file('tests/testdata/paramgen_firstread.json') _text = json.loads(_text) mock[0].get( f"https://www.youtube.com/live_chat?v={vid}&is_popout=1", status=200, body=_text) try: - chat = LiveChatAsync(video_id='') + chat = LiveChatAsync(video_id='__test_id__') assert chat.is_alive() chat.terminate() assert not chat.is_alive() @@ -33,7 +33,7 @@ def test_MultiThread(mocker): responseMock.text = _text mocker.patch('requests.Session.get').return_value = responseMock try: - chat = LiveChatAsync(video_id='') + chat = LiveChatAsync(video_id='__test_id__') assert chat.is_alive() chat.terminate() assert not chat.is_alive() diff --git a/tests/test_livechat_2.py b/tests/test_livechat_2.py index 0fbe42a..42e42c2 100644 --- a/tests/test_livechat_2.py +++ b/tests/test_livechat_2.py @@ -20,7 +20,7 @@ def test_async_live_stream(*mock): r'^https://www.youtube.com/live_chat/get_live_chat\?continuation=.*$') _text = _open_file('tests/testdata/test_stream.json') mock[0].get(pattern, status=200, body=_text) - chat = LiveChatAsync(video_id='', processor=DummyProcessor()) + chat = LiveChatAsync(video_id='__test_id__', processor=DummyProcessor()) chats = await chat.get() rawdata = chats[0]["chatdata"] # assert fetching livachat data @@ -60,7 +60,7 @@ def test_async_replay_stream(*mock): mock[0].get(pattern_live, status=200, body=_text_live) mock[0].get(pattern_replay, status=200, body=_text_replay) - chat = LiveChatAsync(video_id='', processor=DummyProcessor()) + chat = LiveChatAsync(video_id='__test_id__', processor=DummyProcessor()) chats = await chat.get() rawdata = chats[0]["chatdata"] # assert fetching replaychat data @@ -93,7 +93,7 @@ def test_async_force_replay(*mock): mock[0].get(pattern_replay, status=200, body=_text_replay) # force replay chat = LiveChatAsync( - video_id='', processor=DummyProcessor(), force_replay=True) + video_id='__test_id__', processor=DummyProcessor(), force_replay=True) chats = await chat.get() rawdata = chats[0]["chatdata"] # assert fetching replaychat data @@ -119,7 +119,7 @@ def test_multithread_live_stream(mocker): mocker.patch( 'requests.Session.get').return_value.__enter__.return_value = responseMock - chat = LiveChat(video_id='test_id', processor=DummyProcessor()) + chat = LiveChat(video_id='__test_id__', processor=DummyProcessor()) chats = chat.get() rawdata = chats[0]["chatdata"] # assert fetching livachat data diff --git a/tests/test_videoinfo.py b/tests/test_videoinfo.py index 786977b..8a33075 100644 --- a/tests/test_videoinfo.py +++ b/tests/test_videoinfo.py @@ -1,11 +1,12 @@ from pytchat.tool.videoinfo import VideoInfo from pytchat.exceptions import InvalidVideoIdException -import pytest + def _open_file(path): - with open(path,mode ='r',encoding = 'utf-8') as f: + with open(path, mode='r', encoding='utf-8') as f: return f.read() + def _set_test_data(filepath, mocker): _text = _open_file(filepath) response_mock = mocker.Mock() @@ -13,23 +14,25 @@ def _set_test_data(filepath, mocker): response_mock.text = _text mocker.patch('requests.get').return_value = response_mock + def test_archived_page(mocker): _set_test_data('tests/testdata/videoinfo/archived_page.txt', mocker) - info = VideoInfo('test_id') + info = VideoInfo('__test_id__') actual_thumbnail_url = 'https://i.ytimg.com/vi/fzI9FNjXQ0o/hqdefault.jpg' - assert info.video_id == 'test_id' + assert info.video_id == '__test_id__' assert info.get_channel_name() == 'GitHub' assert info.get_thumbnail() == actual_thumbnail_url assert info.get_title() == 'GitHub Arctic Code Vault' assert info.get_channel_id() == 'UC7c3Kb6jYCRj4JOHHZTxKsQ' assert info.get_duration() == 148 + def test_live_page(mocker): _set_test_data('tests/testdata/videoinfo/live_page.txt', mocker) - info = VideoInfo('test_id') + info = VideoInfo('__test_id__') '''live page :duration = 0''' assert info.get_duration() == 0 - assert info.video_id == 'test_id' + assert info.video_id == '__test_id__' assert info.get_channel_name() == 'BGM channel' assert info.get_thumbnail() == \ 'https://i.ytimg.com/vi/fEvM-OUbaKs/hqdefault_live.jpg' @@ -38,25 +41,26 @@ def test_live_page(mocker): ' - 24/7 Live Stream - Slow Jazz') assert info.get_channel_id() == 'UCQINXHZqCU5i06HzxRkujfg' + def test_invalid_video_id(mocker): '''Test case invalid video_id is specified.''' _set_test_data( 'tests/testdata/videoinfo/invalid_video_id_page.txt', mocker) try: - _ = VideoInfo('test_id') + _ = VideoInfo('__test_id__') assert False except InvalidVideoIdException: assert True + def test_no_info(mocker): '''Test case the video page has renderer, but no info.''' _set_test_data( 'tests/testdata/videoinfo/no_info_page.txt', mocker) - info = VideoInfo('test_id') - assert info.video_id == 'test_id' + info = VideoInfo('__test_id__') + assert info.video_id == '__test_id__' assert info.get_channel_name() is None assert info.get_thumbnail() is None assert info.get_title() is None assert info.get_channel_id() is None assert info.get_duration() is None -