diff --git a/mayan/apps/authentication/tests/literals.py b/mayan/apps/authentication/tests/literals.py new file mode 100644 index 0000000000..a24465f647 --- /dev/null +++ b/mayan/apps/authentication/tests/literals.py @@ -0,0 +1,6 @@ +from __future__ import unicode_literals + +TEST_ADMIN_EMAIL = 'admin@admin.com' +TEST_ADMIN_PASSWORD = 'test_admin_password' +TEST_ADMIN_USERNAME = 'test_admin' +TEST_EMAIL_AUTHENTICATION_BACKEND = 'authentication.auth.email_auth_backend.EmailAuthBackend' diff --git a/mayan/apps/authentication/tests/test_views.py b/mayan/apps/authentication/tests/test_views.py index c4d26c5143..6d9b7db0a2 100644 --- a/mayan/apps/authentication/tests/test_views.py +++ b/mayan/apps/authentication/tests/test_views.py @@ -6,10 +6,10 @@ from django.core.urlresolvers import reverse from django.test import TestCase, override_settings from django.test.client import Client -TEST_ADMIN_EMAIL = 'admin@admin.com' -TEST_ADMIN_PASSWORD = 'test_admin_password' -TEST_ADMIN_USERNAME = 'test_admin' -TEST_EMAIL_AUTHENTICATION_BACKEND = 'authentication.auth.email_auth_backend.EmailAuthBackend' +from .literals import ( + TEST_ADMIN_EMAIL, TEST_ADMIN_PASSWORD, TEST_ADMIN_USERNAME, + TEST_EMAIL_AUTHENTICATION_BACKEND +) class UserLoginTestCase(TestCase): diff --git a/mayan/apps/checkouts/tests/__init__.py b/mayan/apps/checkouts/tests/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/mayan/apps/checkouts/tests/test_models.py b/mayan/apps/checkouts/tests/test_models.py new file mode 100644 index 0000000000..ca3bfce642 --- /dev/null +++ b/mayan/apps/checkouts/tests/test_models.py @@ -0,0 +1,117 @@ +from __future__ import unicode_literals + +import datetime +import time + +from django.contrib.auth import get_user_model +from django.core.files import File +from django.test import TestCase, override_settings +from django.utils.timezone import now + +from authentication.tests.literals import ( + TEST_ADMIN_USERNAME, TEST_ADMIN_EMAIL, TEST_ADMIN_PASSWORD +) +from documents.models import Document, DocumentType +from documents.tests.literals import ( + TEST_DOCUMENT_TYPE, TEST_DOCUMENT_PATH, TEST_MULTI_PAGE_TIFF_PATH, + TEST_OFFICE_DOCUMENT_PATH, TEST_SMALL_DOCUMENT_PATH +) + +from ..exceptions import ( + DocumentAlreadyCheckedOut, DocumentNotCheckedOut, + NewDocumentVersionNotAllowed +) +from ..models import DocumentCheckout + + +@override_settings(OCR_AUTO_OCR=False) +class DocumentCheckoutTestCase(TestCase): + def setUp(self): + self.admin_user = get_user_model().objects.create_superuser( + username=TEST_ADMIN_USERNAME, email=TEST_ADMIN_EMAIL, + password=TEST_ADMIN_PASSWORD + ) + + self.document_type = DocumentType.objects.create( + label=TEST_DOCUMENT_TYPE + ) + + with open(TEST_DOCUMENT_PATH) as file_object: + self.document = self.document_type.new_document( + file_object=File(file_object) + ) + + def tearDown(self): + self.document_type.delete() + + def test_document_checkout(self): + expiration_datetime = now() + datetime.timedelta(days=1) + + DocumentCheckout.objects.checkout_document( + document=self.document, expiration_datetime=expiration_datetime, + user=self.admin_user, block_new_version=True + ) + + self.assertTrue(self.document.is_checked_out()) + self.assertTrue( + DocumentCheckout.objects.is_document_checked_out(document=self.document) + ) + + def test_version_creation_blocking(self): + expiration_datetime = now() + datetime.timedelta(days=1) + + DocumentCheckout.objects.checkout_document( + document=self.document, expiration_datetime=expiration_datetime, + user=self.admin_user, block_new_version=True + ) + + with self.assertRaises(NewDocumentVersionNotAllowed): + with open(TEST_SMALL_DOCUMENT_PATH) as file_object: + self.document.new_version(file_object=File(file_object)) + + def test_checkin_in(self): + expiration_datetime = now() + datetime.timedelta(days=1) + + DocumentCheckout.objects.checkout_document( + document=self.document, expiration_datetime=expiration_datetime, + user=self.admin_user, block_new_version=True + ) + + self.document.check_in() + + self.assertFalse(self.document.is_checked_out()) + self.assertFalse( + DocumentCheckout.objects.is_document_checked_out(document=self.document) + ) + + def test_double_checkout(self): + expiration_datetime = now() + datetime.timedelta(days=1) + + DocumentCheckout.objects.checkout_document( + document=self.document, expiration_datetime=expiration_datetime, + user=self.admin_user, block_new_version=True + ) + + with self.assertRaises(DocumentAlreadyCheckedOut): + DocumentCheckout.objects.checkout_document( + document=self.document, expiration_datetime=expiration_datetime, + user=self.admin_user, block_new_version=True + ) + + def test_checkin_without_checkout(self): + with self.assertRaises(DocumentNotCheckedOut): + self.document.check_in() + + def test_auto_checkin(self): + expiration_datetime = now() + datetime.timedelta(seconds=1) + + DocumentCheckout.objects.checkout_document( + document=self.document, expiration_datetime=expiration_datetime, + user=self.admin_user, block_new_version=True + ) + + time.sleep(2) + + DocumentCheckout.objects.check_in_expired_check_outs() + + self.assertFalse(self.document.is_checked_out())