kopia lustrzana https://github.com/jedie/PyInventory
Add tests to uploaded user images
rodzic
5ac950c884
commit
a238d5cb84
|
@ -0,0 +1,15 @@
|
|||
from django.contrib.auth.models import User
|
||||
from model_bakery import baker
|
||||
|
||||
from inventory.permissions import get_or_create_normal_user_group
|
||||
|
||||
|
||||
def get_normal_pyinventory_user(**baker_kwargs):
|
||||
pyinventory_user_group = get_or_create_normal_user_group()[0]
|
||||
pyinventory_user = baker.make(
|
||||
User,
|
||||
is_staff=True, is_active=True, is_superuser=False,
|
||||
**baker_kwargs
|
||||
)
|
||||
pyinventory_user.groups.set([pyinventory_user_group])
|
||||
return pyinventory_user
|
|
@ -0,0 +1,63 @@
|
|||
import tempfile
|
||||
from unittest import mock
|
||||
|
||||
from django.http import FileResponse
|
||||
from django.test import TestCase, override_settings
|
||||
from model_bakery import baker
|
||||
|
||||
from inventory.models import ItemImageModel
|
||||
from inventory.tests.fixtures.users import get_normal_pyinventory_user
|
||||
|
||||
|
||||
class ItemImagesTestCase(TestCase):
|
||||
def test_basics(self):
|
||||
pyinventory_user1 = get_normal_pyinventory_user(id=1)
|
||||
pyinventory_user2 = get_normal_pyinventory_user(id=2)
|
||||
|
||||
with tempfile.TemporaryDirectory() as tmpdir, override_settings(MEDIA_ROOT=tmpdir):
|
||||
print(tmpdir)
|
||||
|
||||
with self.assertLogs('inventory') as logs:
|
||||
with mock.patch('inventory.models.item.get_random_string', return_value='DrgCCsMrdIBJ'):
|
||||
image_instance = baker.make(
|
||||
ItemImageModel,
|
||||
user=pyinventory_user1,
|
||||
_create_files=True
|
||||
)
|
||||
assert image_instance.image is not None
|
||||
url = image_instance.image.url
|
||||
# url = f'/media/{image_instance.image}'
|
||||
assert url == '/media/user_1/DrgCCsMrdIBJ/mock_img.jpeg'
|
||||
assert logs.output == [
|
||||
"INFO:inventory.models.item:"
|
||||
"Upload filename: 'user_1/DrgCCsMrdIBJ/mock_img.jpeg'"
|
||||
]
|
||||
|
||||
# Anonymous user can't access:
|
||||
|
||||
with self.assertLogs('inventory') as logs, self.assertLogs('django'):
|
||||
response = self.client.get(url)
|
||||
assert response.status_code == 403
|
||||
assert logs.output == [
|
||||
'ERROR:inventory.views.media_files:Anonymous try to access files from: 1'
|
||||
]
|
||||
|
||||
# Wrong user should not access:
|
||||
|
||||
self.client.force_login(user=pyinventory_user2)
|
||||
|
||||
with self.assertLogs('inventory') as logs, self.assertLogs('django'):
|
||||
response = self.client.get(url)
|
||||
assert response.status_code == 403
|
||||
assert logs.output == [
|
||||
'ERROR:inventory.views.media_files:Wrong user ID: 2 is not 1'
|
||||
]
|
||||
|
||||
# The right user should access:
|
||||
|
||||
self.client.force_login(user=pyinventory_user1)
|
||||
|
||||
response = self.client.get(url)
|
||||
assert response.status_code == 200
|
||||
assert isinstance(response, FileResponse)
|
||||
assert response.getvalue() == image_instance.image.read()
|
Ładowanie…
Reference in New Issue