added XmlUpdater for massive XML updates
[redakcja.git] / apps / catalogue / tests / gallery.py
1 # -*- coding: utf-8 -*-
2 #
3 # This file is part of FNP-Redakcja, licensed under GNU Affero GPLv3 or later.
4 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
5 #
6 """Tests for galleries of scans."""
7
8 from os.path import join, basename, exists
9 from os import makedirs, listdir
10 from django.test import TestCase
11 from django.contrib.auth.models import User
12 from catalogue.models import Book
13 from tempfile import mkdtemp
14 from django.conf import settings
15
16
17 class GalleryAppendTests(TestCase):
18     def setUp(self):
19         self.user = User.objects.create(username='tester')
20         self.book1 = Book.create(self.user, 'book 1', slug='book1')
21         self.book1.chunk_set.create(number=2, title='Second chunk',
22                 slug='book 1 / 2')
23         c=self.book1[0]
24         c.gallery_start=1
25         c=self.book1[1]
26         c.gallery_start=3
27         
28         self.scandir = join(settings.MEDIA_ROOT, settings.IMAGE_DIR)
29         if not exists(self.scandir):
30             makedirs(self.scandir)
31
32     def make_gallery(self, book, files):
33         d = mkdtemp('gallery', dir=self.scandir)
34         for named, cont in files.items():
35             f = open(join(d, named), 'w')
36             f.write(cont)
37             f.close()
38         book.gallery = basename(d)
39
40
41     def test_both_indexed(self):
42         self.book2 = Book.create(self.user, 'book 2', slug='book2')
43         self.book2.chunk_set.create(number=2, title='Second chunk of second book',
44                 slug='book 2 / 2')
45
46         c = self.book2[0]
47         c.gallery_start = 1
48         c.save()
49         c = self.book2[1]
50         c.gallery_start = 3
51         c.save()
52         
53         print "gallery starts:",self.book2[0].gallery_start, self.book2[1].gallery_start
54
55         self.make_gallery(self.book1, {
56             '1-0001_1l' : 'aa',
57             '1-0001_2r' : 'bb',
58             '1-0002_1l' : 'cc',
59             '1-0002_2r' : 'dd',
60             })
61
62         self.make_gallery(self.book2, {
63             '1-0001_1l' : 'dd', # the same, should not be moved
64             '1-0001_2r' : 'ff',
65             '2-0002_1l' : 'gg',
66             '2-0002_2r' : 'hh',
67             })
68
69         self.book1.append(self.book2)
70
71         files = listdir(join(self.scandir, self.book1.gallery))
72         files.sort()
73         print files
74         self.assertEqual(files, [
75             '1-0001_1l',
76             '1-0001_2r',
77             '1-0002_1l',
78             '1-0002_2r',
79             #            '2-0001_1l',
80             '2-0001_2r',
81             '3-0002_1l',
82             '3-0002_2r',
83             ])        
84
85         self.assertEqual((4, 6), (self.book1[2].gallery_start, self.book1[3].gallery_start))
86         
87         
88     def test_none_indexed(self):
89         self.book2 = Book.create(self.user, 'book 2', slug='book2')
90         self.make_gallery(self.book1, {
91             '0001_1l' : 'aa',
92             '0001_2r' : 'bb',
93             '0002_1l' : 'cc',
94             '0002_2r' : 'dd',
95             })
96
97         self.make_gallery(self.book2, {
98             '0001_1l' : 'ee',
99             '0001_2r' : 'ff',
100             '0002_1l' : 'gg',
101             '0002_2r' : 'hh',
102             })
103
104         self.book1.append(self.book2)
105
106         files = listdir(join(self.scandir, self.book1.gallery))
107         files.sort()
108         print files
109         self.assertEqual(files, [
110             '0-0001_1l',
111             '0-0001_2r',
112             '0-0002_1l',
113             '0-0002_2r',
114             '1-0001_1l',
115             '1-0001_2r',
116             '1-0002_1l',
117             '1-0002_2r',
118             ])        
119
120
121     def test_none_indexed(self):
122         import nose.tools
123         self.book2 = Book.create(self.user, 'book 2', slug='book2')
124         self.make_gallery(self.book1, {
125             '1-0001_1l' : 'aa',
126             '1-0001_2r' : 'bb',
127             '1002_1l' : 'cc',
128             '1002_2r' : 'dd',
129             })
130
131         self.make_gallery(self.book2, {
132             '0001_1l' : 'ee',
133             '0001_2r' : 'ff',
134             '0002_1l' : 'gg',
135             '0002_2r' : 'hh',
136             })
137
138         self.book1.append(self.book2)
139
140         files = listdir(join(self.scandir, self.book1.gallery))
141         files.sort()
142         print files
143         self.assertEqual(files, [
144             '0-1-0001_1l',
145             '0-1-0001_2r',
146             '0-1002_1l',
147             '0-1002_2r',
148             '1-0001_1l',
149             '1-0001_2r',
150             '1-0002_1l',
151             '1-0002_2r',
152             ])        
153