lib.itmens/catalog/music/tests.py

208 lines
9 KiB
Python
Raw Normal View History

2022-12-08 15:45:37 +00:00
from django.test import TestCase
2022-12-08 15:45:37 +00:00
from catalog.common import *
from catalog.models import *
from catalog.music.utils import *
class BasicMusicTest(TestCase):
def test_gtin(self):
self.assertIsNone(upc_to_gtin_13("018771208112X"))
self.assertIsNone(upc_to_gtin_13("999018771208112"))
self.assertEqual(upc_to_gtin_13("018771208112"), "0018771208112")
self.assertEqual(upc_to_gtin_13("00042281006722"), "0042281006722")
self.assertEqual(upc_to_gtin_13("0042281006722"), "0042281006722")
2022-12-08 15:45:37 +00:00
class SpotifyTestCase(TestCase):
def test_parse(self):
t_id_type = IdType.Spotify_Album
2022-12-29 23:57:02 -05:00
t_id_value = "65KwtzkJXw7oT819NFWmEP"
t_url = "https://open.spotify.com/album/65KwtzkJXw7oT819NFWmEP"
2023-06-05 10:06:16 -04:00
site = SiteManager.get_site_cls_by_id_type(t_id_type)
2022-12-08 15:45:37 +00:00
self.assertIsNotNone(site)
self.assertEqual(site.validate_url(t_url), True)
2022-12-15 17:29:35 -05:00
site = SiteManager.get_site_by_url(t_url)
2022-12-08 15:45:37 +00:00
self.assertEqual(site.url, t_url)
self.assertEqual(site.id_value, t_id_value)
2023-09-16 15:38:25 -04:00
t_url2 = "https://spotify.link/poyfZyBo6Cb"
t_id_value2 = "3yu2aNKeWTxqCjqoIH4HDU"
site = SiteManager.get_site_by_url(t_url2)
self.assertIsNotNone(site)
self.assertEqual(site.id_value, t_id_value2)
2022-12-08 15:45:37 +00:00
@use_local_response
def test_scrape(self):
2022-12-29 23:57:02 -05:00
t_url = "https://open.spotify.com/album/65KwtzkJXw7oT819NFWmEP"
2022-12-15 17:29:35 -05:00
site = SiteManager.get_site_by_url(t_url)
2022-12-08 15:45:37 +00:00
self.assertEqual(site.ready, False)
2022-12-08 16:08:59 +00:00
site.get_resource_ready()
2022-12-08 15:45:37 +00:00
self.assertEqual(site.ready, True)
2022-12-29 23:57:02 -05:00
self.assertEqual(site.resource.metadata["title"], "The Race For Space")
2022-12-08 16:08:59 +00:00
self.assertIsInstance(site.resource.item, Album)
2022-12-29 23:57:02 -05:00
self.assertEqual(site.resource.item.barcode, "3610159662676")
self.assertEqual(site.resource.item.genre, [])
self.assertEqual(site.resource.item.other_title, [])
2022-12-08 18:08:05 +00:00
class DoubanMusicTestCase(TestCase):
def test_parse(self):
t_id_type = IdType.DoubanMusic
2022-12-29 23:57:02 -05:00
t_id_value = "33551231"
t_url = "https://music.douban.com/subject/33551231/"
2023-06-05 10:06:16 -04:00
site = SiteManager.get_site_cls_by_id_type(t_id_type)
2022-12-08 18:08:05 +00:00
self.assertIsNotNone(site)
self.assertEqual(site.validate_url(t_url), True)
2022-12-15 17:29:35 -05:00
site = SiteManager.get_site_by_url(t_url)
2022-12-08 18:08:05 +00:00
self.assertEqual(site.url, t_url)
self.assertEqual(site.id_value, t_id_value)
@use_local_response
def test_scrape(self):
t_url = "https://music.douban.com/subject/1401362/"
2022-12-15 17:29:35 -05:00
site = SiteManager.get_site_by_url(t_url)
2022-12-08 18:08:05 +00:00
self.assertEqual(site.ready, False)
site.get_resource_ready()
self.assertEqual(site.ready, True)
self.assertEqual(site.resource.metadata["title"], "Rubber Soul")
2022-12-08 18:08:05 +00:00
self.assertIsInstance(site.resource.item, Album)
self.assertEqual(site.resource.item.barcode, "0077774644020")
self.assertEqual(site.resource.item.genre, ["摇滚"])
self.assertEqual(site.resource.item.other_title, ["橡胶灵魂"])
2022-12-08 18:08:05 +00:00
class MultiMusicSitesTestCase(TestCase):
@use_local_response
def test_albums(self):
2022-12-29 23:57:02 -05:00
url1 = "https://music.douban.com/subject/33551231/"
url2 = "https://open.spotify.com/album/65KwtzkJXw7oT819NFWmEP"
2022-12-15 17:29:35 -05:00
p1 = SiteManager.get_site_by_url(url1).get_resource_ready()
p2 = SiteManager.get_site_by_url(url2).get_resource_ready()
2022-12-08 18:08:05 +00:00
self.assertEqual(p1.item.id, p2.item.id)
2022-12-16 08:34:33 -05:00
@use_local_response
def test_albums_discogs(self):
url1 = "https://www.discogs.com/release/13574140"
url2 = "https://open.spotify.com/album/0I8vpSE1bSmysN2PhmHoQg"
p1 = SiteManager.get_site_by_url(url1).get_resource_ready()
p2 = SiteManager.get_site_by_url(url2).get_resource_ready()
self.assertEqual(p1.item.id, p2.item.id)
2022-12-16 08:34:33 -05:00
class BandcampTestCase(TestCase):
def test_parse(self):
t_id_type = IdType.Bandcamp
2022-12-29 23:57:02 -05:00
t_id_value = "intlanthem.bandcamp.com/album/in-these-times"
t_url = "https://intlanthem.bandcamp.com/album/in-these-times?from=hpbcw"
t_url2 = "https://intlanthem.bandcamp.com/album/in-these-times"
2023-06-05 10:06:16 -04:00
site = SiteManager.get_site_cls_by_id_type(t_id_type)
2022-12-16 08:34:33 -05:00
self.assertIsNotNone(site)
self.assertEqual(site.validate_url(t_url), True)
site = SiteManager.get_site_by_url(t_url)
self.assertEqual(site.url, t_url2)
self.assertEqual(site.id_value, t_id_value)
2022-12-16 08:36:48 -05:00
@use_local_response
2022-12-16 08:34:33 -05:00
def test_scrape(self):
2022-12-29 23:57:02 -05:00
t_url = "https://intlanthem.bandcamp.com/album/in-these-times?from=hpbcw"
2022-12-16 08:34:33 -05:00
site = SiteManager.get_site_by_url(t_url)
self.assertEqual(site.ready, False)
site.get_resource_ready()
self.assertEqual(site.ready, True)
2022-12-29 23:57:02 -05:00
self.assertEqual(site.resource.metadata["title"], "In These Times")
self.assertEqual(site.resource.metadata["artist"], ["Makaya McCraven"])
2022-12-16 08:34:33 -05:00
self.assertIsInstance(site.resource.item, Album)
self.assertEqual(site.resource.item.genre, [])
self.assertEqual(site.resource.item.other_title, [])
2023-02-03 13:43:55 +01:00
class DiscogsReleaseTestCase(TestCase):
def test_parse(self):
t_id_type = IdType.Discogs_Release
2023-02-03 14:21:46 +01:00
t_id_value = "25829341"
t_url = "https://www.discogs.com/release/25829341-JID-The-Never-Story"
t_url_2 = "https://www.discogs.com/release/25829341"
2023-08-09 15:21:50 -04:00
t_url_3 = "https://www.discogs.com/jp/release/25829341-JID-The-Never-Story"
t_url_4 = "https://www.discogs.com/pt_BR/release/25829341-JID-The-Never-Story"
2023-06-05 10:06:16 -04:00
site = SiteManager.get_site_cls_by_id_type(t_id_type)
2023-02-03 13:43:55 +01:00
self.assertIsNotNone(site)
self.assertEqual(site.validate_url(t_url), True)
site = SiteManager.get_site_by_url(t_url)
self.assertEqual(site.url, t_url_2)
2023-08-09 15:21:50 -04:00
site = SiteManager.get_site_by_url(t_url_3)
self.assertEqual(site.url, t_url_2)
site = SiteManager.get_site_by_url(t_url_4)
self.assertEqual(site.url, t_url_2)
2023-02-03 13:43:55 +01:00
self.assertEqual(site.id_value, t_id_value)
site = SiteManager.get_site_by_url(t_url_2)
self.assertIsNotNone(site)
2023-02-03 13:43:55 +01:00
@use_local_response
def test_scrape(self):
2023-02-03 14:21:46 +01:00
t_url = "https://www.discogs.com/release/25829341-JID-The-Never-Story"
2023-02-03 13:43:55 +01:00
site = SiteManager.get_site_by_url(t_url)
self.assertEqual(site.ready, False)
site.get_resource_ready()
self.assertEqual(site.ready, True)
2023-02-03 14:21:46 +01:00
self.assertEqual(site.resource.metadata["title"], "The Never Story")
self.assertEqual(site.resource.metadata["artist"], ["J.I.D"])
2023-02-03 13:43:55 +01:00
self.assertIsInstance(site.resource.item, Album)
self.assertEqual(site.resource.item.barcode, "0602445804689")
self.assertEqual(site.resource.item.genre, ["Hip Hop"])
self.assertEqual(site.resource.item.other_title, [])
2023-02-03 13:43:55 +01:00
class DiscogsMasterTestCase(TestCase):
def test_parse(self):
t_id_type = IdType.Discogs_Master
2023-02-03 14:21:46 +01:00
t_id_value = "469004"
t_url = "https://www.discogs.com/master/469004-The-XX-Coexist"
t_url_2 = "https://www.discogs.com/master/469004"
2023-06-05 10:06:16 -04:00
site = SiteManager.get_site_cls_by_id_type(t_id_type)
2023-02-03 13:43:55 +01:00
self.assertIsNotNone(site)
self.assertEqual(site.validate_url(t_url), True)
site = SiteManager.get_site_by_url(t_url)
self.assertEqual(site.url, t_url_2)
self.assertEqual(site.id_value, t_id_value)
@use_local_response
def test_scrape(self):
2023-02-03 14:21:46 +01:00
t_url = "https://www.discogs.com/master/469004-The-XX-Coexist"
2023-02-03 13:43:55 +01:00
site = SiteManager.get_site_by_url(t_url)
self.assertEqual(site.ready, False)
site.get_resource_ready()
self.assertEqual(site.ready, True)
2023-02-03 14:21:46 +01:00
self.assertEqual(site.resource.metadata["title"], "Coexist")
self.assertEqual(site.resource.metadata["artist"], ["The XX"])
2023-02-03 13:43:55 +01:00
self.assertIsInstance(site.resource.item, Album)
self.assertEqual(site.resource.item.genre, ["Electronic", "Rock", "Pop"])
self.assertEqual(site.resource.item.other_title, [])
2023-05-26 18:19:37 +02:00
class AppleMusicTestCase(TestCase):
def test_parse(self):
t_id_type = IdType.AppleMusic
t_id_value = "1284391545"
t_url = "https://music.apple.com/us/album/kids-only/1284391545"
t_url_2 = "https://music.apple.com/album/1284391545"
2023-06-05 10:06:16 -04:00
site = SiteManager.get_site_cls_by_id_type(t_id_type)
2023-05-26 18:19:37 +02:00
self.assertIsNotNone(site)
self.assertEqual(site.validate_url(t_url), True)
site = SiteManager.get_site_by_url(t_url)
self.assertEqual(site.url, t_url_2)
self.assertEqual(site.id_value, t_id_value)
@use_local_response
def test_scrape(self):
t_url = "https://music.apple.com/us/album/kids-only/1284391545"
2023-05-26 18:19:37 +02:00
site = SiteManager.get_site_by_url(t_url)
self.assertEqual(site.ready, False)
site.get_resource_ready()
self.assertEqual(site.ready, True)
self.assertEqual(site.resource.metadata["title"], "Kids Only")
self.assertEqual(site.resource.metadata["artist"], ["Leah Dou"])
2023-05-26 18:19:37 +02:00
self.assertIsInstance(site.resource.item, Album)
self.assertEqual(site.resource.item.genre, ["Pop"])
self.assertEqual(site.resource.item.duration, 2371628)