add method for splitting a book
authorRadek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>
Wed, 4 Jan 2012 13:18:05 +0000 (14:18 +0100)
committerRadek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>
Wed, 4 Jan 2012 13:20:53 +0000 (14:20 +0100)
apps/catalogue/models/book.py
apps/catalogue/tests/__init__.py

index 89c6267..13be963 100755 (executable)
@@ -209,6 +209,18 @@ class Book(models.Model):
         assert not other.chunk_set.exists()
         other.delete()
 
         assert not other.chunk_set.exists()
         other.delete()
 
+    def split(self):
+        """Splits all the chunks into separate books."""
+        self.title
+        for chunk in self:
+            book = Book.objects.create(title=chunk.title, slug=chunk.slug,
+                    public=self.public, gallery=self.gallery)
+            book[0].delete()
+            chunk.book = book
+            chunk.number = 1
+            chunk.save()
+        assert not self.chunk_set.exists()
+        self.delete()
 
     # State & cache
     # =============
 
     # State & cache
     # =============
index b03701f..600dbd2 100755 (executable)
@@ -70,3 +70,15 @@ class ManipulationTests(TestCase):
         self.assertEqual(Book.objects.all().count(), 2)
         self.assertEqual(self.book1.materialize(), 'book 1')
         self.assertEqual(self.book2.materialize(), 'book 2')
         self.assertEqual(Book.objects.all().count(), 2)
         self.assertEqual(self.book1.materialize(), 'book 1')
         self.assertEqual(self.book2.materialize(), 'book 2')
+
+    def test_split_book(self):
+        self.book1.chunk_set.create(number=2, title='Second chunk',
+                slug='book3')
+        self.book1[1].commit('I survived!')
+        self.assertEqual(len(self.book1), 2)
+        self.book1.split()
+        self.assertEqual(set([b.slug for b in Book.objects.all()]),
+                set(['book2', '1', 'book3']))
+        self.assertEqual(
+                Book.objects.get(slug='book3').materialize(),
+                'I survived!')