mirror of
https://github.com/bookwyrm-social/bookwyrm.git
synced 2024-12-23 08:36:32 +00:00
Add book search test cases for author aliases
This commit is contained in:
parent
36222afa79
commit
769d9726e5
1 changed files with 51 additions and 6 deletions
|
@ -14,6 +14,13 @@ class BookSearch(TestCase):
|
||||||
@classmethod
|
@classmethod
|
||||||
def setUpTestData(self): # pylint: disable=bad-classmethod-argument
|
def setUpTestData(self): # pylint: disable=bad-classmethod-argument
|
||||||
"""we need basic test data and mocks"""
|
"""we need basic test data and mocks"""
|
||||||
|
self.first_author = models.Author.objects.create(
|
||||||
|
name="Author One", aliases=["The First"]
|
||||||
|
)
|
||||||
|
self.second_author = models.Author.objects.create(
|
||||||
|
name="Author Two", aliases=["The Second"]
|
||||||
|
)
|
||||||
|
|
||||||
self.work = models.Work.objects.create(title="Example Work")
|
self.work = models.Work.objects.create(title="Example Work")
|
||||||
|
|
||||||
self.first_edition = models.Edition.objects.create(
|
self.first_edition = models.Edition.objects.create(
|
||||||
|
@ -23,6 +30,8 @@ class BookSearch(TestCase):
|
||||||
physical_format="Paperback",
|
physical_format="Paperback",
|
||||||
published_date=datetime.datetime(2019, 4, 9, 0, 0, tzinfo=timezone.utc),
|
published_date=datetime.datetime(2019, 4, 9, 0, 0, tzinfo=timezone.utc),
|
||||||
)
|
)
|
||||||
|
self.first_edition.authors.add(self.first_author)
|
||||||
|
|
||||||
self.second_edition = models.Edition.objects.create(
|
self.second_edition = models.Edition.objects.create(
|
||||||
title="Another Edition",
|
title="Another Edition",
|
||||||
parent_work=self.work,
|
parent_work=self.work,
|
||||||
|
@ -30,19 +39,34 @@ class BookSearch(TestCase):
|
||||||
openlibrary_key="hello",
|
openlibrary_key="hello",
|
||||||
pages=150,
|
pages=150,
|
||||||
)
|
)
|
||||||
|
self.second_edition.authors.add(self.first_author)
|
||||||
|
self.second_edition.authors.add(self.second_author)
|
||||||
|
|
||||||
self.third_edition = models.Edition.objects.create(
|
self.third_edition = models.Edition.objects.create(
|
||||||
title="Another Edition with annoying ISBN",
|
title="Another Edition with annoying ISBN",
|
||||||
parent_work=self.work,
|
parent_work=self.work,
|
||||||
isbn_10="022222222X",
|
isbn_10="022222222X",
|
||||||
)
|
)
|
||||||
|
self.third_edition.authors.add(self.first_author)
|
||||||
|
self.third_edition.authors.add(self.second_author)
|
||||||
|
|
||||||
def test_search(self):
|
def test_search(self):
|
||||||
"""search for a book in the db"""
|
"""search for a book in the db"""
|
||||||
# title/author
|
# title
|
||||||
results = book_search.search("Example")
|
results = book_search.search("Example")
|
||||||
self.assertEqual(len(results), 1)
|
self.assertEqual(len(results), 1)
|
||||||
self.assertEqual(results[0], self.first_edition)
|
self.assertEqual(results[0], self.first_edition)
|
||||||
|
|
||||||
|
# author
|
||||||
|
results = book_search.search("One")
|
||||||
|
self.assertEqual(len(results), 1)
|
||||||
|
self.assertEqual(results[0], self.first_edition)
|
||||||
|
|
||||||
|
# author alias
|
||||||
|
results = book_search.search("First")
|
||||||
|
self.assertEqual(len(results), 1)
|
||||||
|
self.assertEqual(results[0], self.first_edition)
|
||||||
|
|
||||||
# isbn
|
# isbn
|
||||||
results = book_search.search("0000000000")
|
results = book_search.search("0000000000")
|
||||||
self.assertEqual(len(results), 1)
|
self.assertEqual(len(results), 1)
|
||||||
|
@ -155,8 +179,17 @@ class SearchVectorTest(TestCase):
|
||||||
"""search vector with subtitle and series"""
|
"""search vector with subtitle and series"""
|
||||||
# for a book like this we call `to_tsvector("Book Long Mary Bunch")`, hence the
|
# for a book like this we call `to_tsvector("Book Long Mary Bunch")`, hence the
|
||||||
# indexes in the search vector. (priority "D" is the default, and never shown.)
|
# indexes in the search vector. (priority "D" is the default, and never shown.)
|
||||||
book = self._create_book("Book", "Mary", subtitle="Long", series="Bunch")
|
book = self._create_book(
|
||||||
self.assertEqual(book.search_vector, "'book':1A 'bunch':4 'long':2B 'mary':3C")
|
"Book",
|
||||||
|
"Mary",
|
||||||
|
subtitle="Long",
|
||||||
|
series="Bunch",
|
||||||
|
author_alias=["Maria", "Mary Ann"],
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
book.search_vector,
|
||||||
|
"'ann':6C 'book':1A 'bunch':7 'long':2B 'maria':4C 'mary':3C,5C",
|
||||||
|
)
|
||||||
|
|
||||||
def test_search_vector_parse_book(self):
|
def test_search_vector_parse_book(self):
|
||||||
"""book parts are parsed in english"""
|
"""book parts are parsed in english"""
|
||||||
|
@ -170,8 +203,8 @@ class SearchVectorTest(TestCase):
|
||||||
|
|
||||||
def test_search_vector_parse_author(self):
|
def test_search_vector_parse_author(self):
|
||||||
"""author name is not stem'd or affected by stop words"""
|
"""author name is not stem'd or affected by stop words"""
|
||||||
book = self._create_book("Writing", "Writes")
|
book = self._create_book("Writing", "Writes", author_alias=["Reads"])
|
||||||
self.assertEqual(book.search_vector, "'write':1A 'writes':2C")
|
self.assertEqual(book.search_vector, "'reads':3C 'write':1A 'writes':2C")
|
||||||
|
|
||||||
book = self._create_book("She Is Writing", "She Writes")
|
book = self._create_book("She Is Writing", "She Writes")
|
||||||
self.assertEqual(book.search_vector, "'she':4C 'write':3A 'writes':5C")
|
self.assertEqual(book.search_vector, "'she':4C 'write':3A 'writes':5C")
|
||||||
|
@ -218,6 +251,13 @@ class SearchVectorTest(TestCase):
|
||||||
book.refresh_from_db()
|
book.refresh_from_db()
|
||||||
self.assertEqual(book.search_vector, "'goodby':3A 'jeremy':4C 'long':2A")
|
self.assertEqual(book.search_vector, "'goodby':3A 'jeremy':4C 'long':2A")
|
||||||
|
|
||||||
|
author.aliases = ["Example"]
|
||||||
|
author.save(broadcast=False)
|
||||||
|
book.refresh_from_db()
|
||||||
|
self.assertEqual(
|
||||||
|
book.search_vector, "'example':5C 'goodby':3A 'jeremy':4C 'long':2A"
|
||||||
|
)
|
||||||
|
|
||||||
def test_search_vector_on_author_delete(self):
|
def test_search_vector_on_author_delete(self):
|
||||||
"""update search when an author is deleted"""
|
"""update search when an author is deleted"""
|
||||||
book = self._create_book("The Long Goodbye", "The Rays")
|
book = self._create_book("The Long Goodbye", "The Rays")
|
||||||
|
@ -274,7 +314,7 @@ class SearchVectorUpdates(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
"""we need basic test data and mocks"""
|
"""we need basic test data and mocks"""
|
||||||
self.work = models.Work.objects.create(title="This Work")
|
self.work = models.Work.objects.create(title="This Work")
|
||||||
self.author = models.Author.objects.create(name="Name")
|
self.author = models.Author.objects.create(name="Name", aliases=["Alias"])
|
||||||
self.edition = models.Edition.objects.create(
|
self.edition = models.Edition.objects.create(
|
||||||
title="First Edition of Work",
|
title="First Edition of Work",
|
||||||
subtitle="Some Extra Words Are Good",
|
subtitle="Some Extra Words Are Good",
|
||||||
|
@ -363,13 +403,18 @@ class SearchVectorUpdates(TestCase):
|
||||||
def test_search_after_updated_author_name(self):
|
def test_search_after_updated_author_name(self):
|
||||||
"""book found under new author name"""
|
"""book found under new author name"""
|
||||||
self.assertEqual(self.edition, self._search_first("Name"))
|
self.assertEqual(self.edition, self._search_first("Name"))
|
||||||
|
self.assertEqual(self.edition, self._search_first("Alias"))
|
||||||
self.assertFalse(self._search("Identifier"))
|
self.assertFalse(self._search("Identifier"))
|
||||||
|
self.assertFalse(self._search("Another"))
|
||||||
|
|
||||||
self.author.name = "Identifier"
|
self.author.name = "Identifier"
|
||||||
|
self.author.aliases = ["Another"]
|
||||||
self.author.save(broadcast=False)
|
self.author.save(broadcast=False)
|
||||||
|
|
||||||
self.assertFalse(self._search("Name"))
|
self.assertFalse(self._search("Name"))
|
||||||
|
self.assertFalse(self._search("Aliases"))
|
||||||
self.assertEqual(self.edition, self._search_first("Identifier"))
|
self.assertEqual(self.edition, self._search_first("Identifier"))
|
||||||
|
self.assertEqual(self.edition, self._search_first("Another"))
|
||||||
self.assertEqual(self.edition, self._search_first("Work"))
|
self.assertEqual(self.edition, self._search_first("Work"))
|
||||||
|
|
||||||
def _search_first(self, query):
|
def _search_first(self, query):
|
||||||
|
|
Loading…
Reference in a new issue