spotfm/tests/test_counter.py

421 lines
12 KiB
Python

import unittest
from unittest.mock import Mock, MagicMock, create_autospec, patch
from dataclasses import fields
from spotfm.maths.counter import Counter
from spotframework.model.uri import Uri
from spotframework.net.network import SpotifyNetworkException
from fmframework.net.network import LastFMNetworkException
class TestCounter(unittest.TestCase):
### ARTIST ###
def test_artist_no_input(self):
spotnet = Mock()
fmnet = Mock()
counter = Counter(spotnet=spotnet, fmnet=fmnet)
with self.assertRaises(ValueError):
counter.count_artist()
def test_artist_with_artist_obj(self):
spotnet = Mock()
fmnet = Mock()
return_mock = Mock()
return_mock.user_scrobbles = 10
fmnet.artist.return_value = return_mock
counter = Counter(spotnet=spotnet, fmnet=fmnet)
artist_mock = Mock()
artist_mock.name = 'artist'
answer = counter.count_artist(artist=artist_mock)
fmnet.artist.assert_called_once()
self.assertEqual(answer, 10)
def test_artist_with_artist_obj_no_response(self):
spotnet = Mock()
fmnet = Mock()
fmnet.artist.return_value = None
counter = Counter(spotnet=spotnet, fmnet=fmnet)
artist_mock = Mock()
artist_mock.name = 'artist'
answer = counter.count_artist(artist=artist_mock)
fmnet.artist.assert_called_once()
self.assertEqual(answer, 0)
def test_artist_network_error(self):
spotnet = Mock()
fmnet = Mock()
return_mock = Mock()
return_mock.user_scrobbles = 10
fmnet.artist.side_effect = LastFMNetworkException(500, 5)
counter = Counter(spotnet=spotnet, fmnet=fmnet)
artist_mock = Mock()
artist_mock.name = 'artist'
answer = counter.count_artist(artist=artist_mock)
fmnet.artist.assert_called_once()
self.assertEqual(answer, 0)
def test_artist_with_uri(self):
spotnet = Mock()
fmnet = Mock()
return_mock = Mock()
return_mock.user_scrobbles = 10
fmnet.artist.return_value = return_mock
spot_return_mock = Mock()
spot_return_mock.name = 'artist'
spotnet.artist.return_value = spot_return_mock
counter = Counter(spotnet=spotnet, fmnet=fmnet)
uri_mock = Mock()
uri_mock.object_type = Uri.ObjectType.artist
answer = counter.count_artist(uri=uri_mock)
fmnet.artist.assert_called_once()
self.assertEqual(answer, 10)
def test_artist_with_uri_wrong_type(self):
spotnet = Mock()
fmnet = Mock()
return_mock = Mock()
return_mock.user_scrobbles = 10
fmnet.artist.return_value = return_mock
spot_return_mock = Mock()
spot_return_mock.name = 'artist'
spotnet.artist.return_value = spot_return_mock
counter = Counter(spotnet=spotnet, fmnet=fmnet)
uri_mock = Mock()
uri_mock.object_type = Uri.ObjectType.track
with self.assertRaises(ValueError):
answer = counter.count_artist(uri=uri_mock)
fmnet.artist.assert_called_once()
self.assertEqual(answer, 10)
def test_artist_with_uri_network_error(self):
spotnet = Mock()
fmnet = Mock()
return_mock = Mock()
return_mock.user_scrobbles = 10
fmnet.artist.return_value = return_mock
spot_return_mock = Mock()
spot_return_mock.name = 'artist'
spotnet.artist.return_value = spot_return_mock
spotnet.artist.side_effect = SpotifyNetworkException(500)
counter = Counter(spotnet=spotnet, fmnet=fmnet)
uri_mock = Mock()
uri_mock.object_type = Uri.ObjectType.artist
answer = counter.count_artist(uri=uri_mock)
spotnet.artist.assert_called_once()
fmnet.artist.assert_not_called()
self.assertEqual(answer, 0)
### ALBUM ###
def test_album_no_input(self):
spotnet = Mock()
fmnet = Mock()
counter = Counter(spotnet=spotnet, fmnet=fmnet)
with self.assertRaises(ValueError):
counter.count_album()
def test_album_with_artist_obj(self):
spotnet = Mock()
fmnet = Mock()
return_mock = Mock()
return_mock.user_scrobbles = 10
fmnet.album.return_value = return_mock
counter = Counter(spotnet=spotnet, fmnet=fmnet)
album_mock = Mock()
album_mock.name = 'album'
album_mock.artists = [Mock()]
answer = counter.count_album(album=album_mock)
fmnet.album.assert_called_once()
self.assertEqual(answer, 10)
def test_album_with_album_obj_no_response(self):
spotnet = Mock()
fmnet = Mock()
fmnet.album.return_value = None
counter = Counter(spotnet=spotnet, fmnet=fmnet)
album_mock = Mock()
album_mock.name = 'album'
album_mock.artists = [Mock()]
answer = counter.count_album(album=album_mock)
fmnet.album.assert_called_once()
self.assertEqual(answer, 0)
def test_album_network_error(self):
spotnet = Mock()
fmnet = Mock()
return_mock = Mock()
return_mock.user_scrobbles = 10
fmnet.album.side_effect = LastFMNetworkException(500, 5)
counter = Counter(spotnet=spotnet, fmnet=fmnet)
album_mock = Mock()
album_mock.name = 'album'
album_mock.artists = [Mock()]
answer = counter.count_album(album=album_mock)
fmnet.album.assert_called_once()
self.assertEqual(answer, 0)
def test_album_with_uri(self):
spotnet = Mock()
fmnet = Mock()
return_mock = Mock()
return_mock.user_scrobbles = 10
fmnet.album.return_value = return_mock
spot_return_mock = Mock()
spot_return_mock.name = 'album'
spot_return_mock.artists = [Mock()]
spotnet.album.return_value = spot_return_mock
counter = Counter(spotnet=spotnet, fmnet=fmnet)
uri_mock = Mock()
uri_mock.object_type = Uri.ObjectType.album
answer = counter.count_album(uri=uri_mock)
fmnet.album.assert_called_once()
self.assertEqual(answer, 10)
def test_album_with_uri_wrong_type(self):
spotnet = Mock()
fmnet = Mock()
return_mock = Mock()
return_mock.user_scrobbles = 10
fmnet.album.return_value = return_mock
spot_return_mock = Mock()
spot_return_mock.name = 'album'
spotnet.album.return_value = spot_return_mock
counter = Counter(spotnet=spotnet, fmnet=fmnet)
uri_mock = Mock()
uri_mock.object_type = Uri.ObjectType.track
with self.assertRaises(ValueError):
answer = counter.count_album(uri=uri_mock)
fmnet.album.assert_called_once()
self.assertEqual(answer, 10)
def test_album_with_uri_network_error(self):
spotnet = Mock()
fmnet = Mock()
return_mock = Mock()
return_mock.user_scrobbles = 10
fmnet.album.return_value = return_mock
spot_return_mock = Mock()
spot_return_mock.name = 'album'
spotnet.album.return_value = spot_return_mock
spotnet.album.side_effect = SpotifyNetworkException(500)
counter = Counter(spotnet=spotnet, fmnet=fmnet)
uri_mock = Mock()
uri_mock.object_type = Uri.ObjectType.album
answer = counter.count_album(uri=uri_mock)
spotnet.album.assert_called_once()
fmnet.album.assert_not_called()
self.assertEqual(answer, 0)
### TRACK ###
def test_track_no_input(self):
spotnet = Mock()
fmnet = Mock()
counter = Counter(spotnet=spotnet, fmnet=fmnet)
with self.assertRaises(ValueError):
counter.count_track()
def test_track_with_artist_obj(self):
spotnet = Mock()
fmnet = Mock()
return_mock = Mock()
return_mock.user_scrobbles = 10
fmnet.track.return_value = return_mock
counter = Counter(spotnet=spotnet, fmnet=fmnet)
track_mock = Mock()
track_mock.name = 'track'
track_mock.artists = [Mock()]
answer = counter.count_track(track=track_mock)
fmnet.track.assert_called_once()
self.assertEqual(answer, 10)
def test_track_with_album_obj_no_response(self):
spotnet = Mock()
fmnet = Mock()
fmnet.track.return_value = None
counter = Counter(spotnet=spotnet, fmnet=fmnet)
track_mock = Mock()
track_mock.name = 'track'
track_mock.artists = [Mock()]
answer = counter.count_track(track=track_mock)
fmnet.track.assert_called_once()
self.assertEqual(answer, 0)
def test_track_network_error(self):
spotnet = Mock()
fmnet = Mock()
return_mock = Mock()
return_mock.user_scrobbles = 10
fmnet.track.side_effect = LastFMNetworkException(500, 5)
counter = Counter(spotnet=spotnet, fmnet=fmnet)
track_mock = Mock()
track_mock.name = 'track'
track_mock.artists = [Mock()]
answer = counter.count_track(track=track_mock)
fmnet.track.assert_called_once()
self.assertEqual(answer, 0)
def test_track_with_uri(self):
spotnet = Mock()
fmnet = Mock()
return_mock = Mock()
return_mock.user_scrobbles = 10
fmnet.track.return_value = return_mock
spot_return_mock = Mock()
spot_return_mock.name = 'track'
spot_return_mock.artists = [Mock()]
spotnet.track.return_value = spot_return_mock
counter = Counter(spotnet=spotnet, fmnet=fmnet)
uri_mock = Mock()
uri_mock.object_type = Uri.ObjectType.track
answer = counter.count_track(uri=uri_mock)
fmnet.track.assert_called_once()
self.assertEqual(answer, 10)
def test_track_with_uri_wrong_type(self):
spotnet = Mock()
fmnet = Mock()
return_mock = Mock()
return_mock.user_scrobbles = 10
fmnet.track.return_value = return_mock
spot_return_mock = Mock()
spot_return_mock.name = 'track'
spotnet.track.return_value = spot_return_mock
counter = Counter(spotnet=spotnet, fmnet=fmnet)
uri_mock = Mock()
uri_mock.object_type = Uri.ObjectType.album
with self.assertRaises(ValueError):
answer = counter.count_track(uri=uri_mock)
fmnet.track.assert_called_once()
self.assertEqual(answer, 10)
def test_track_with_uri_network_error(self):
spotnet = Mock()
fmnet = Mock()
return_mock = Mock()
return_mock.user_scrobbles = 10
fmnet.track.return_value = return_mock
spot_return_mock = Mock()
spot_return_mock.name = 'track'
spotnet.track.return_value = spot_return_mock
spotnet.track.side_effect = SpotifyNetworkException(500)
counter = Counter(spotnet=spotnet, fmnet=fmnet)
uri_mock = Mock()
uri_mock.object_type = Uri.ObjectType.track
answer = counter.count_track(uri=uri_mock)
spotnet.track.assert_called_once()
fmnet.track.assert_not_called()
self.assertEqual(answer, 0)
#TODO: count_playlist method
#TODO: count method
if __name__ == '__main__':
unittest.main()