Add file caching tests
Signed-off-by: Roberto Rosario <roberto.rosario@mayan-edms.com>
This commit is contained in:
@@ -25,7 +25,7 @@ from .permissions import permission_cache_purge, permission_cache_view
|
||||
class FileCachingConfig(MayanAppConfig):
|
||||
app_namespace = 'file_caching'
|
||||
app_url = 'file_caching'
|
||||
has_tests = False
|
||||
has_tests = True
|
||||
name = 'mayan.apps.file_caching'
|
||||
verbose_name = _('File caching')
|
||||
|
||||
|
||||
0
mayan/apps/file_caching/tests/__init__.py
Normal file
0
mayan/apps/file_caching/tests/__init__.py
Normal file
9
mayan/apps/file_caching/tests/literals.py
Normal file
9
mayan/apps/file_caching/tests/literals.py
Normal file
@@ -0,0 +1,9 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
TEST_CACHE_LABEL = 'test cache label'
|
||||
TEST_CACHE_MAXIMUM_SIZE = 2 * 2 ** 20 # 2 Megabyte
|
||||
TEST_CACHE_NAME = 'test_cache_name'
|
||||
TEST_CACHE_PARTITION_FILE_FILENAME = 'test_cache_partition_file_filename'
|
||||
TEST_CACHE_PARTITION_FILE_SIZE = 1 * 2 ** 20 # 1 Megabyte
|
||||
TEST_CACHE_PARTITION_NAME = 'test_cache_partition_name'
|
||||
TEST_CACHE_STORAGE_INSTANCE_PATH = 'mayan.apps.file_caching.tests.mixins.test_storage'
|
||||
70
mayan/apps/file_caching/tests/mixins.py
Normal file
70
mayan/apps/file_caching/tests/mixins.py
Normal file
@@ -0,0 +1,70 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.core.files.storage import FileSystemStorage
|
||||
from django.utils.encoding import force_bytes
|
||||
|
||||
from mayan.apps.storage.utils import fs_cleanup, mkdtemp
|
||||
|
||||
from ..models import Cache
|
||||
|
||||
from .literals import (
|
||||
TEST_CACHE_LABEL, TEST_CACHE_MAXIMUM_SIZE, TEST_CACHE_NAME,
|
||||
TEST_CACHE_PARTITION_FILE_FILENAME, TEST_CACHE_PARTITION_FILE_SIZE,
|
||||
TEST_CACHE_PARTITION_NAME, TEST_CACHE_STORAGE_INSTANCE_PATH
|
||||
)
|
||||
|
||||
test_storage = None
|
||||
|
||||
|
||||
class CacheTestMixin(object):
|
||||
def setUp(self):
|
||||
global test_storage
|
||||
self.temporary_directory = mkdtemp()
|
||||
test_storage = FileSystemStorage(location=self.temporary_directory)
|
||||
super(CacheTestMixin, self).setUp()
|
||||
|
||||
def tearDown(self):
|
||||
super(CacheTestMixin, self).tearDown()
|
||||
fs_cleanup(filename=self.temporary_directory)
|
||||
|
||||
def _create_test_cache(self):
|
||||
self.test_cache = Cache.objects.create(
|
||||
label=TEST_CACHE_LABEL,
|
||||
storage_instance_path=TEST_CACHE_STORAGE_INSTANCE_PATH,
|
||||
maximum_size=TEST_CACHE_MAXIMUM_SIZE,
|
||||
name=TEST_CACHE_NAME,
|
||||
)
|
||||
|
||||
def _create_test_cache_partition(self):
|
||||
self.test_cache_partition = self.test_cache.partitions.create(
|
||||
name=TEST_CACHE_PARTITION_NAME
|
||||
)
|
||||
|
||||
def _create_test_cache_partition_file(self):
|
||||
with self.test_cache_partition.create_file(filename=TEST_CACHE_PARTITION_FILE_FILENAME) as file_object:
|
||||
file_object.write(
|
||||
force_bytes(' ' * TEST_CACHE_PARTITION_FILE_SIZE)
|
||||
)
|
||||
|
||||
self.test_cache_partition_file = self.test_cache_partition.files.get(
|
||||
filename=TEST_CACHE_PARTITION_FILE_FILENAME
|
||||
)
|
||||
|
||||
|
||||
class CacheViewTestMixin(object):
|
||||
def _request_test_cache_list_view(self):
|
||||
return self.get(viewname='file_caching:cache_list')
|
||||
|
||||
def _request_test_cache_purge_view(self):
|
||||
return self.post(
|
||||
viewname='file_caching:cache_purge', kwargs={
|
||||
'cache_id': self.test_cache.pk
|
||||
}
|
||||
)
|
||||
|
||||
def _request_test_cache_multiple_purge_view(self):
|
||||
return self.post(
|
||||
viewname='file_caching:cache_multiple_purge', data={
|
||||
'id_list': self.test_cache.pk
|
||||
}
|
||||
)
|
||||
42
mayan/apps/file_caching/tests/test_events.py
Normal file
42
mayan/apps/file_caching/tests/test_events.py
Normal file
@@ -0,0 +1,42 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from actstream.models import Action
|
||||
|
||||
from mayan.apps.common.tests import BaseTestCase
|
||||
|
||||
from ..events import event_cache_created, event_cache_purged
|
||||
from ..models import Cache
|
||||
|
||||
from .mixins import CacheTestMixin
|
||||
|
||||
|
||||
class CacheEventsTestCase(CacheTestMixin, BaseTestCase):
|
||||
def test_cache_create_event(self):
|
||||
action_count = Action.objects.count()
|
||||
|
||||
self._create_test_cache()
|
||||
|
||||
self.assertEqual(Action.objects.count(), action_count + 1)
|
||||
|
||||
event = Action.objects.first()
|
||||
|
||||
cache = Cache.objects.last()
|
||||
|
||||
self.assertEqual(event.verb, event_cache_created.id)
|
||||
self.assertEqual(event.target, cache)
|
||||
|
||||
def test_cache_purge_event(self):
|
||||
self._create_test_cache()
|
||||
|
||||
action_count = Action.objects.count()
|
||||
|
||||
self.test_cache.purge()
|
||||
|
||||
self.assertEqual(Action.objects.count(), action_count + 1)
|
||||
|
||||
event = Action.objects.first()
|
||||
|
||||
cache = Cache.objects.last()
|
||||
|
||||
self.assertEqual(event.verb, event_cache_purged.id)
|
||||
self.assertEqual(event.target, cache)
|
||||
18
mayan/apps/file_caching/tests/test_models.py
Normal file
18
mayan/apps/file_caching/tests/test_models.py
Normal file
@@ -0,0 +1,18 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from mayan.apps.common.tests import BaseTestCase
|
||||
|
||||
from .mixins import CacheTestMixin
|
||||
|
||||
|
||||
class CacheModelTestCase(CacheTestMixin, BaseTestCase):
|
||||
def test_cache_purge(self):
|
||||
self._create_test_cache()
|
||||
self._create_test_cache_partition()
|
||||
self._create_test_cache_partition_file()
|
||||
|
||||
cache_total_size = self.test_cache.get_total_size()
|
||||
|
||||
self.test_cache.purge()
|
||||
|
||||
self.assertNotEqual(cache_total_size, self.test_cache.get_total_size())
|
||||
89
mayan/apps/file_caching/tests/test_views.py
Normal file
89
mayan/apps/file_caching/tests/test_views.py
Normal file
@@ -0,0 +1,89 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from mayan.apps.common.tests import GenericViewTestCase
|
||||
|
||||
from ..permissions import (
|
||||
permission_cache_purge, permission_cache_view
|
||||
)
|
||||
|
||||
from .mixins import CacheTestMixin, CacheViewTestMixin
|
||||
|
||||
|
||||
class CacheViewTestCase(
|
||||
CacheTestMixin, CacheViewTestMixin, GenericViewTestCase
|
||||
):
|
||||
def test_cache_list_view_with_no_permission(self):
|
||||
self._create_test_cache()
|
||||
|
||||
response = self._request_test_cache_list_view()
|
||||
self.assertNotContains(
|
||||
response=response, text=self.test_cache.label, status_code=200
|
||||
)
|
||||
|
||||
def test_cache_list_view_with_access(self):
|
||||
self._create_test_cache()
|
||||
|
||||
self.grant_access(
|
||||
obj=self.test_cache, permission=permission_cache_view
|
||||
)
|
||||
|
||||
response = self._request_test_cache_list_view()
|
||||
self.assertContains(
|
||||
response=response, text=self.test_cache.label, status_code=200
|
||||
)
|
||||
|
||||
def test_cache_purge_view_no_permissions(self):
|
||||
self._create_test_cache()
|
||||
self._create_test_cache_partition()
|
||||
self._create_test_cache_partition_file()
|
||||
|
||||
cache_total_size = self.test_cache.get_total_size()
|
||||
|
||||
response = self._request_test_cache_purge_view()
|
||||
self.assertEqual(response.status_code, 404)
|
||||
|
||||
self.assertEqual(cache_total_size, self.test_cache.get_total_size())
|
||||
|
||||
def test_cache_purge_view_with_access(self):
|
||||
self._create_test_cache()
|
||||
self._create_test_cache_partition()
|
||||
self._create_test_cache_partition_file()
|
||||
|
||||
self.grant_access(
|
||||
obj=self.test_cache, permission=permission_cache_purge
|
||||
)
|
||||
|
||||
cache_total_size = self.test_cache.get_total_size()
|
||||
|
||||
response = self._request_test_cache_purge_view()
|
||||
self.assertEqual(response.status_code, 302)
|
||||
|
||||
self.assertNotEqual(cache_total_size, self.test_cache.get_total_size())
|
||||
|
||||
def test_cache_multiple_purge_view_no_permissions(self):
|
||||
self._create_test_cache()
|
||||
self._create_test_cache_partition()
|
||||
self._create_test_cache_partition_file()
|
||||
|
||||
cache_total_size = self.test_cache.get_total_size()
|
||||
|
||||
response = self._request_test_cache_multiple_purge_view()
|
||||
self.assertEqual(response.status_code, 404)
|
||||
|
||||
self.assertEqual(cache_total_size, self.test_cache.get_total_size())
|
||||
|
||||
def test_cache_multiple_purge_view_with_access(self):
|
||||
self._create_test_cache()
|
||||
self._create_test_cache_partition()
|
||||
self._create_test_cache_partition_file()
|
||||
|
||||
self.grant_access(
|
||||
obj=self.test_cache, permission=permission_cache_purge
|
||||
)
|
||||
|
||||
cache_total_size = self.test_cache.get_total_size()
|
||||
|
||||
response = self._request_test_cache_multiple_purge_view()
|
||||
self.assertEqual(response.status_code, 302)
|
||||
|
||||
self.assertNotEqual(cache_total_size, self.test_cache.get_total_size())
|
||||
@@ -15,7 +15,7 @@ from .tasks import task_cache_purge
|
||||
|
||||
class CacheListView(SingleObjectListView):
|
||||
model = Cache
|
||||
permission = permission_cache_view
|
||||
object_permission = permission_cache_view
|
||||
|
||||
def get_extra_context(self):
|
||||
return {
|
||||
|
||||
Reference in New Issue
Block a user