fix for missing IP in stats + stats for /api/
[wolnelektury.git] / apps / catalogue / tests / bookmedia.py
1 # -*- coding: utf-8 -*-
2 from os.path import basename
3 from django.core.files.base import ContentFile
4
5 from catalogue.test_utils import *
6 from catalogue import models
7
8 class BookMediaTests(WLTestCase):
9
10     def setUp(self):
11         WLTestCase.setUp(self)
12         self.file = ContentFile('X')
13         self.file2 = ContentFile('Y')
14         self.book = models.Book.objects.create(slug='test-book')
15
16     def test_diacritics(self):
17         bm = models.BookMedia(book=self.book, type="ogg", 
18                     name=u"Zażółć gęślą jaźń")
19         bm.file.save(None, self.file)
20         self.assertEqual(basename(bm.file.name), 'zazolc-gesla-jazn.ogg')
21
22     def test_long_name(self):
23         bm = models.BookMedia(book=self.book, type="ogg", 
24                     name="Some very very very very very very very very very very very very very very very very long file name")
25         bm.file.save(bm.name, self.file)
26
27         # reload to see what was really saved
28         bm = models.BookMedia.objects.get(pk=bm.pk)
29         self.assertEqual(bm.file.size, 1)
30
31     def test_overwrite(self):
32         """
33             File gets overwritten with same filename on update.
34         """
35
36         bm = models.BookMedia(book=self.book, type='ogg',
37                     name="Some media")
38         bm.file.save(None, self.file)
39         bm.file.save(None, self.file2)
40
41         self.assertEqual(bm.file.read(), 'Y')
42         self.assertEqual(basename(bm.file.name), 'some-media.ogg')
43
44     def test_no_clobber(self):
45         """
46             File save doesn't clobber some other media with similar name.
47         """
48
49         bm = models.BookMedia(book=self.book, type='ogg',
50             name=u"Tytul")
51         bm.file.save(None, self.file)
52         bm2 = models.BookMedia(book=self.book, type='ogg',
53             name=u"Tytuł")
54         bm2.file.save(None, self.file2)
55         self.assertEqual(basename(bm.file.name), 'tytul.ogg')
56         self.assertNotEqual(basename(bm2.file.name), 'tytul.ogg')
57         self.assertEqual(bm.file.read(), 'X')
58         self.assertEqual(bm2.file.read(), 'Y')
59
60     def test_change_name(self):
61         """
62             File name reflects name change.
63         """
64
65         bm = models.BookMedia(book=self.book, type='ogg', name="Title")
66         bm.file.save(None, self.file)
67         bm.name = "Other Title"
68         bm.save()
69         self.assertEqual(basename(bm.file.name), 'other-title.ogg')
70         self.assertEqual(bm.file.read(), 'X')
71
72     def test_change_name_no_clobber(self):
73         """
74             File name after change won't clobber some other file
75             with similar name.
76         """
77
78         bm = models.BookMedia(book=self.book, type='ogg', name="Title")
79         bm.file.save(None, self.file)
80         bm2 = models.BookMedia(book=self.book, type='ogg', name="Other title")
81         bm2.file.save(None, self.file2)
82         bm2.name = "Title"
83         bm2.save()
84         self.assertNotEqual(basename(bm2.file.name), 'title.ogg')
85         self.assertEqual(bm.file.read(), 'X')
86         self.assertEqual(bm2.file.read(), 'Y')