Esempio n. 1
0
    def test_eq(self, lib_mock):
        sp_album = spotify.ffi.cast('sp_album *', 42)
        album1 = spotify.Album(self.session, sp_album=sp_album)
        album2 = spotify.Album(self.session, sp_album=sp_album)

        self.assertTrue(album1 == album2)
        self.assertFalse(album1 == 'foo')
Esempio n. 2
0
    def test_create_from_uri(self, link_mock, lib_mock):
        sp_album = spotify.ffi.new('int *')
        link_instance_mock = link_mock.return_value
        link_instance_mock.as_album.return_value = spotify.Album(
            sp_album=sp_album)
        uri = 'spotify:album:foo'

        result = spotify.Album(uri)

        link_mock.assert_called_with(uri)
        link_instance_mock.as_album.assert_called_with()
        lib_mock.sp_album_add_ref.assert_called_with(sp_album)
        self.assertEqual(result._sp_album, sp_album)
Esempio n. 3
0
    def test_cover(self, image_mock, lib_mock):
        sp_album = spotify.ffi.cast('sp_album *', 42)
        album = spotify.Album(self.session, sp_album=sp_album)
        sp_image_id = spotify.ffi.new('char[]', b'cover-id')
        lib_mock.sp_album_cover.return_value = sp_image_id
        sp_image = spotify.ffi.cast('sp_image *', 43)
        lib_mock.sp_image_create.return_value = sp_image
        image_mock.return_value = mock.sentinel.image
        image_size = spotify.ImageSize.SMALL
        callback = mock.Mock()

        result = album.cover(image_size, callback=callback)

        self.assertIs(result, mock.sentinel.image)
        lib_mock.sp_album_cover.assert_called_with(sp_album, int(image_size))
        lib_mock.sp_image_create.assert_called_with(self.session._sp_session,
                                                    sp_image_id)

        # Since we *created* the sp_image, we already have a refcount of 1 and
        # shouldn't increase the refcount when wrapping this sp_image in an
        # Image object
        image_mock.assert_called_with(self.session,
                                      sp_image=sp_image,
                                      add_ref=False,
                                      callback=callback)
Esempio n. 4
0
    def test_create_from_uri_fail_raises_error(self, link_mock, lib_mock):
        link_instance_mock = link_mock.return_value
        link_instance_mock.as_album.return_value = None
        uri = 'spotify:album:foo'

        with self.assertRaises(ValueError):
            spotify.Album(uri)
Esempio n. 5
0
    def test_load(self, load_mock, lib_mock):
        sp_album = spotify.ffi.cast('sp_album *', 42)
        album = spotify.Album(self.session, sp_album=sp_album)

        album.load(10)

        load_mock.assert_called_with(self.session, album, timeout=10)
Esempio n. 6
0
    def test_browser_is_gone_before_callback_is_called(self, lib_mock):
        tests.create_session()
        sp_album = spotify.ffi.new('int *')
        album = spotify.Album(sp_album=sp_album)
        sp_albumbrowse = spotify.ffi.cast('sp_albumbrowse *',
                                          spotify.ffi.new('int *'))
        lib_mock.sp_albumbrowse_create.return_value = sp_albumbrowse
        callback = mock.Mock()

        result = spotify.AlbumBrowser(album=album, callback=callback)
        complete_event = result.complete_event
        result = None  # noqa
        tests.gc_collect()

        # FIXME The mock keeps the handle/userdata alive, thus the album is
        # kept alive, and this test doesn't test what it is intended to test.
        albumbrowse_complete_cb = (
            lib_mock.sp_albumbrowse_create.call_args[0][2])
        userdata = lib_mock.sp_albumbrowse_create.call_args[0][3]
        albumbrowse_complete_cb(sp_albumbrowse, userdata)

        complete_event.wait(3)
        self.assertEqual(callback.call_count, 1)
        self.assertEqual(callback.call_args[0][0]._sp_albumbrowse,
                         sp_albumbrowse)
Esempio n. 7
0
    def test_browser_is_gone_before_callback_is_called(self, lib_mock):
        sp_album = spotify.ffi.cast('sp_album *', 43)
        album = spotify.Album(self.session, sp_album=sp_album)
        sp_albumbrowse = spotify.ffi.cast('sp_albumbrowse *', 42)
        lib_mock.sp_albumbrowse_create.return_value = sp_albumbrowse
        callback = mock.Mock()

        result = spotify.AlbumBrowser(self.session,
                                      album=album,
                                      callback=callback)
        loaded_event = result.loaded_event
        result = None  # noqa
        tests.gc_collect()

        # The mock keeps the handle/userdata alive, thus this test doesn't
        # really test that session._callback_handles keeps the handle alive.
        albumbrowse_complete_cb = (
            lib_mock.sp_albumbrowse_create.call_args[0][2])
        userdata = lib_mock.sp_albumbrowse_create.call_args[0][3]
        albumbrowse_complete_cb(sp_albumbrowse, userdata)

        loaded_event.wait(3)
        self.assertEqual(callback.call_count, 1)
        self.assertEqual(callback.call_args[0][0]._sp_albumbrowse,
                         sp_albumbrowse)
Esempio n. 8
0
    def test_load(self, load_mock, lib_mock):
        sp_album = spotify.ffi.new('int *')
        album = spotify.Album(sp_album=sp_album)

        album.load(10)

        load_mock.assert_called_with(album, timeout=10)
Esempio n. 9
0
    def test_releases_sp_album_when_album_dies(self, lib_mock):
        sp_album = spotify.ffi.new('int *')

        album = spotify.Album(sp_album=sp_album)
        album = None  # noqa
        tests.gc_collect()

        lib_mock.sp_album_release.assert_called_with(sp_album)
Esempio n. 10
0
    def test_releases_sp_album_when_album_dies(self, lib_mock):
        sp_album = spotify.ffi.cast('sp_album *', 42)

        album = spotify.Album(self.session, sp_album=sp_album)
        album = None  # noqa
        tests.gc_collect()

        lib_mock.sp_album_release.assert_called_with(sp_album)
Esempio n. 11
0
    def test_type(self, lib_mock):
        lib_mock.sp_album_type.return_value = int(spotify.AlbumType.SINGLE)
        sp_album = spotify.ffi.new('int *')
        album = spotify.Album(sp_album=sp_album)

        result = album.type

        lib_mock.sp_album_type.assert_called_once_with(sp_album)
        self.assertIs(result, spotify.AlbumType.SINGLE)
Esempio n. 12
0
    def test_year(self, lib_mock):
        lib_mock.sp_album_year.return_value = 2013
        sp_album = spotify.ffi.new('int *')
        album = spotify.Album(sp_album=sp_album)

        result = album.year

        lib_mock.sp_album_year.assert_called_once_with(sp_album)
        self.assertEqual(result, 2013)
Esempio n. 13
0
    def test_is_available_is_none_if_unloaded(self, lib_mock):
        lib_mock.sp_album_is_loaded.return_value = 0
        sp_album = spotify.ffi.new('int *')
        album = spotify.Album(sp_album=sp_album)

        result = album.is_available

        lib_mock.sp_album_is_loaded.assert_called_once_with(sp_album)
        self.assertIsNone(result)
Esempio n. 14
0
    def test_name_is_none_if_unloaded(self, lib_mock):
        lib_mock.sp_album_name.return_value = spotify.ffi.new('char[]', b'')
        sp_album = spotify.ffi.new('int *')
        album = spotify.Album(sp_album=sp_album)

        result = album.name

        lib_mock.sp_album_name.assert_called_once_with(sp_album)
        self.assertIsNone(result)
Esempio n. 15
0
    def test_artist_if_unloaded(self, artist_lib_mock, lib_mock):
        lib_mock.sp_album_artist.return_value = spotify.ffi.NULL
        sp_album = spotify.ffi.cast('sp_album *', 42)
        album = spotify.Album(self.session, sp_album=sp_album)

        result = album.artist

        lib_mock.sp_album_artist.assert_called_with(sp_album)
        self.assertIsNone(result)
Esempio n. 16
0
    def test_type_is_none_if_unloaded(self, lib_mock):
        lib_mock.sp_album_is_loaded.return_value = 0
        sp_album = spotify.ffi.cast('sp_album *', 42)
        album = spotify.Album(self.session, sp_album=sp_album)

        result = album.type

        lib_mock.sp_album_is_loaded.assert_called_once_with(sp_album)
        self.assertIsNone(result)
Esempio n. 17
0
    def test_is_loaded(self, lib_mock):
        lib_mock.sp_album_is_loaded.return_value = 1
        sp_album = spotify.ffi.cast('sp_album *', 42)
        album = spotify.Album(self.session, sp_album=sp_album)

        result = album.is_loaded

        lib_mock.sp_album_is_loaded.assert_called_once_with(sp_album)
        self.assertTrue(result)
Esempio n. 18
0
    def test_is_available(self, lib_mock):
        lib_mock.sp_album_is_available.return_value = 1
        sp_album = spotify.ffi.new('int *')
        album = spotify.Album(sp_album=sp_album)

        result = album.is_available

        lib_mock.sp_album_is_available.assert_called_once_with(sp_album)
        self.assertTrue(result)
Esempio n. 19
0
    def test_repr(self, link_mock, lib_mock):
        link_instance_mock = link_mock.return_value
        link_instance_mock.uri = 'foo'
        sp_album = spotify.ffi.cast('sp_album *', 42)
        album = spotify.Album(self.session, sp_album=sp_album)

        result = repr(album)

        self.assertEqual(result, 'Album(%r)' % 'foo')
Esempio n. 20
0
    def test_repr(self, link_mock, lib_mock):
        link_instance_mock = link_mock.return_value
        link_instance_mock.uri = 'foo'
        sp_album = spotify.ffi.new('int *')
        album = spotify.Album(sp_album=sp_album)

        result = repr(album)

        self.assertEqual(result, 'Album(%r)' % 'foo')
Esempio n. 21
0
    def test_artist_if_unloaded(self, artist_lib_mock, lib_mock):
        lib_mock.sp_album_artist.return_value = spotify.ffi.NULL
        sp_album = spotify.ffi.new('int *')
        album = spotify.Album(sp_album=sp_album)

        result = album.artist

        lib_mock.sp_album_artist.assert_called_with(sp_album)
        self.assertIsNone(result)
Esempio n. 22
0
    def test_year(self, lib_mock):
        lib_mock.sp_album_year.return_value = 2013
        sp_album = spotify.ffi.cast('sp_album *', 42)
        album = spotify.Album(self.session, sp_album=sp_album)

        result = album.year

        lib_mock.sp_album_year.assert_called_once_with(sp_album)
        self.assertEqual(result, 2013)
Esempio n. 23
0
    def album(self):
        """The album of the track.

        Will always return :class:`None` if the track isn't loaded.
        """
        spotify.Error.maybe_raise(self.error)
        sp_album = lib.sp_track_album(self._sp_track)
        if sp_album == ffi.NULL:
            return None
        return spotify.Album(sp_album=sp_album, add_ref=True)
Esempio n. 24
0
    def test_name(self, lib_mock):
        lib_mock.sp_album_name.return_value = spotify.ffi.new(
            'char[]', b'Foo Bar Baz')
        sp_album = spotify.ffi.new('int *')
        album = spotify.Album(sp_album=sp_album)

        result = album.name

        lib_mock.sp_album_name.assert_called_once_with(sp_album)
        self.assertEqual(result, 'Foo Bar Baz')
Esempio n. 25
0
    def test_cover_is_none_if_null(self, lib_mock):
        lib_mock.sp_album_cover.return_value = spotify.ffi.NULL
        sp_album = spotify.ffi.new('int *')
        album = spotify.Album(sp_album=sp_album)

        result = album.cover()

        lib_mock.sp_album_cover.assert_called_with(
            sp_album, int(spotify.ImageSize.NORMAL))
        self.assertIsNone(result)
Esempio n. 26
0
    def album(self):
        """The album of the track.

        Will always return :class:`None` if the track isn't loaded.
        """
        spotify.Error.maybe_raise(self.error,
                                  ignores=[spotify.ErrorType.IS_LOADING])
        if not self.is_loaded:
            return None
        sp_album = lib.sp_track_album(self._sp_track)
        return spotify.Album(self._session, sp_album=sp_album, add_ref=True)
Esempio n. 27
0
    def test_cover_link_defaults_to_normal_size(self, link_mock, lib_mock):
        sp_album = spotify.ffi.cast('sp_album *', 42)
        album = spotify.Album(self.session, sp_album=sp_album)
        sp_link = spotify.ffi.cast('sp_link *', 43)
        lib_mock.sp_link_create_from_album_cover.return_value = sp_link
        link_mock.return_value = mock.sentinel.link

        album.cover_link()

        lib_mock.sp_link_create_from_album_cover.assert_called_once_with(
            sp_album, int(spotify.ImageSize.NORMAL))
Esempio n. 28
0
    def test_link_creates_link_to_album(self, link_mock, lib_mock):
        sp_album = spotify.ffi.new('int *')
        album = spotify.Album(sp_album=sp_album)
        sp_link = spotify.ffi.new('int *')
        lib_mock.sp_link_create_from_album.return_value = sp_link
        link_mock.return_value = mock.sentinel.link

        result = album.link

        link_mock.assert_called_once_with(sp_link=sp_link, add_ref=False)
        self.assertEqual(result, mock.sentinel.link)
Esempio n. 29
0
    def test_cover_defaults_to_normal_size(self, image_mock, lib_mock):
        sp_image_id = spotify.ffi.new('char[]', b'cover-id')
        lib_mock.sp_album_cover.return_value = sp_image_id
        sp_image = spotify.ffi.cast('sp_image *', 43)
        lib_mock.sp_image_create.return_value = sp_image
        sp_album = spotify.ffi.cast('sp_album *', 42)
        album = spotify.Album(self.session, sp_album=sp_album)

        album.cover()

        lib_mock.sp_album_cover.assert_called_with(
            sp_album, int(spotify.ImageSize.NORMAL))
Esempio n. 30
0
    def test_artist(self, artist_lib_mock, lib_mock):
        sp_artist = spotify.ffi.new('int *')
        lib_mock.sp_album_artist.return_value = sp_artist
        sp_album = spotify.ffi.new('int *')
        album = spotify.Album(sp_album=sp_album)

        result = album.artist

        lib_mock.sp_album_artist.assert_called_with(sp_album)
        self.assertEqual(artist_lib_mock.sp_artist_add_ref.call_count, 1)
        self.assertIsInstance(result, spotify.Artist)
        self.assertEqual(result._sp_artist, sp_artist)