Spaces:
Sleeping
Sleeping
"""Test the musicbrainz_client module.""" | |
import unittest | |
from unittest.mock import patch | |
from src.modules.musicbrainz_client import get_music_infos | |
class TestGetMusicInfos(unittest.TestCase): | |
def test_get_music_infos(self, mock_search_release_groups, mock_search_artists): | |
# Arrange | |
artist = 'UltraSinger' | |
title = 'That\'s Rocking!' | |
search = f'{artist} - {title} (UltrStar 2023) FULL HD' | |
# Set up mock return values for the MusicBrainz API calls | |
mock_search_artists.return_value = { | |
'artist-list': [ | |
{'name': artist} | |
] | |
} | |
mock_search_release_groups.return_value = { | |
'release-group-list': [ | |
{ | |
'title': title, | |
'artist-credit-phrase': artist, | |
'first-release-date': '2023-01-01', | |
'tag-list': [ | |
{'name': 'Genre 1'}, | |
{'name': 'Genre 2'} | |
] | |
} | |
] | |
} | |
# Call the function to test | |
title, artist, year, genre = get_music_infos(search) | |
# Assert the returned values | |
self.assertEqual(title, 'That\'s Rocking!') | |
self.assertEqual(artist, 'UltraSinger') | |
self.assertEqual(year, '2023-01-01') | |
self.assertEqual(genre, 'Genre 1,Genre 2,') | |
def test_get_music_infos_when_title_and_artist_are_the_same(self, mock_search_release_groups, mock_search_artists): | |
# Arrange | |
artist = "ArtistIsTitle" | |
title = "ArtistIsTitle" | |
search_not_same = "ArtistIsTitle - ArtistNotTitle" | |
search_is_same = f"{artist} - {title}" | |
# Set up mock return values for the MusicBrainz API calls | |
mock_search_artists.return_value = { | |
'artist-list': [ | |
{'name': artist} | |
] | |
} | |
mock_search_release_groups.return_value = { | |
'release-group-list': [ | |
{ | |
'title': title, | |
'artist-credit-phrase': artist, | |
} | |
] | |
} | |
# Act search_not_same but musicbrainz returns the same artist and title | |
title, artist, year, genre = get_music_infos(search_not_same) | |
# Assert | |
self.assertEqual(title, None) | |
self.assertEqual(artist, None) | |
self.assertEqual(year, None) | |
self.assertEqual(genre, None) | |
# Act search_is_same and musicbrainz returns the same artist and title | |
title, artist, year, genre = get_music_infos(search_is_same) | |
# Assert | |
self.assertEqual(title, 'ArtistIsTitle') | |
self.assertEqual(artist, 'ArtistIsTitle') | |
self.assertEqual(year, None) | |
self.assertEqual(genre, None) | |
def test_get_music_infos(self, mock_search_release_groups, mock_search_artists): | |
# Arrange | |
artist = 'UltraSinger' | |
title = 'That\'s Rocking!' | |
search = f'{artist} - {title} (UltrStar 2023) FULL HD' | |
# Set up mock return values for the MusicBrainz API calls | |
mock_search_artists.return_value = { | |
'artist-list': [ | |
{'name': f' {artist} '} # Also test leading and trailing whitespaces | |
] | |
} | |
mock_search_release_groups.return_value = { | |
'release-group-list': [ | |
{ | |
'title': f' {title} ', # Also test leading and trailing whitespaces | |
'artist-credit-phrase': f' {artist} ', # Also test leading and trailing whitespaces | |
'first-release-date': ' 2023-01-01 ', # Also test leading and trailing whitespaces | |
'tag-list': [ | |
{'name': ' Genre 1 '}, # Also test leading and trailing whitespaces | |
{'name': ' Genre 2 '} # Also test leading and trailing whitespaces | |
] | |
} | |
] | |
} | |
# Act | |
title, artist, year, genre = get_music_infos(search) | |
# Assert | |
self.assertEqual(title, 'That\'s Rocking!') | |
self.assertEqual(artist, 'UltraSinger') | |
self.assertEqual(year, '2023-01-01') | |
self.assertEqual(genre, 'Genre 1,Genre 2,') | |
def test_get_empty_artist_music_infos(self, mock_search_release_groups, mock_search_artists): | |
# Arrange | |
artist = 'UltraSinger' | |
title = 'That\'s Rocking!' | |
search = f'{artist} - {title} (UltrStar 2023) FULL HD' | |
# Set up mock return values for the MusicBrainz API calls | |
mock_search_artists.return_value = { | |
'artist-list': [] | |
} | |
mock_search_release_groups.return_value = { | |
'release-group-list': [ | |
{ | |
'title': f' {title} ', # Also test leading and trailing whitespaces | |
'artist-credit-phrase': f' {artist} ', # Also test leading and trailing whitespaces | |
'first-release-date': ' 2023-01-01 ', # Also test leading and trailing whitespaces | |
'tag-list': [ | |
{'name': ' Genre 1 '}, # Also test leading and trailing whitespaces | |
{'name': ' Genre 2 '} # Also test leading and trailing whitespaces | |
] | |
} | |
] | |
} | |
# Act | |
title, artist, year, genre = get_music_infos(search) | |
# Assert | |
self.assertEqual(title, None) | |
self.assertEqual(artist, None) | |
self.assertEqual(year, None) | |
self.assertEqual(genre, None) | |
def test_get_empty_release_music_infos(self, mock_search_release_groups, mock_search_artists): | |
# Arrange | |
artist = 'UltraSinger' | |
title = 'That\'s Rocking!' | |
search = f'{artist} - {title} (UltrStar 2023) FULL HD' | |
# Set up mock return values for the MusicBrainz API calls | |
mock_search_artists.return_value = { | |
'artist-list': [ | |
{'name': f' {artist} '} # Also test leading and trailing whitespaces | |
] | |
} | |
mock_search_release_groups.return_value = { | |
'release-group-list': [] | |
} | |
# Act | |
title, artist, year, genre = get_music_infos(search) | |
# Assert | |
self.assertEqual(title, None) | |
self.assertEqual(artist, None) | |
self.assertEqual(year, None) | |
self.assertEqual(genre, None) | |
if __name__ == '__main__': | |
unittest.main() | |