from django.test import TestCase from catalog.book.models import * from catalog.book.utils import * from catalog.common import * class BookTestCase(TestCase): def setUp(self): hyperion = Edition.objects.create(title="Hyperion") hyperion.pages = 500 hyperion.isbn = "9780553283686" hyperion.save() # hyperion.isbn10 = '0553283685' def test_url(self): hyperion = Edition.objects.get(title="Hyperion") hyperion2 = Edition.get_by_url(hyperion.url) self.assertEqual(hyperion, hyperion2) hyperion2 = Edition.get_by_url(hyperion.uuid) self.assertEqual(hyperion, hyperion2) hyperion2 = Edition.get_by_url("test/" + hyperion.uuid + "/test") self.assertEqual(hyperion, hyperion2) def test_properties(self): hyperion = Edition.objects.get(title="Hyperion") self.assertEqual(hyperion.title, "Hyperion") self.assertEqual(hyperion.pages, 500) self.assertEqual(hyperion.primary_lookup_id_type, IdType.ISBN) self.assertEqual(hyperion.primary_lookup_id_value, "9780553283686") andymion = Edition(title="Andymion", pages=42) self.assertEqual(andymion.pages, 42) def test_lookupids(self): hyperion = Edition.objects.get(title="Hyperion") hyperion.asin = "B004G60EHS" self.assertEqual(hyperion.primary_lookup_id_type, IdType.ASIN) self.assertEqual(hyperion.primary_lookup_id_value, "B004G60EHS") self.assertEqual(hyperion.isbn, None) self.assertEqual(hyperion.isbn10, None) def test_isbn(self): t, n = detect_isbn_asin("0553283685") self.assertEqual(t, IdType.ISBN) self.assertEqual(n, "9780553283686") t, n = detect_isbn_asin("9780553283686") self.assertEqual(t, IdType.ISBN) t, n = detect_isbn_asin(" b0043M6780") self.assertEqual(t, IdType.ASIN) hyperion = Edition.objects.get(title="Hyperion") self.assertEqual(hyperion.isbn, "9780553283686") self.assertEqual(hyperion.isbn10, "0553283685") hyperion.isbn10 = "0575099437" self.assertEqual(hyperion.isbn, "9780575099432") self.assertEqual(hyperion.isbn10, "0575099437") def test_work(self): hyperion_print = Edition.objects.get(title="Hyperion") hyperion_ebook = Edition(title="Hyperion") hyperion_ebook.save() hyperion_ebook.asin = "B0043M6780" hyperion = Work(title="Hyperion") hyperion.save() hyperion.editions.add(hyperion_print) hyperion.editions.add(hyperion_ebook) # andymion = Edition(title="Andymion", pages=42) # serie = Serie(title="Hyperion Cantos") class GoodreadsTestCase(TestCase): def setUp(self): pass def test_parse(self): t_type = IdType.Goodreads t_id = "77566" t_url = "https://www.goodreads.com/zh/book/show/77566.Hyperion" t_url2 = "https://www.goodreads.com/book/show/77566" p1 = SiteManager.get_site_cls_by_id_type(t_type) p2 = SiteManager.get_site_by_url(t_url) self.assertEqual(p1.id_to_url(t_id), t_url2) self.assertEqual(p2.url_to_id(t_url), t_id) @use_local_response def test_scrape(self): t_url = "https://www.goodreads.com/book/show/77566.Hyperion" t_url2 = "https://www.goodreads.com/book/show/77566" isbn = "9780553283686" site = SiteManager.get_site_by_url(t_url) self.assertEqual(site.ready, False) self.assertEqual(site.url, t_url2) site.get_resource() self.assertEqual(site.ready, False) self.assertIsNotNone(site.resource) site.get_resource_ready() self.assertEqual(site.ready, True) self.assertEqual(site.resource.metadata.get("title"), "Hyperion") self.assertEqual(site.resource.get_all_lookup_ids().get(IdType.ISBN), isbn) self.assertEqual(site.resource.required_resources[0]["id_value"], "1383900") edition = Edition.objects.get( primary_lookup_id_type=IdType.ISBN, primary_lookup_id_value=isbn ) resource = edition.external_resources.all().first() self.assertEqual(resource.id_type, IdType.Goodreads) self.assertEqual(resource.id_value, "77566") self.assertNotEqual(resource.cover, "/media/item/default.svg") self.assertEqual(edition.isbn, "9780553283686") self.assertEqual(edition.title, "Hyperion") edition.delete() site = SiteManager.get_site_by_url(t_url) self.assertEqual(site.ready, False) self.assertEqual(site.url, t_url2) site.get_resource() self.assertEqual( site.ready, True, "previous resource should still exist with data" ) @use_local_response def test_scrape2(self): site = SiteManager.get_site_by_url( "https://www.goodreads.com/book/show/13079982-fahrenheit-451" ) site.get_resource_ready() self.assertNotIn("