moviewyrm/bookwyrm/tests/models/test_book_model.py

99 lines
3.4 KiB
Python
Raw Normal View History

2021-03-08 16:49:10 +00:00
""" testing models """
2020-12-17 20:30:49 +00:00
from dateutil.parser import parse
2020-05-10 00:10:02 +00:00
from django.test import TestCase
2020-12-17 20:30:49 +00:00
from django.utils import timezone
2020-05-10 00:10:02 +00:00
from bookwyrm import models, settings
2020-10-29 19:32:37 +00:00
from bookwyrm.models.book import isbn_10_to_13, isbn_13_to_10
2020-05-10 00:10:02 +00:00
class Book(TestCase):
2021-04-26 16:15:42 +00:00
"""not too much going on in the books model but here we are"""
2021-03-08 16:49:10 +00:00
2020-05-10 00:10:02 +00:00
def setUp(self):
2021-04-26 16:15:42 +00:00
"""we'll need some books"""
2021-08-02 23:05:40 +00:00
self.work = models.Work.objects.create(
title="Example Work", remote_id="https://example.com/book/1"
)
self.first_edition = models.Edition.objects.create(
title="Example Edition",
parent_work=self.work,
)
self.second_edition = models.Edition.objects.create(
title="Another Example Edition",
parent_work=self.work,
)
2020-05-10 00:10:02 +00:00
def test_remote_id(self):
2021-04-26 16:15:42 +00:00
"""fanciness with remote/origin ids"""
remote_id = f"https://{settings.DOMAIN}/book/{self.work.id}"
2020-11-13 17:47:35 +00:00
self.assertEqual(self.work.get_remote_id(), remote_id)
2020-12-04 01:18:23 +00:00
self.assertEqual(self.work.remote_id, remote_id)
def test_generated_links(self):
"""links produced from identifiers"""
book = models.Edition.objects.create(
title="ExEd",
parent_work=self.work,
openlibrary_key="OL123M",
inventaire_id="isbn:123",
)
2021-12-10 21:39:41 +00:00
self.assertEqual(book.openlibrary_link, "https://openlibrary.org/books/OL123M")
self.assertEqual(book.inventaire_link, "https://inventaire.io/entity/isbn:123")
def test_create_book_invalid(self):
2021-04-26 16:15:42 +00:00
"""you shouldn't be able to create Books (only editions and works)"""
2021-03-08 16:49:10 +00:00
self.assertRaises(ValueError, models.Book.objects.create, title="Invalid Book")
2020-05-10 00:10:02 +00:00
2020-10-29 19:32:37 +00:00
def test_isbn_10_to_13(self):
2021-04-26 16:15:42 +00:00
"""checksums and so on"""
2021-03-08 16:49:10 +00:00
isbn_10 = "178816167X"
2020-10-29 19:32:37 +00:00
isbn_13 = isbn_10_to_13(isbn_10)
2021-03-08 16:49:10 +00:00
self.assertEqual(isbn_13, "9781788161671")
2020-10-29 19:32:37 +00:00
2021-03-08 16:49:10 +00:00
isbn_10 = "1-788-16167-X"
2020-10-30 19:43:02 +00:00
isbn_13 = isbn_10_to_13(isbn_10)
2021-03-08 16:49:10 +00:00
self.assertEqual(isbn_13, "9781788161671")
2020-10-30 19:43:02 +00:00
2020-10-29 19:32:37 +00:00
def test_isbn_13_to_10(self):
2021-04-26 16:15:42 +00:00
"""checksums and so on"""
2021-03-08 16:49:10 +00:00
isbn_13 = "9781788161671"
2020-10-29 19:32:37 +00:00
isbn_10 = isbn_13_to_10(isbn_13)
2021-03-08 16:49:10 +00:00
self.assertEqual(isbn_10, "178816167X")
2020-10-29 19:32:37 +00:00
2021-03-08 16:49:10 +00:00
isbn_13 = "978-1788-16167-1"
2020-10-30 19:43:02 +00:00
isbn_10 = isbn_13_to_10(isbn_13)
2021-03-08 16:49:10 +00:00
self.assertEqual(isbn_10, "178816167X")
2020-12-17 20:30:49 +00:00
def test_get_edition_info(self):
2021-04-26 16:15:42 +00:00
"""text slug about an edition"""
2021-08-02 23:05:40 +00:00
book = models.Edition.objects.create(title="Test Edition")
2021-03-08 16:49:10 +00:00
self.assertEqual(book.edition_info, "")
2020-12-17 20:30:49 +00:00
2021-03-08 16:49:10 +00:00
book.physical_format = "worm"
2020-12-17 20:30:49 +00:00
book.save()
2021-03-08 16:49:10 +00:00
self.assertEqual(book.edition_info, "worm")
2020-12-17 20:30:49 +00:00
2021-03-08 16:49:10 +00:00
book.languages = ["English"]
2020-12-17 20:30:49 +00:00
book.save()
2021-03-08 16:49:10 +00:00
self.assertEqual(book.edition_info, "worm")
2020-12-17 20:30:49 +00:00
2021-03-08 16:49:10 +00:00
book.languages = ["Glorbish", "English"]
2020-12-17 20:30:49 +00:00
book.save()
2021-03-08 16:49:10 +00:00
self.assertEqual(book.edition_info, "worm, Glorbish language")
2020-12-17 20:30:49 +00:00
2021-03-08 16:49:10 +00:00
book.published_date = timezone.make_aware(parse("2020"))
2020-12-17 20:30:49 +00:00
book.save()
2021-03-08 16:49:10 +00:00
self.assertEqual(book.edition_info, "worm, Glorbish language, 2020")
self.assertEqual(book.alt_text, "Test Edition (worm, Glorbish language, 2020)")
def test_get_rank(self):
2021-04-26 16:15:42 +00:00
"""sets the data quality index for the book"""
# basic rank
self.assertEqual(self.first_edition.edition_rank, 0)
2021-03-08 16:49:10 +00:00
self.first_edition.description = "hi"
self.first_edition.save()
self.assertEqual(self.first_edition.edition_rank, 1)