8000 storage tests · pygeek/django-thumbnail@e829755 · GitHub
[go: up one dir, main page]

Skip to content

Commit e829755

Browse files
committed
storage tests
1 parent 3c8f195 commit e829755

File tree

5 files changed

+173
-8
lines changed

5 files changed

+173
-8
lines changed

tests/settings/default.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
'class': 'sorl.thumbnail.log.ThumbnailLogHandler',
1010
'level': 'ERROR',
1111
}
12+
THUMBNAIL_KVSTORE = 'thumbnail_tests.kvstore.TestKVStore'
13+
THUMBNAIL_STORAGE = 'thumbnail_tests.storage.TestStorage'
14+
DEFAULT_FILE_STORAGE = 'thumbnail_tests.storage.TestStorage'
1215
ADMINS = (
1316
('Sorl', 'thumbnail@sorl.net'),
1417
)
@@ -20,7 +23,7 @@
2023
}
2124
MEDIA_ROOT = pjoin(PROJ_ROOT, 'media')
2225
MEDIA_URL = '/media/'
23-
ROOT_URLCONF = 'tests.urls'
26+
ROOT_URLCONF = 'thumbnail_tests.urls'
2427
INSTALLED_APPS = (
2528
'thumbnail',
2629
'thumbnail_tests',

tests/thumbnail_tests/kvstore.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
from sorl.thumbnail.kvstores.cached_db_kvstore import KVStore
2+
3+
4+
class KVlogHandler(object):
5+
_log = []
6+
_active = False
7+
8+
def start_log(self):
9+
self._active = True
10+
11+
def stop_log(self):
12+
self._active = False
13+
log = self._log[:]
14+
self._log = []
15+
return log
16+
17+
def log(self, s):
18+
if self._active:
19+
self._log.append(s)
20+
21+
22+
kvlog = KVlogHandler()
23+
24+
25+
class TestKvStoreMixin(object):
26+
def get(self, *args, **kwargs):
27+
kvlog.log('get')
28+
return super(TestKvStoreMixin, self).get(*args, **kwargs)
29+
30+
def set(self, *args, **kwargs):
31+
kvlog.log('set')
32+
return super(TestKvStoreMixin, self).set(*args, **kwargs)
33+
34+
def delete(self, *args, **kwargs):
35+
kvlog.log('delete')
36+
return super(TestKvStoreMixin, self).delete(*args, **kwargs)
37+
38+
39+
class TestKVStore(TestKvStoreMixin, KVStore):
40+
pass
41+

tests/thumbnail_tests/storage.py

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
from django.core.files.storage import FileSystemStorage
2+
3+
4+
class SlogHandler(object):
5+
_log = []
6+
_active = False
7+
8+
def start_log(self):
9+
self._active = True
10+
11+
def stop_log(self):
12+
self._active = False
13+
log = self._log[:]
14+
self._log = []
15+
return log
16+
17+
def log(self, s):
18+
if self._active:
19+
self._log.append(s)
20+
21+
22+
slog = SlogHandler()
23+
24+
25+
class TestStorageMixin(object):
26+
def open(self, name, *args, **kwargs):
27+
slog.log('open: %s' % name)
28+
return super(TestStorageMixin, self).open(name, *args, **kwargs)
29+
30+
def save(self, name, *args, **kwargs):
31+
slog.log('save: %s' % name)
32+
return super(TestStorageMixin, self).save(name, *args, **kwargs)
33+
34+
def get_valid_name(self, name, *args, **kwargs):
35+
slog.log('get_valid_name: %s' % name)
36+
return super(TestStorageMixin, self).get_valid_name(name, *args, **kwargs)
37+
38+
def get_available_name(self, name, *args, **kwargs):
39+
slog.log('get_available_name: %s' % name)
40+
return super(TestStorageMixin, self).get_available_name(name, *args, **kwargs)
41+
42+
def path(self, name, *args, **kwargs):
43+
#slog.log('path: %s' % name)
44+
return super(TestStorageMixin, self).path(name, *args, **kwargs)
45+
46+
def delete(self, name, *args, **kwargs):
47+
slog.log('delete: %s' % name)
48+
return super(TestStorageMixin, self).delete(name, *args, **kwargs)
49+
50+
def exists(self, name, *args, **kwargs):
51+
slog.log('exists: %s' % name)
52+
return super(TestStorageMixin, self).exists(name, *args, **kwargs)
53+
54+
def listdir(self, name, *args, **kwargs):
55+
slog.log('listdir: %s' % name)
56+
return super(TestStorageMixin, self).listdir(name, *args, **kwargs)
57+
58+
def size(self, name, *args, **kwargs):
59+
slog.log('size: %s' % name)
60+
return super(TestStorageMixin, self).size(name, *args, **kwargs)
61+
62+
def url(self, name, *args, **kwargs):
63+
#slog.log('url: %s' % name)
64+
return super(TestStorageMixin, self).url(name, *args, **kwargs)
65+
66+
def accessed_time(self, name, *args, **kwargs):
67+
slog.log('accessed_time: %s' % name)
68+
return super(TestStorageMixin, self).accessed_time(name, *args, **kwargs)
69+
70+
def created_time(self, name, *args, **kwargs):
71+
slog.log('created_time: %s' % name)
72+
return super(TestStorageMixin, self).created_time(name, *args, **kwargs)
73+
74+
def modified_time(self, name, *args, **kwargs):
75+
slog.log('modified_time: %s' % name)
76+
return super(TestStorageMixin, self).modified_time(name, *args, **kwargs)
77+
78+
79+
class TestStorage(TestStorageMixin, FileSystemStorage):
80+
pass
81+

tests/thumbnail_tests/tests.py

Lines changed: 47 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import os
55
import re
66
import shutil
7+
import sys
78
import unittest
89
from PIL import Image
910
from django.core.files.storage import default_storage
@@ -20,13 +21,52 @@
2021
from sorl.thumbnail.templatetags.thumbnail import margin
2122
from subprocess import Popen, PIPE
2223
from thumbnail_tests.models import Item
24+
from thumbnail_tests.storage import slog
2325

2426

2527
handler = ThumbnailLogHandler()
2628
handler.setLevel(logging.ERROR)
2729
logging.getLogger('sorl.thumbnail').addHandler(handler)
2830

2931

32+
class StorageTestCase(unittest.TestCase):
33+
def setUp(self):
34+
name = 'org.jpg'
35+
os.makedirs(settings.MEDIA_ROOT)
36+
fn = pjoin(settings.MEDIA_ROOT, name)
37+
Image.new('L', (100, 100)).save(fn)
38+
self.im = ImageFile(name)
39+
40+
def test_a_new(self):
41+
slog.start_log()
42+
get_thumbnail(self.im, '50x50')
43+
log = slog.stop_log()
44+
actions = [
45+
'exists: test/cache/20/c7/20c7ceda51cd4d26f8f4f375cf9dddf3.jpg', # first see if the file exists
46+
'open: org.jpg', # open the original for thumbnailing
47+
'save: test/cache/20/c7/20c7ceda51cd4d26f8f4f375cf9dddf3.jpg', # save the file
48+
'get_available_name: test/cache/20/c7/20c7ceda51cd4d26f8f4f375cf9dddf3.jpg', # cehck for filename
49+
'exists: test/cache/20/c7/20c7ceda51cd4d26f8f4f375cf9dddf3.jpg', # called by get_available_name
50+
]
51+
self.assertEqual(log, actions)
52+
53+
def test_b_cached(self):
54+
slog.start_log()
55+
get_thumbnail(self.im, '50x50')
56+
log< F987 /span> = slog.stop_log()
57+
self.assertEqual(log, []) # now this should all be in cache
58+
59+
def test_c_safe_methods(self):
60+
slog.start_log()
61+
im = default.kvstore.get(self.im)
62+
im.url, im.x, im.y
63+
log = slog.stop_log()
64+
self.assertEqual(log, [])
65+
66+
def tearDown(self):
67+
shutil.rmtree(settings.MEDIA_ROOT)
68+
69+
3070
class ParsersTestCase(unittest.TestCase):
3171
def testAliasCrop(self):
3272
crop = parse_crop('center', (500, 500), (400, 400))
@@ -172,26 +212,26 @@ def keys_test(x, y, z):
172212

173213
def test_storage_serialize(self):
174214
im = ImageFile(Item.objects.get(image='500x500.jpg').image)
175-
self.assertEqual(im.serialize_storage(), 'django.core.files.storage.FileSystemStorage')
215+
self.assertEqual(im.serialize_storage(), 'thumbnail_tests.storage.TestStorage')
176216
self.assertEqual(
177217
ImageFile('http://www.image.jpg').serialize_storage(),
178218
'sorl.thumbnail.images.UrlStorage',
179219
)
180220
self.assertEqual(
181221
ImageFile('http://www.image.jpg', default.storage).serialize_storage(),
182-
'django.core.files.storage.FileSystemStorage',
222+
'thumbnail_tests.storage.TestStorage',
183223
)
184224
self.assertEqual(
185225
ImageFile('getit', default_storage).serialize_storage(),
186-
'django.core.files.storage.FileSystemStorage',
226+
'thumbnail_tests.storage.TestStorage',
187227
)
188228

189229
def test_image_file_deserialize(self):
190230
im = ImageFile(Item.objects.get(image='500x500.jpg').image)
191231
default.kvstore.set(im)
192232
self.assertEqual(
193233
default.kvstore.get(im).serialize_storage(),
194-
'django.core.files.storage.FileSystemStorage',
234+
'thumbnail_tests.storage.TestStorage',
195235
)
196236
im = ImageFile('http://www.aino.se/media/i/logo.png')
197237
default.kvstore.set(im)
@@ -227,8 +267,8 @@ def test_nested(self):
227267
val = render_to_string('thumbnail6.html', {
228268
'item': item,
229269
}).strip()
230-
self.assertEqual(val, ('<a href="/media/test/cache/57/ba/57ba10c5a6c56dc71362d9b1427cb0b4.jpg">'
231-
'<img src="/media/test/cache/6c/c3/6cc32cd4aa002c577b534442c11e07d2.jpg" width="400" height="400">'
270+
self.assertEqual(val, ('<a href="/media/test/cache/ac/78/ac78a0326054e1d795cba4016ee54966.jpg">'
271+
'<img src="/media/test/cache/4b/44/4b44d2d5f5cf0a35a1450873c88e28b7.jpg" width="400" height="400">'
232272
'</a>'))
233273

234274
def test_serialization_options(self):
@@ -514,7 +554,7 @@ def test_nonascii(self):
514554
th = get_thumbnail(self.name, '200x200')
515555
self.assertEqual(
516556
th.url,
517-
'/media/test/cache/4c/ed/4cede3c3e9dc62dcd3164e680e611c87.jpg'
557+
'/media/test/cache/8a/17/8a17eff95c6ecf46f82d0807d93631e9.jpg'
518558
)
519559

520560
def tearDown(self):
File renamed without changes.

0 commit comments

Comments
 (0)
0