2022-12-08 23:58:44 +00:00
|
|
|
from django.test import TestCase
|
2023-08-10 11:27:31 -04:00
|
|
|
|
2022-12-08 23:58:44 +00:00
|
|
|
from catalog.common import *
|
|
|
|
from catalog.models import *
|
|
|
|
|
|
|
|
|
|
|
|
class IGDBTestCase(TestCase):
|
2024-07-13 00:16:47 -04:00
|
|
|
databases = "__all__"
|
|
|
|
|
2022-12-08 23:58:44 +00:00
|
|
|
def test_parse(self):
|
|
|
|
t_id_type = IdType.IGDB
|
2022-12-29 23:57:02 -05:00
|
|
|
t_id_value = "portal-2"
|
|
|
|
t_url = "https://www.igdb.com/games/portal-2"
|
2023-06-05 10:06:16 -04:00
|
|
|
site = SiteManager.get_site_cls_by_id_type(t_id_type)
|
2022-12-08 23:58:44 +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 23:58:44 +00:00
|
|
|
self.assertEqual(site.url, t_url)
|
|
|
|
self.assertEqual(site.id_value, t_id_value)
|
|
|
|
|
|
|
|
@use_local_response
|
|
|
|
def test_scrape(self):
|
2022-12-29 23:57:02 -05:00
|
|
|
t_url = "https://www.igdb.com/games/portal-2"
|
2022-12-15 17:29:35 -05:00
|
|
|
site = SiteManager.get_site_by_url(t_url)
|
2022-12-08 23:58:44 +00:00
|
|
|
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"], "Portal 2")
|
2022-12-08 23:58:44 +00:00
|
|
|
self.assertIsInstance(site.resource.item, Game)
|
2022-12-29 23:57:02 -05:00
|
|
|
self.assertEqual(site.resource.item.steam, "620")
|
2023-04-17 21:43:20 -04:00
|
|
|
self.assertEqual(
|
|
|
|
site.resource.item.genre, ["Shooter", "Platform", "Puzzle", "Adventure"]
|
|
|
|
)
|
2022-12-08 23:58:44 +00:00
|
|
|
|
|
|
|
@use_local_response
|
|
|
|
def test_scrape_non_steam(self):
|
2022-12-29 23:57:02 -05:00
|
|
|
t_url = "https://www.igdb.com/games/the-legend-of-zelda-breath-of-the-wild"
|
2022-12-15 17:29:35 -05:00
|
|
|
site = SiteManager.get_site_by_url(t_url)
|
2022-12-08 23:58:44 +00:00
|
|
|
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"], "The Legend of Zelda: Breath of the Wild"
|
|
|
|
)
|
2022-12-08 23:58:44 +00:00
|
|
|
self.assertIsInstance(site.resource.item, Game)
|
|
|
|
self.assertEqual(site.resource.item.primary_lookup_id_type, IdType.IGDB)
|
2024-07-13 00:16:47 -04:00
|
|
|
self.assertEqual(
|
|
|
|
site.resource.item.genre, ["Puzzle", "Role-playing (RPG)", "Adventure"]
|
|
|
|
)
|
2022-12-29 23:57:02 -05:00
|
|
|
self.assertEqual(
|
|
|
|
site.resource.item.primary_lookup_id_value,
|
|
|
|
"the-legend-of-zelda-breath-of-the-wild",
|
|
|
|
)
|
2022-12-08 23:58:44 +00:00
|
|
|
|
|
|
|
|
|
|
|
class SteamTestCase(TestCase):
|
2024-07-13 00:16:47 -04:00
|
|
|
databases = "__all__"
|
|
|
|
|
2022-12-08 23:58:44 +00:00
|
|
|
def test_parse(self):
|
|
|
|
t_id_type = IdType.Steam
|
2022-12-29 23:57:02 -05:00
|
|
|
t_id_value = "620"
|
|
|
|
t_url = "https://store.steampowered.com/app/620/Portal_2/"
|
|
|
|
t_url2 = "https://store.steampowered.com/app/620"
|
2023-06-05 10:06:16 -04:00
|
|
|
site = SiteManager.get_site_cls_by_id_type(t_id_type)
|
2022-12-08 23:58:44 +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 23:58:44 +00:00
|
|
|
self.assertEqual(site.url, t_url2)
|
|
|
|
self.assertEqual(site.id_value, t_id_value)
|
|
|
|
|
|
|
|
@use_local_response
|
|
|
|
def test_scrape(self):
|
2022-12-29 23:57:02 -05:00
|
|
|
t_url = "https://store.steampowered.com/app/620/Portal_2/"
|
2022-12-15 17:29:35 -05:00
|
|
|
site = SiteManager.get_site_by_url(t_url)
|
2022-12-08 23:58:44 +00:00
|
|
|
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"], "Portal 2")
|
2024-07-13 00:16:47 -04:00
|
|
|
self.assertEqual(site.resource.metadata["brief"][:6], "Sequel")
|
2022-12-08 23:58:44 +00:00
|
|
|
self.assertIsInstance(site.resource.item, Game)
|
2022-12-29 23:57:02 -05:00
|
|
|
self.assertEqual(site.resource.item.steam, "620")
|
2023-04-17 21:43:20 -04:00
|
|
|
self.assertEqual(
|
|
|
|
site.resource.item.genre, ["Shooter", "Platform", "Puzzle", "Adventure"]
|
|
|
|
)
|
2022-12-08 23:58:44 +00:00
|
|
|
|
|
|
|
|
|
|
|
class DoubanGameTestCase(TestCase):
|
2024-07-13 00:16:47 -04:00
|
|
|
databases = "__all__"
|
|
|
|
|
2022-12-08 23:58:44 +00:00
|
|
|
def test_parse(self):
|
|
|
|
t_id_type = IdType.DoubanGame
|
2022-12-29 23:57:02 -05:00
|
|
|
t_id_value = "10734307"
|
|
|
|
t_url = "https://www.douban.com/game/10734307/"
|
2023-06-05 10:06:16 -04:00
|
|
|
site = SiteManager.get_site_cls_by_id_type(t_id_type)
|
2022-12-08 23:58:44 +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 23:58:44 +00:00
|
|
|
self.assertEqual(site.url, t_url)
|
|
|
|
self.assertEqual(site.id_value, t_id_value)
|
|
|
|
|
|
|
|
@use_local_response
|
|
|
|
def test_scrape(self):
|
2022-12-29 23:57:02 -05:00
|
|
|
t_url = "https://www.douban.com/game/10734307/"
|
2022-12-15 17:29:35 -05:00
|
|
|
site = SiteManager.get_site_by_url(t_url)
|
2022-12-08 23:58:44 +00:00
|
|
|
self.assertEqual(site.ready, False)
|
|
|
|
site.get_resource_ready()
|
|
|
|
self.assertEqual(site.ready, True)
|
|
|
|
self.assertIsInstance(site.resource.item, Game)
|
2024-07-13 18:14:40 -04:00
|
|
|
titles = sorted([t["text"] for t in site.resource.item.localized_title])
|
|
|
|
self.assertEqual(titles, ["Portal 2", "传送门2"])
|
2022-12-29 23:57:02 -05:00
|
|
|
self.assertEqual(site.resource.item.douban_game, "10734307")
|
2024-07-13 00:16:47 -04:00
|
|
|
self.assertEqual(site.resource.item.genre, ["第一人称射击", "益智"])
|
2023-04-17 21:43:20 -04:00
|
|
|
self.assertEqual(site.resource.item.other_title, [])
|
2022-12-08 23:58:44 +00:00
|
|
|
|
|
|
|
|
2022-12-09 03:09:06 +00:00
|
|
|
class BangumiGameTestCase(TestCase):
|
2024-07-13 00:16:47 -04:00
|
|
|
databases = "__all__"
|
|
|
|
|
2024-07-16 13:51:55 -04:00
|
|
|
@use_local_response
|
2022-12-09 03:09:06 +00:00
|
|
|
def test_parse(self):
|
|
|
|
t_id_type = IdType.Bangumi
|
2022-12-29 23:57:02 -05:00
|
|
|
t_id_value = "15912"
|
|
|
|
t_url = "https://bgm.tv/subject/15912"
|
2023-06-05 10:06:16 -04:00
|
|
|
site = SiteManager.get_site_cls_by_id_type(t_id_type)
|
2022-12-09 03:09:06 +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-09 03:09:06 +00:00
|
|
|
self.assertEqual(site.url, t_url)
|
|
|
|
self.assertEqual(site.id_value, t_id_value)
|
2024-07-16 12:10:46 -04:00
|
|
|
i = site.get_resource_ready().item
|
|
|
|
self.assertEqual(i.genre, ["PUZ"])
|
|
|
|
i = (
|
|
|
|
SiteManager.get_site_by_url("https://bgm.tv/subject/228086")
|
|
|
|
.get_resource_ready()
|
|
|
|
.item
|
|
|
|
)
|
|
|
|
self.assertEqual(i.genre, ["ADV", "Psychological Horror"])
|
2022-12-09 03:09:06 +00:00
|
|
|
|
2024-01-07 17:30:37 -05:00
|
|
|
|
|
|
|
class BoardGameGeekTestCase(TestCase):
|
2024-07-13 00:16:47 -04:00
|
|
|
databases = "__all__"
|
|
|
|
|
2024-01-09 16:36:39 -05:00
|
|
|
@use_local_response
|
2022-12-09 03:09:06 +00:00
|
|
|
def test_scrape(self):
|
2024-01-07 17:30:37 -05:00
|
|
|
t_url = "https://boardgamegeek.com/boardgame/167791"
|
|
|
|
site = SiteManager.get_site_by_url(t_url)
|
|
|
|
self.assertIsNotNone(site)
|
2024-01-09 16:36:39 -05:00
|
|
|
self.assertEqual(site.ID_TYPE, IdType.BGG)
|
|
|
|
self.assertEqual(site.id_value, "167791")
|
2024-01-07 17:30:37 -05:00
|
|
|
self.assertEqual(site.ready, False)
|
|
|
|
site.get_resource_ready()
|
|
|
|
self.assertEqual(site.ready, True)
|
|
|
|
self.assertIsInstance(site.resource.item, Game)
|
2024-07-15 22:11:51 -04:00
|
|
|
|
|
|
|
# TODO this fails occasionally bc languagedetect flips coin
|
|
|
|
# self.assertEqual(site.resource.item.display_title, "Terraforming Mars")
|
|
|
|
|
|
|
|
self.assertEqual(len(site.resource.item.localized_title), 16)
|
2024-01-07 17:30:37 -05:00
|
|
|
self.assertEqual(site.resource.item.platform, ["Boardgame"])
|
2024-01-09 16:36:39 -05:00
|
|
|
self.assertEqual(site.resource.item.genre[0], "Economic")
|
2024-07-13 00:16:47 -04:00
|
|
|
# self.assertEqual(site.resource.item.other_title[0], "殖民火星")
|
2024-01-07 17:30:37 -05:00
|
|
|
self.assertEqual(site.resource.item.designer, ["Jacob Fryxelius"])
|
2022-12-09 03:09:06 +00:00
|
|
|
|
|
|
|
|
2022-12-08 23:58:44 +00:00
|
|
|
class MultiGameSitesTestCase(TestCase):
|
2024-07-13 00:16:47 -04:00
|
|
|
databases = "__all__"
|
|
|
|
|
2022-12-08 23:58:44 +00:00
|
|
|
@use_local_response
|
|
|
|
def test_games(self):
|
2022-12-29 23:57:02 -05:00
|
|
|
url1 = "https://www.igdb.com/games/portal-2"
|
|
|
|
url2 = "https://store.steampowered.com/app/620/Portal_2/"
|
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 23:58:44 +00:00
|
|
|
self.assertEqual(p1.item.id, p2.item.id)
|