* youtube video url * WIP, channel /user/ and /c/ should be valid * unit tests passing * soundcloud artist url * soundcloud username * break configs with name change * Update all yamls with urls * update all docs * more negative url tests
150 lines
5.9 KiB
Python
150 lines
5.9 KiB
Python
import re
|
|
|
|
import pytest
|
|
|
|
from ytdl_sub.utils.exceptions import ValidationException
|
|
from ytdl_sub.validators.url_validator import SoundcloudUsernameUrlValidator
|
|
from ytdl_sub.validators.url_validator import YoutubeChannelUrlValidator
|
|
from ytdl_sub.validators.url_validator import YoutubePlaylistUrlValidator
|
|
from ytdl_sub.validators.url_validator import YoutubeVideoUrlValidator
|
|
|
|
|
|
class TestYoutubeVideoUrlValidator:
|
|
@pytest.mark.parametrize(
|
|
"url",
|
|
[
|
|
"youtu.be/dQw4w9WgXcQ",
|
|
"www.youtu.be/dQw4w9WgXcQ",
|
|
"https://youtu.be/dQw4w9WgXcQ",
|
|
"https://www.youtu.be/dQw4w9WgXcQ",
|
|
"https://www.youtube.com/watch?v=dQw4w9WgXcQ&feature=feedu",
|
|
"https://www.youtube.com/embed/dQw4w9WgXcQ",
|
|
"https://www.youtube.com/v/dQw4w9WgXcQ?version=3&hl=en_US",
|
|
],
|
|
)
|
|
def test_youtube_video_url_validator_success(self, url):
|
|
video_url = YoutubeVideoUrlValidator(name="unit test", value=url).video_url
|
|
assert video_url == "https://youtube.com/watch?v=dQw4w9WgXcQ"
|
|
|
|
@pytest.mark.parametrize(
|
|
"bad_url",
|
|
[
|
|
"utube.com/watch?v=sdfsadf",
|
|
"youtube.com/nope?v=sdfsadf",
|
|
"youtube.com",
|
|
"youtube.com/watch",
|
|
"youtube.com/watch?v=",
|
|
"youtu.be/",
|
|
"youtu.be",
|
|
],
|
|
)
|
|
def test_youtube_video_url_validator_fail(self, bad_url):
|
|
expected_error_msg = f"'{bad_url}' is not a valid Youtube video url."
|
|
with pytest.raises(ValidationException, match=re.escape(expected_error_msg)):
|
|
YoutubeVideoUrlValidator(name="unit test", value=bad_url)
|
|
|
|
|
|
class TestYoutubePlaylistUrlValidator:
|
|
@pytest.mark.parametrize(
|
|
"url",
|
|
[
|
|
"youtube.com/playlist?list=PLlaN88a7y2_plecYoJxvRFTLHVbIVAOoc",
|
|
"www.youtube.com/playlist?list=PLlaN88a7y2_plecYoJxvRFTLHVbIVAOoc",
|
|
"https://youtube.com/playlist?list=PLlaN88a7y2_plecYoJxvRFTLHVbIVAOoc",
|
|
"https://www.youtube.com/playlist?list=PLlaN88a7y2_plecYoJxvRFTLHVbIVAOoc",
|
|
],
|
|
)
|
|
def test_youtube_playlist_url_validator_success(self, url):
|
|
playlist_url = YoutubePlaylistUrlValidator(name="unit test", value=url).playlist_url
|
|
assert (
|
|
playlist_url == "https://youtube.com/playlist?list=PLlaN88a7y2_plecYoJxvRFTLHVbIVAOoc"
|
|
)
|
|
|
|
@pytest.mark.parametrize(
|
|
"bad_url",
|
|
[
|
|
"youpoop.com/playlist?list=PLlaN88a7y2_plecYoJxvRFTLHVbIVAOoc",
|
|
"youtube.com/playlistlist=PLlaN88a7y2_plecYoJxvRFTLHVbIVAOoc",
|
|
"youtube.com",
|
|
"youtube.com/playlist/asdfsdfsdf",
|
|
"youtube.com/playlist?list=",
|
|
"youtube.com/playlist",
|
|
],
|
|
)
|
|
def test_youtube_playlist_url_validator_fail(self, bad_url):
|
|
expected_error_msg = f"'{bad_url}' is not a valid Youtube playlist url."
|
|
with pytest.raises(ValidationException, match=re.escape(expected_error_msg)):
|
|
YoutubePlaylistUrlValidator(name="unit test", value=bad_url)
|
|
|
|
|
|
class TestYoutubeChannelUrlValidator:
|
|
@pytest.mark.parametrize(
|
|
"url, expected_url",
|
|
[
|
|
(
|
|
"https://www.youtube.com/channel/UCuAXFkgsw1L7xaCfnd5JJOw",
|
|
"https://youtube.com/channel/UCuAXFkgsw1L7xaCfnd5JJOw",
|
|
),
|
|
(
|
|
"https://youtube.com/channel/UCuAXFkgsw1L7xaCfnd5JJOw",
|
|
"https://youtube.com/channel/UCuAXFkgsw1L7xaCfnd5JJOw",
|
|
),
|
|
(
|
|
"youtube.com/channel/UCuAXFkgsw1L7xaCfnd5JJOw",
|
|
"https://youtube.com/channel/UCuAXFkgsw1L7xaCfnd5JJOw",
|
|
),
|
|
(
|
|
"www.youtube.com/channel/UCuAXFkgsw1L7xaCfnd5JJOw",
|
|
"https://youtube.com/channel/UCuAXFkgsw1L7xaCfnd5JJOw",
|
|
),
|
|
(
|
|
"https://www.youtube.com/c/RickastleyCoUkOfficial",
|
|
"https://youtube.com/c/RickastleyCoUkOfficial",
|
|
),
|
|
(
|
|
"https://www.youtube.com/user/videogamedunkey",
|
|
"https://youtube.com/user/videogamedunkey",
|
|
),
|
|
],
|
|
)
|
|
def test_youtube_channel_url_validator_success(self, url, expected_url):
|
|
channel_url = YoutubeChannelUrlValidator(name="unit test", value=url).channel_url
|
|
assert channel_url == expected_url
|
|
|
|
@pytest.mark.parametrize(
|
|
"bad_url",
|
|
[
|
|
"www.youtube.com/cha/UCuAXFkgsw1L7xaCfnd5JJOw",
|
|
"www.nopetube.com/channel/asdfdsf",
|
|
"www.youtube.com/channel/",
|
|
"www.youtube.com/channel",
|
|
"www.youtube.com/channell/asdfasdf",
|
|
],
|
|
)
|
|
def test_youtube_channel_url_validator_fail(self, bad_url):
|
|
expected_error_msg = f"'{bad_url}' is not a valid Youtube channel url."
|
|
with pytest.raises(ValidationException, match=re.escape(expected_error_msg)):
|
|
YoutubeChannelUrlValidator(name="unit test", value=bad_url)
|
|
|
|
|
|
class TestSoundcloudUsernameUrlValidator:
|
|
@pytest.mark.parametrize(
|
|
"url",
|
|
[
|
|
"soundcloud.com/poop",
|
|
"www.soundcloud.com/poop",
|
|
"https://soundcloud.com/poop",
|
|
"https://www.soundcloud.com/poop",
|
|
"https://www.soundcloud.com/poop/albums",
|
|
"https://www.soundcloud.com/poop?link=clipboard_share",
|
|
],
|
|
)
|
|
def test_soundcloud_artist_url_validator_success(self, url):
|
|
username_url = SoundcloudUsernameUrlValidator(name="unit test", value=url).username_url
|
|
assert username_url == "https://soundcloud.com/poop"
|
|
|
|
@pytest.mark.parametrize("bad_url", ["soundcloud.com", "soundnope.lol", "soundcloud.comm/"])
|
|
def test_youtube_playlist_url_validator_fail(self, bad_url):
|
|
expected_error_msg = f"'{bad_url}' is not a valid Soundcloud username url."
|
|
with pytest.raises(ValidationException, match=re.escape(expected_error_msg)):
|
|
SoundcloudUsernameUrlValidator(name="unit test", value=bad_url)
|