switch to fnp-django-pagination
[wolnelektury.git] / src / catalogue / tests / book_import.py
index 775fc29..a445268 100644 (file)
@@ -2,8 +2,6 @@
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
-from django.conf import settings
-
 from django.core.files.base import ContentFile
 from catalogue.test_utils import *
 from catalogue import models
@@ -12,6 +10,7 @@ from librarian import WLURI
 from nose.tools import raises
 from os import path, makedirs
 
+
 class BookImportLogicTests(WLTestCase):
 
     def setUp(self):
@@ -36,8 +35,8 @@ class BookImportLogicTests(WLTestCase):
         self.expected_tags.sort()
 
     def test_empty_book(self):
-        BOOK_TEXT = "<utwor />"
-        book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info)
+        book_text = "<utwor />"
+        book = models.Book.from_text_and_meta(ContentFile(book_text), self.book_info)
 
         self.assertEqual(book.title, "Default Book")
         self.assertEqual(book.slug, "default-book")
@@ -52,7 +51,7 @@ class BookImportLogicTests(WLTestCase):
         self.assertEqual(book.gazeta_link, '')
         self.assertEqual(book.description, '')
 
-        tags = [ (tag.category, tag.slug) for tag in book.tags ]
+        tags = [(tag.category, tag.slug) for tag in book.tags]
         tags.sort()
 
         self.assertEqual(tags, self.expected_tags)
@@ -63,53 +62,53 @@ class BookImportLogicTests(WLTestCase):
         Should work like any other non-empty book.
         """
 
-        BOOK_TEXT = """<utwor>
+        book_text = """<utwor>
         <liryka_l>
             <nazwa_utworu>Nic</nazwa_utworu>
         </liryka_l></utwor>
         """
 
-        book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info)
+        book = models.Book.from_text_and_meta(ContentFile(book_text), self.book_info)
         self.assertTrue(book.has_html_file())
 
     def test_book_with_fragment(self):
-        BOOK_TEXT = """<utwor>
+        book_text = """<utwor>
         <opowiadanie>
             <akap><begin id="m01" /><motyw id="m01">Love</motyw>Ala ma kota<end id="m01" /></akap>
         </opowiadanie></utwor>
         """
 
-        book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info)
+        book = models.Book.from_text_and_meta(ContentFile(book_text), self.book_info)
         self.assertTrue(book.has_html_file())
 
         self.assertEqual(book.fragments.count(), 1)
         self.assertEqual(book.fragments.all()[0].text, u'<p class="paragraph">Ala ma kota</p>\n')
 
-        self.assert_(('theme', 'love') in [ (tag.category, tag.slug) for tag in book.fragments.all()[0].tags ])
+        self.assert_(('theme', 'love') in [(tag.category, tag.slug) for tag in book.fragments.all()[0].tags])
 
     def test_book_with_empty_theme(self):
         """ empty themes should be ignored """
 
-        BOOK_TEXT = """<utwor>
+        book_text = """<utwor>
         <opowiadanie>
             <akap><begin id="m01" /><motyw id="m01"> , Love , , </motyw>Ala ma kota<end id="m01" /></akap>
         </opowiadanie></utwor>
         """
 
-        book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info)
+        book = models.Book.from_text_and_meta(ContentFile(book_text), self.book_info)
         self.assert_([('theme', 'love')],
-                         [ (tag.category, tag.slug) for tag in book.fragments.all()[0].tags.filter(category='theme') ])
+                     book.fragments.all()[0].tags.filter(category='theme').values_list('category', 'slug'))
 
     def test_book_with_no_theme(self):
         """ fragments with no themes shouldn't be created at all """
 
-        BOOK_TEXT = """<utwor>
+        book_text = """<utwor>
         <opowiadanie>
             <akap><begin id="m01" /><motyw id="m01"></motyw>Ala ma kota<end id="m01" /></akap>
         </opowiadanie></utwor>
         """
 
-        book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info)
+        book = models.Book.from_text_and_meta(ContentFile(book_text), self.book_info)
         self.assertEqual(book.fragments.count(), 0)
         self.assertEqual(book.tags.filter(category='theme').count(), 0)
 
@@ -117,27 +116,27 @@ class BookImportLogicTests(WLTestCase):
     def test_book_with_invalid_slug(self):
         """ Book with invalid characters in slug shouldn't be imported """
         self.book_info.url = WLURI.from_slug(u"default_book")
-        BOOK_TEXT = "<utwor />"
-        models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info)
+        book_text = "<utwor />"
+        models.Book.from_text_and_meta(ContentFile(book_text), self.book_info)
 
     def test_book_replace_title(self):
-        BOOK_TEXT = """<utwor />"""
-        book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info)
+        book_text = """<utwor />"""
+        models.Book.from_text_and_meta(ContentFile(book_text), self.book_info)
         self.book_info.title = u"Extraordinary"
-        book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info, overwrite=True)
+        book = models.Book.from_text_and_meta(ContentFile(book_text), self.book_info, overwrite=True)
 
-        tags = [ (tag.category, tag.slug) for tag in book.tags ]
+        tags = [(tag.category, tag.slug) for tag in book.tags]
         tags.sort()
 
         self.assertEqual(tags, self.expected_tags)
 
     def test_book_replace_author(self):
-        BOOK_TEXT = """<utwor />"""
-        book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info)
+        book_text = """<utwor />"""
+        models.Book.from_text_and_meta(ContentFile(book_text), self.book_info)
         self.book_info.author = PersonStub(("Hans", "Christian"), "Andersen")
-        book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info, overwrite=True)
+        book = models.Book.from_text_and_meta(ContentFile(book_text), self.book_info, overwrite=True)
 
-        tags = [ (tag.category, tag.slug) for tag in book.tags ]
+        tags = [(tag.category, tag.slug) for tag in book.tags]
         tags.sort()
 
         self.expected_tags.remove(('author', 'jim-lazy'))
@@ -150,7 +149,7 @@ class BookImportLogicTests(WLTestCase):
         models.Tag.objects.get(slug="jim-lazy", category="author")
 
     def test_book_remove_fragment(self):
-        BOOK_TEXT = """<utwor>
+        book_text = """<utwor>
         <opowiadanie>
             <akap>
                 <begin id="m01" /><motyw id="m01">Love</motyw>Ala ma kota<end id="m01" />
@@ -158,7 +157,7 @@ class BookImportLogicTests(WLTestCase):
             </akap>
         </opowiadanie></utwor>
         """
-        BOOK_TEXT_AFTER = """<utwor>
+        book_text_after = """<utwor>
         <opowiadanie>
             <akap>
                 <begin id="m01" /><motyw id="m01">Love</motyw>Ala ma kota<end id="m01" />
@@ -167,13 +166,13 @@ class BookImportLogicTests(WLTestCase):
         </opowiadanie></utwor>
         """
 
-        book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info)
+        book = models.Book.from_text_and_meta(ContentFile(book_text), self.book_info)
         self.assertEqual(book.fragments.count(), 2)
-        book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT_AFTER), self.book_info, overwrite=True)
+        book = models.Book.from_text_and_meta(ContentFile(book_text_after), self.book_info, overwrite=True)
         self.assertEqual(book.fragments.count(), 1)
 
     def test_multiple_tags(self):
-        BOOK_TEXT = """<utwor />"""
+        book_text = """<utwor />"""
         self.book_info.authors = self.book_info.author, PersonStub(("Joe",), "Dilligent"),
         self.book_info.kinds = self.book_info.kind, 'Y-Kind',
         self.book_info.genres = self.book_info.genre, 'Y-Genre',
@@ -187,8 +186,8 @@ class BookImportLogicTests(WLTestCase):
         ])
         self.expected_tags.sort()
 
-        book = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.book_info)
-        tags = [ (tag.category, tag.slug) for tag in book.tags ]
+        book = models.Book.from_text_and_meta(ContentFile(book_text), self.book_info)
+        tags = [(tag.category, tag.slug) for tag in book.tags]
         tags.sort()
 
         self.assertEqual(tags, self.expected_tags)
@@ -216,32 +215,30 @@ class ChildImportTests(WLTestCase):
         )
 
     def test_child(self):
-        TEXT = """<utwor />"""
-        child = models.Book.from_text_and_meta(ContentFile(TEXT), self.child_info)
-        parent = models.Book.from_text_and_meta(ContentFile(TEXT), self.parent_info)
+        text = """<utwor />"""
+        child = models.Book.from_text_and_meta(ContentFile(text), self.child_info)
+        parent = models.Book.from_text_and_meta(ContentFile(text), self.parent_info)
         author = parent.tags.get(category='author')
         books = self.client.get(author.get_absolute_url()).context['object_list']
-        self.assertEqual(len(books), 1,
-                        "Only parent book should be visible on author's page")
+        self.assertEqual(len(books), 1, "Only parent book should be visible on author's page")
 
     def test_child_replace(self):
-        PARENT_TEXT = """<utwor />"""
-        CHILD_TEXT = """<utwor>
+        parent_text = """<utwor />"""
+        child_text = """<utwor>
         <opowiadanie>
             <akap><begin id="m01" /><motyw id="m01">Pies</motyw>Ala ma kota<end id="m01" /></akap>
         </opowiadanie></utwor>
         """
-        child = models.Book.from_text_and_meta(ContentFile(CHILD_TEXT), self.child_info)
-        parent = models.Book.from_text_and_meta(ContentFile(PARENT_TEXT), self.parent_info)
-        CHILD_TEXT = """<utwor>
+        child = models.Book.from_text_and_meta(ContentFile(child_text), self.child_info)
+        parent = models.Book.from_text_and_meta(ContentFile(parent_text), self.parent_info)
+        child_text = """<utwor>
         <opowiadanie>
             <akap><begin id="m01" /><motyw id="m01">Kot</motyw>Ala ma kota<end id="m01" /></akap>
         </opowiadanie></utwor>
         """
-        child = models.Book.from_text_and_meta(ContentFile(CHILD_TEXT), self.child_info, overwrite=True)
+        child = models.Book.from_text_and_meta(ContentFile(child_text), self.child_info, overwrite=True)
         themes = parent.related_themes()
-        self.assertEqual(['Kot'], [tag.name for tag in themes],
-                        'wrong related theme list')
+        self.assertEqual(['Kot'], [tag.name for tag in themes], 'wrong related theme list')
 
 
 class TreeImportTest(WLTestCase):
@@ -289,47 +286,38 @@ class TreeImportTest(WLTestCase):
 
     def test_ok(self):
         self.assertEqual(
-                list(self.client.get('/katalog/gatunek/x-genre/'
-                    ).context['object_list']),
+                list(self.client.get('/katalog/gatunek/x-genre/').context['object_list']),
                 [self.parent],
                 u"There should be only parent on common tag page."
             )
-        pies = models.Tag.objects.get(slug='pies')
+        pies = models.Tag.objects.get(slug='pies')
         themes = self.parent.related_themes()
-        self.assertEqual(len(themes), 1,
-                u"There should be child theme in parent theme counter."
-            )
+        self.assertEqual(len(themes), 1, u"There should be child theme in parent theme counter.")
         # TODO: book_count is deprecated, update here.
-        #~ epoch = models.Tag.objects.get(slug='x-epoch')
-        #~ self.assertEqual(epoch.book_count, 1,
-                #~ u"There should be only parent in common tag's counter."
-            #~ )
+        # epoch = models.Tag.objects.get(slug='x-epoch')
+        # self.assertEqual(epoch.book_count, 1, u"There should be only parent in common tag's counter.")
 
     def test_child_republish(self):
-        CHILD_TEXT = """<utwor>
+        child_text = """<utwor>
         <opowiadanie>
             <akap><begin id="m01" /><motyw id="m01">Pies, Kot</motyw>
                 Ala ma kota<end id="m01" /></akap>
         </opowiadanie></utwor>
         """
         models.Book.from_text_and_meta(
-            ContentFile(CHILD_TEXT), self.child_info, overwrite=True)
+            ContentFile(child_text), self.child_info, overwrite=True)
         self.assertEqual(
-                list(self.client.get('/katalog/gatunek/x-genre/'
-                    ).context['object_list']),
+                list(self.client.get('/katalog/gatunek/x-genre/').context['object_list']),
                 [self.parent],
                 u"There should only be parent on common tag page."
             )
-        pies = models.Tag.objects.get(slug='pies')
-        kot = models.Tag.objects.get(slug='kot')
+        pies = models.Tag.objects.get(slug='pies')
+        kot = models.Tag.objects.get(slug='kot')
         self.assertEqual(len(self.parent.related_themes()), 2,
-                u"There should be child themes in parent theme counter."
-            )
+                         u"There should be child themes in parent theme counter.")
         # TODO: book_count is deprecated, update here.
-        #~ epoch = models.Tag.objects.get(slug='x-epoch')
-        #~ self.assertEqual(epoch.book_count, 1,
-                #~ u"There should only be parent in common tag's counter."
-            #~ )
+        # epoch = models.Tag.objects.get(slug='x-epoch')
+        # self.assertEqual(epoch.book_count, 1, u"There should only be parent in common tag's counter.")
 
     def test_book_change_child(self):
         second_child_info = BookInfoStub(
@@ -339,7 +327,7 @@ class TreeImportTest(WLTestCase):
             author=PersonStub(("Joe",), "Doe"),
             **info_args("Second Child")
         )
-        SECOND_CHILD_TEXT = """<utwor>
+        second_child_text = """<utwor>
         <opowiadanie>
             <akap><begin id="m01" /><motyw id="m01">Kot</motyw>
                 Ala ma kota<end id="m01" /></akap>
@@ -347,39 +335,34 @@ class TreeImportTest(WLTestCase):
         """
         # Import a second child.
         second_child = models.Book.from_text_and_meta(
-            ContentFile(SECOND_CHILD_TEXT), second_child_info)
+            ContentFile(second_child_text), second_child_info)
         # The book has only this new child now.
         self.book_info.parts = [second_child_info.url]
         self.book = models.Book.from_text_and_meta(
             ContentFile(self.BOOK_TEXT), self.book_info, overwrite=True)
 
         self.assertEqual(
-                set(self.client.get('/katalog/gatunek/x-genre/'
-                    ).context['object_list']),
-                set([self.parent, self.child]),
-                u"There should be parent and old child on common tag page."
-            )
-        kot = models.Tag.objects.get(slug='kot')
+            set(self.client.get('/katalog/gatunek/x-genre/').context['object_list']),
+            {self.parent, self.child},
+            u"There should be parent and old child on common tag page."
+        )
+        # kot = models.Tag.objects.get(slug='kot')
         self.assertEqual(len(self.parent.related_themes()), 1,
-                u"There should only be new child themes in parent theme counter."
-            )
-        epoch = models.Tag.objects.get(slug='x-epoch')
-        # book_count deprecated, update test.
-        #~ self.assertEqual(epoch.book_count, 2,
-                #~ u"There should be parent and old child in common tag's counter."
-            #~ )
+                         u"There should only be new child themes in parent theme counter.")
+        # # book_count deprecated, update test.
+        # epoch = models.Tag.objects.get(slug='x-epoch')
+        # self.assertEqual(epoch.book_count, 2,
+        #                  u"There should be parent and old child in common tag's counter.")
         self.assertEqual(
-                list(self.client.get('/katalog/lektura/parent/motyw/kot/'
-                    ).context['fragments']),
-                [second_child.fragments.all()[0]],
-                u"There should be new child's fragments on parent's theme page."
-            )
+            list(self.client.get('/katalog/lektura/parent/motyw/kot/').context['fragments']),
+            [second_child.fragments.all()[0]],
+            u"There should be new child's fragments on parent's theme page."
+        )
         self.assertEqual(
-                list(self.client.get('/katalog/lektura/parent/motyw/pies/'
-                    ).context['fragments']),
-                [],
-                u"There should be no old child's fragments on parent's theme page."
-            )
+            list(self.client.get('/katalog/lektura/parent/motyw/pies/').context['fragments']),
+            [],
+            u"There should be no old child's fragments on parent's theme page."
+        )
 
 
 class MultilingualBookImportTest(WLTestCase):
@@ -406,16 +389,16 @@ class MultilingualBookImportTest(WLTestCase):
         )
 
     def test_multilingual_import(self):
-        BOOK_TEXT = """<utwor><opowiadanie><akap>A</akap></opowiadanie></utwor>"""
+        book_text = """<utwor><opowiadanie><akap>A</akap></opowiadanie></utwor>"""
 
-        book1 = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.pol_info)
-        book2 = models.Book.from_text_and_meta(ContentFile(BOOK_TEXT), self.eng_info)
+        models.Book.from_text_and_meta(ContentFile(book_text), self.pol_info)
+        models.Book.from_text_and_meta(ContentFile(book_text), self.eng_info)
 
         self.assertEqual(
-                set([b.language for b in models.Book.objects.all()]),
-                set(['pol', 'eng']),
-                'Books imported in wrong languages.'
-            )
+            set([b.language for b in models.Book.objects.all()]),
+            {'pol', 'eng'},
+            'Books imported in wrong languages.'
+        )
 
 
 class BookImportGenerateTest(WLTestCase):
@@ -445,6 +428,5 @@ class BookImportGenerateTest(WLTestCase):
         if not path.exists(path.dirname(absoulute_path)):
             makedirs(path.dirname(absoulute_path))
 
-        build_custom_pdf(self.book.id,
-            customizations=['nofootnotes', '13pt', 'a4paper'], file_name=out)
+        build_custom_pdf(self.book.id, customizations=['nofootnotes', '13pt', 'a4paper'], file_name=out)
         self.assertTrue(path.exists(absoulute_path))