fix test for custom pdf file generation
[wolnelektury.git] / apps / catalogue / tests / book_import.py
index eb5cea7..f4588d1 100644 (file)
@@ -1,10 +1,13 @@
 # -*- coding: utf-8 -*-
-from django.core.files.base import ContentFile
+from __future__ import with_statement
+
+from django.core.files.base import ContentFile, File
 from catalogue.test_utils import *
 from catalogue import models
 
 from nose.tools import raises
-
+import tempfile
+from os import unlink, path, makedirs
 
 class BookImportLogicTests(WLTestCase):
 
@@ -43,7 +46,6 @@ class BookImportLogicTests(WLTestCase):
         # TODO: this should be filled out probably...
         self.assertEqual(book.wiki_link, '')
         self.assertEqual(book.gazeta_link, '')
-        self.assertEqual(book._short_html, '')
         self.assertEqual(book.description, '')
 
         tags = [ (tag.category, tag.slug) for tag in book.tags ]
@@ -143,6 +145,29 @@ class BookImportLogicTests(WLTestCase):
         # the old tag shouldn't disappear
         models.Tag.objects.get(slug="jim-lazy", category="author")
 
+    def test_book_remove_fragment(self):
+        BOOK_TEXT = """<utwor>
+        <opowiadanie>
+            <akap>
+                <begin id="m01" /><motyw id="m01">Love</motyw>Ala ma kota<end id="m01" />
+                <begin id="m02" /><motyw id="m02">Hatred</motyw>To kot Ali<end id="m02" />
+            </akap>
+        </opowiadanie></utwor>
+        """
+        BOOK_TEXT_AFTER = """<utwor>
+        <opowiadanie>
+            <akap>
+                <begin id="m01" /><motyw id="m01">Love</motyw>Ala ma kota<end id="m01" />
+                To kot Ali
+            </akap>
+        </opowiadanie></utwor>
+        """
+
+        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)
+        self.assertEqual(book.fragments.count(), 1)
+
     def test_multiple_tags(self):
         BOOK_TEXT = """<utwor />"""
         self.book_info.authors = self.book_info.author, PersonStub(("Joe",), "Dilligent"),
@@ -186,6 +211,15 @@ class ChildImportTests(WLTestCase):
             **info_args("Parent")
         )
 
+    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)
+        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")
+
     def test_child_replace(self):
         PARENT_TEXT = """<utwor />"""
         CHILD_TEXT = """<utwor>
@@ -206,3 +240,31 @@ class ChildImportTests(WLTestCase):
 
         self.assertEqual(['Kot'], [tag.name for tag in themes],
                         'wrong related theme list')
+
+
+class BookImportGenerateTest(WLTestCase):
+    def setUp(self):
+        WLTestCase.setUp(self)
+        input = path.join(path.dirname(__file__), 'files/fraszka-do-anusie.xml')
+        self.book = models.Book.from_xml_file(input)
+
+    def test_gen_pdf(self):
+        self.book.build_pdf()
+        self.assertTrue(path.exists(self.book.pdf_file.path))
+
+    def test_gen_pdf_parent(self):
+        """This book contains a child."""
+        input = path.join(path.dirname(__file__), "files/fraszki.xml")
+        parent = models.Book.from_xml_file(input)
+        parent.build_pdf()
+        self.assertTrue(path.exists(parent.pdf_file.path))
+
+    def test_custom_pdf(self):
+        out = models.get_dynamic_path(None, 'test-custom', ext='pdf')
+        absoulute_path = path.join(settings.MEDIA_ROOT, out)
+        
+        if not path.exists(path.dirname(absoulute_path)):
+            makedirs(path.dirname(absoulute_path))
+
+        self.book.build_pdf(customizations=['nofootnotes', '13pt', 'a4paper'], file_name=out)
+        self.assertTrue(path.exists(absoulute_path))