From a238d5cb84de4598413b30e45616a9e1396fbc0d Mon Sep 17 00:00:00 2001 From: JensDiemer Date: Sun, 15 Nov 2020 14:31:37 +0100 Subject: [PATCH] Add tests to uploaded user images --- src/inventory/tests/__init__.py | 0 src/inventory/tests/fixtures/__init__.py | 0 src/inventory/tests/fixtures/users.py | 15 ++++++ src/inventory/tests/test_item_images.py | 63 ++++++++++++++++++++++++ 4 files changed, 78 insertions(+) create mode 100644 src/inventory/tests/__init__.py create mode 100644 src/inventory/tests/fixtures/__init__.py create mode 100644 src/inventory/tests/fixtures/users.py create mode 100644 src/inventory/tests/test_item_images.py diff --git a/src/inventory/tests/__init__.py b/src/inventory/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/inventory/tests/fixtures/__init__.py b/src/inventory/tests/fixtures/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/inventory/tests/fixtures/users.py b/src/inventory/tests/fixtures/users.py new file mode 100644 index 0000000..0b0a95c --- /dev/null +++ b/src/inventory/tests/fixtures/users.py @@ -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 diff --git a/src/inventory/tests/test_item_images.py b/src/inventory/tests/test_item_images.py new file mode 100644 index 0000000..7fd386b --- /dev/null +++ b/src/inventory/tests/test_item_images.py @@ -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()