Skip to content

Commit fd12c52

Browse files
committed
refactor test to work with file instead of image
1 parent f3ed5bf commit fd12c52

File tree

5 files changed

+48
-39
lines changed

5 files changed

+48
-39
lines changed

finder/admin/folder.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ def update_inode(self, request, folder_id):
228228
return response
229229
body = json.loads(request.body)
230230
try:
231-
obj = self.get_object(request, body['id'])
231+
inode_obj = self.get_object(request, body['id'])
232232
except (ObjectDoesNotExist, KeyError):
233233
return HttpResponseNotFound(f"InodeModel<id={body.get('id', '<missing>')}> not found.")
234234
current_folder = self.get_object(request, folder_id)
@@ -241,14 +241,14 @@ def update_inode(self, request, folder_id):
241241
msg = gettext("A folder named “{name}” already exists.")
242242
return HttpResponse(msg.format(name=inode_name), status=409)
243243
update_values = {}
244-
for field in self.get_fields(request, obj):
245-
if field in body and body[field] != getattr(obj, field):
246-
setattr(obj, field, body[field])
244+
for field in self.get_fields(request, inode_obj):
245+
if field in body and body[field] != getattr(inode_obj, field):
246+
setattr(inode_obj, field, body[field])
247247
update_values[field] = body[field]
248248
if update_values:
249-
obj.save(update_fields=list(update_values.keys()))
249+
inode_obj.save(update_fields=list(update_values.keys()))
250250
return JsonResponse({
251-
'new_inode': self.serialize_inode(obj),
251+
'new_inode': self.serialize_inode(inode_obj),
252252
'favorite_folders': self.get_favorite_folders(request, current_folder),
253253
})
254254

finder/contrib/archive/admin.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ def archive_selected(self, request, folder_id):
5353
for inode_id in body['inode_ids']:
5454
try:
5555
inode_obj = FolderModel.objects.get_inode(id=inode_id)
56-
except FolderModel.DoesNotExist:
56+
except ObjectDoesNotExist:
5757
return HttpResponseBadRequest(f"Inode with ID “{inode_id}” not found")
5858
else:
5959
inode_objects.append(inode_obj)

unittests/conftest.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import os
22
import pytest
3+
import random
34

45
from django.conf import settings
56
from django.core.management import call_command
@@ -16,13 +17,21 @@
1617
@pytest.fixture(autouse=True, scope='session')
1718
def create_assets():
1819
os.makedirs(settings.BASE_DIR / 'workdir/assets', exist_ok=True)
20+
with open(settings.BASE_DIR / 'workdir/assets/small_file.bin', 'wb') as handle:
21+
handle.write(random.randbytes(1000))
22+
with open(settings.BASE_DIR / 'workdir/assets/huge_file.bin', 'wb') as handle:
23+
handle.write(random.randbytes(100000))
1924
image = create_random_image()
2025
image.save(settings.BASE_DIR / 'workdir/assets/demo_image.png')
2126

2227

2328
@pytest.fixture(scope='session')
2429
def django_db_setup(django_db_blocker):
2530
database_file = settings.BASE_DIR / 'workdir/test_db.sqlite3'
31+
try:
32+
os.remove(database_file)
33+
except FileNotFoundError:
34+
pass
2635
settings.DATABASES['default']['NAME'] = database_file
2736
with django_db_blocker.unblock():
2837
call_command('migrate', verbosity=0)

unittests/test_folder_admin.py

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from django.urls import reverse
1414

1515
from filer import settings as filer_settings
16-
from finder.contrib.image.models import ImageFileModel
16+
from finder.models.file import FileModel
1717
from finder.models.folder import FolderModel
1818
from finder.models.realm import RealmModel
1919

@@ -72,13 +72,14 @@ def test_access_folder_not_found(admin_client):
7272

7373

7474
@pytest.mark.django_db
75-
def test_folder_upload_file(realm, admin_client):
75+
@pytest.mark.parametrize('binary_file', ['small_file.bin', 'huge_file.bin'])
76+
def test_folder_upload_file(realm, admin_client, binary_file):
7677
admin_url = reverse('admin:finder_inodemodel_change', kwargs={'inode_id': realm.root_folder.id})
7778
sha1 = hashlib.sha1()
78-
with open(settings.BASE_DIR / 'workdir/assets/demo_image.png', 'rb') as file_handle:
79+
with open(settings.BASE_DIR / 'workdir/assets' / binary_file, 'rb') as file_handle:
7980
response = admin_client.post(
8081
f'{admin_url}/upload',
81-
{'upload_file': file_handle, 'filename': 'demo_image.png'},
82+
{'upload_file': file_handle, 'filename': binary_file},
8283
content_type=MULTIPART_CONTENT % {'boundary': 'BoUnDaRyStRiNg'},
8384
)
8485
file_handle.seek(0)
@@ -87,15 +88,14 @@ def test_folder_upload_file(realm, admin_client):
8788
assert response.status_code == 200
8889
file_info = response.json()['file_info']
8990
id = file_info['id']
90-
assert file_info['name'] == 'demo_image.png'
91-
assert file_info['file_size'] == os.stat(settings.BASE_DIR / 'workdir/assets/demo_image.png').st_size
91+
assert file_info['name'] == binary_file
92+
assert file_info['file_size'] == os.stat(settings.BASE_DIR / 'workdir/assets' / binary_file).st_size
9293
assert file_info['sha1'] == sha1.hexdigest()
93-
assert file_info['mime_type'] == 'image/png'
94+
assert file_info['mime_type'] == 'application/octet-stream'
9495
filer_public = filer_settings.FILER_STORAGES['public']['main']['UPLOAD_TO_PREFIX']
95-
assert file_info['download_url'] == f'{settings.MEDIA_URL}{filer_public}/{id[0:2]}/{id[2:4]}/{id}/demo_image.png'
96-
filer_public_thumbnails = filer_settings.FILER_STORAGES['public']['thumbnails']['THUMBNAIL_OPTIONS']['base_dir']
97-
assert file_info['thumbnail_url'] == f'{settings.MEDIA_URL}{filer_public_thumbnails}/{id[0:2]}/{id[2:4]}/{id}/demo_image__180x180.png'
98-
assert ImageFileModel.objects.filter(id=id).exists()
96+
assert file_info['download_url'] == f'{settings.MEDIA_URL}{filer_public}/{id[0:2]}/{id[2:4]}/{id}/{binary_file}'
97+
assert file_info['thumbnail_url'] == f'{settings.STATIC_URL}filer/icons/file-unknown.svg'
98+
assert FileModel.objects.filter(id=id).exists()
9999

100100
# with wrong method
101101
response = admin_client.get(admin_url + '/upload')
@@ -114,11 +114,11 @@ def test_folder_upload_file(realm, admin_client):
114114

115115

116116
@pytest.fixture
117-
def uploaded_image(realm, admin_user):
118-
file_name = 'demo_image.png'
117+
def uploaded_file(realm, admin_user):
118+
file_name = 'small_file.bin'
119119
with open(settings.BASE_DIR / 'workdir/assets' / file_name, 'rb') as file_handle:
120-
uploaded_file = SimpleUploadedFile(file_name, file_handle.read(), content_type='image/png')
121-
return ImageFileModel.objects.create_from_upload(
120+
uploaded_file = SimpleUploadedFile(file_name, file_handle.read(), content_type='application/octet-stream')
121+
return FileModel.objects.create_from_upload(
122122
uploaded_file,
123123
folder=realm.root_folder,
124124
owner=admin_user,
@@ -135,21 +135,21 @@ def sub_folder(realm, admin_user):
135135

136136

137137
@pytest.mark.django_db
138-
def test_folder_fetch(realm, uploaded_image, admin_client):
138+
def test_folder_fetch(realm, uploaded_file, admin_client):
139139
admin_url = reverse('admin:finder_inodemodel_change', kwargs={'inode_id': realm.root_folder.id})
140140
response = admin_client.get(f'{admin_url}/fetch')
141141
assert response.status_code == 200
142142
inodes = response.json()['inodes']
143-
assert ImageFileModel.objects.filter(parent=realm.root_folder, id=inodes[0]['id']).exists()
143+
assert FileModel.objects.filter(parent=realm.root_folder, id=inodes[0]['id']).exists()
144144

145145
# found using search query
146-
response = admin_client.get(f'{admin_url}/fetch?q=demo')
146+
response = admin_client.get(f'{admin_url}/fetch?q=small')
147147
assert response.status_code == 200
148148
inodes = response.json()['inodes']
149-
assert ImageFileModel.objects.filter(parent=realm.root_folder, id=inodes[0]['id']).exists()
149+
assert FileModel.objects.filter(parent=realm.root_folder, id=inodes[0]['id']).exists()
150150

151151
# not found using search query
152-
response = admin_client.get(f'{admin_url}/fetch?q=nemo')
152+
response = admin_client.get(f'{admin_url}/fetch?q=foobar')
153153
assert response.status_code == 200
154154
inodes = response.json()['inodes']
155155
assert len(inodes) == 0
@@ -172,42 +172,42 @@ def update_inode_url(realm):
172172

173173

174174
@pytest.mark.django_db
175-
def test_update_inode_nothing_changed(update_inode_url, uploaded_image, admin_client):
175+
def test_update_inode_change_nothing(update_inode_url, uploaded_file, admin_client):
176176
response = admin_client.post(
177177
update_inode_url,
178-
{'id': str(uploaded_image.id), 'name': 'demo_image.png'},
178+
{'id': str(uploaded_file.id), 'name': uploaded_file.name},
179179
content_type='application/json',
180180
)
181181
assert response.status_code == 200
182182

183183

184184
@pytest.mark.django_db
185-
def test_update_inode_update_filename(update_inode_url, uploaded_image, admin_client):
185+
def test_update_inode_rename_file(update_inode_url, uploaded_file, admin_client):
186186
response = admin_client.post(
187187
update_inode_url,
188-
{'id': str(uploaded_image.id), 'name': 'renamed_image.png'},
188+
{'id': str(uploaded_file.id), 'name': "renamed_file.bin"},
189189
content_type='application/json',
190190
)
191191
assert response.status_code == 200
192-
uploaded_image.refresh_from_db()
193-
assert uploaded_image.name == 'renamed_image.png'
192+
uploaded_file.refresh_from_db()
193+
assert uploaded_file.name == "renamed_file.bin"
194194

195195

196196
@pytest.mark.django_db
197-
def test_update_inode_update_using_invalid_filename(update_inode_url, uploaded_image, admin_client):
197+
def test_update_inode_update_using_invalid_filename(update_inode_url, uploaded_file, admin_client):
198198
response = admin_client.post(
199199
update_inode_url,
200-
{'id': str(uploaded_image.id), 'name': 'invalid:name'},
200+
{'id': str(uploaded_file.id), 'name': 'invalid:name'},
201201
content_type='application/json',
202202
)
203203
assert response.status_code == 409
204204

205205

206206
@pytest.mark.django_db
207-
def test_update_inode_using_existing_folder_name(update_inode_url, uploaded_image, sub_folder, admin_client):
207+
def test_update_inode_using_existing_folder_name(update_inode_url, uploaded_file, sub_folder, admin_client):
208208
response = admin_client.post(
209209
update_inode_url,
210-
{'id': str(uploaded_image.id), 'name': "Sub Folder"},
210+
{'id': str(uploaded_file.id), 'name': "Sub Folder"},
211211
content_type='application/json',
212212
)
213213
assert response.status_code == 409
@@ -226,10 +226,10 @@ def test_update_inode_rename_folder(update_inode_url, sub_folder, admin_client):
226226

227227

228228
@pytest.mark.django_db
229-
def test_update_inode_update_with_missing_content_type(update_inode_url, uploaded_image, admin_client):
229+
def test_update_inode_update_with_missing_content_type(update_inode_url, uploaded_file, admin_client):
230230
response = admin_client.post(
231231
update_inode_url,
232-
{'id': str(uploaded_image.id), 'name': 'renamed_image.png'},
232+
{'id': str(uploaded_file.id), 'name': 'renamed_file.bin'},
233233
)
234234
assert response.status_code == 415
235235

unittests/test_image_png.py

Whitespace-only changes.

0 commit comments

Comments
 (0)