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