From 585a432bc9f6b4e165953794582d281394cb30e9 Mon Sep 17 00:00:00 2001 From: jbannon Date: Wed, 30 Mar 2022 18:13:44 +0000 Subject: [PATCH] more formatter tests, begin soundcloud unit tests --- tests/unit/entries/conftest.py | 42 ++++++++ tests/unit/entries/test_entry.py | 25 ++--- tests/unit/entries/test_soundcloud_entries.py | 95 +++++++++++++++++++ 3 files changed, 144 insertions(+), 18 deletions(-) create mode 100644 tests/unit/entries/test_soundcloud_entries.py diff --git a/tests/unit/entries/conftest.py b/tests/unit/entries/conftest.py index a817c126..76e119c9 100644 --- a/tests/unit/entries/conftest.py +++ b/tests/unit/entries/conftest.py @@ -73,3 +73,45 @@ def mock_entry_kwargs(uid, title, ext, upload_date, thumbnail): @pytest.fixture def mock_entry(mock_entry_kwargs): return Entry(**mock_entry_kwargs) + + +@pytest.fixture +def validate_entry_properties( + uid, + title, + upload_date, + upload_year, + ext, + thumbnail, + thumbnail_ext, + download_file_name, +): + def _validate_entry_properties(entry: Entry): + assert entry.uid == uid + assert entry.title == title + # Title does not require sanitizing, so should be the same + assert entry.sanitized_title == title + assert entry.upload_date == upload_date + assert entry.upload_year == upload_year + assert entry.ext == ext + assert entry.thumbnail == thumbnail + assert entry.thumbnail_ext == thumbnail_ext + assert entry.download_file_name == download_file_name + + return True + + return _validate_entry_properties + + +@pytest.fixture +def validate_entry_dict_contains_valid_formatters(): + def _validate_entry_dict_contains_valid_formatters(entry: Entry): + for key, value in entry.to_dict().items(): + expected_string = f"test {value} formatting works" + format_string = f"test {{{key}}} formatting works" + + assert entry.apply_formatter(format_string) == expected_string + + return True + + return _validate_entry_dict_contains_valid_formatters diff --git a/tests/unit/entries/test_entry.py b/tests/unit/entries/test_entry.py index de4cb58a..d00c727c 100644 --- a/tests/unit/entries/test_entry.py +++ b/tests/unit/entries/test_entry.py @@ -6,29 +6,18 @@ class TestEntry(object): def test_entry_properties( self, mock_entry, - uid, - title, - upload_date, - upload_year, - ext, - thumbnail, - thumbnail_ext, - download_file_name, + validate_entry_properties, ): - assert mock_entry.uid == uid - assert mock_entry.title == title - # Title does not require sanitizing, so should be the same - assert mock_entry.sanitized_title == title - assert mock_entry.upload_date == upload_date - assert mock_entry.upload_year == upload_year - assert mock_entry.ext == ext - assert mock_entry.thumbnail == thumbnail - assert mock_entry.thumbnail_ext == thumbnail_ext - assert mock_entry.download_file_name == download_file_name + assert validate_entry_properties(mock_entry) def test_entry_to_dict(self, mock_entry, mock_entry_to_dict): assert mock_entry.to_dict() == mock_entry_to_dict + def test_entry_dict_contains_valid_formatters( + self, mock_entry, validate_entry_dict_contains_valid_formatters + ): + assert validate_entry_dict_contains_valid_formatters(mock_entry) + def test_entry_file_path(self, mock_entry, download_file_name): relative_directory = tempfile.TemporaryDirectory() diff --git a/tests/unit/entries/test_soundcloud_entries.py b/tests/unit/entries/test_soundcloud_entries.py new file mode 100644 index 00000000..4748e966 --- /dev/null +++ b/tests/unit/entries/test_soundcloud_entries.py @@ -0,0 +1,95 @@ +import pytest + +from ytdl_subscribe.entries.soundcloud import SoundcloudTrack + + +@pytest.fixture +def track_number(): + return 1 + + +@pytest.fixture +def track_number_padded(): + return "01" + + +@pytest.fixture +def url(): + return "soundcloud.com/artist/track-asdfasdf" + + +@pytest.fixture +def is_premiere(): + return False + + +@pytest.fixture +def mock_soundcloud_track_to_dict( + mock_entry_to_dict, + title, + upload_year, + track_number, + track_number_padded, + is_premiere, +): + return dict( + mock_entry_to_dict, + **{ + "track_number": track_number, + "track_number_padded": track_number_padded, + "album": title, + "sanitized_album": title, + "album_year": upload_year, + "is_premiere": is_premiere, + } + ) + + +@pytest.fixture +def mock_soundcloud_track_kwargs(mock_entry_kwargs, url): + return dict(mock_entry_kwargs, **{"url": url}) + + +@pytest.fixture +def mock_soundcloud_track(mock_soundcloud_track_kwargs): + return SoundcloudTrack(**mock_soundcloud_track_kwargs) + + +@pytest.fixture +def validate_soundcloud_track_properties( + validate_entry_properties, + title, + upload_year, + track_number, + track_number_padded, + is_premiere, +): + def _validate_soundcloud_track_properties(soundcloud_track: SoundcloudTrack): + assert validate_entry_properties(soundcloud_track) + assert soundcloud_track.track_number == track_number + assert soundcloud_track.track_number_padded == track_number_padded + assert soundcloud_track.album == title + assert soundcloud_track.sanitized_album == title + assert soundcloud_track.album_year == upload_year + assert soundcloud_track.is_premiere == is_premiere + + return True + + return _validate_soundcloud_track_properties + + +class TestSoundcloudTrack(object): + def test_properties( + self, + mock_soundcloud_track, + validate_soundcloud_track_properties, + ): + assert validate_soundcloud_track_properties(mock_soundcloud_track) + + def test_to_dict(self, mock_soundcloud_track, mock_soundcloud_track_to_dict): + assert mock_soundcloud_track.to_dict() == mock_soundcloud_track_to_dict + + def test_soundcloud_dict_contains_valid_formatters( + self, mock_soundcloud_track, validate_entry_dict_contains_valid_formatters + ): + assert validate_entry_dict_contains_valid_formatters(mock_soundcloud_track)