diff --git a/mayan/apps/checkouts/tests/test_views.py b/mayan/apps/checkouts/tests/test_views.py new file mode 100644 index 0000000000..7e7cabdf7b --- /dev/null +++ b/mayan/apps/checkouts/tests/test_views.py @@ -0,0 +1,95 @@ +from __future__ import unicode_literals + +import datetime +import time + +from django.contrib.auth.models import User +from django.core.files import File +from django.core.urlresolvers import reverse +from django.test.client import Client +from django.test import TestCase +from django.utils.timezone import now + +from common.literals import TIME_DELTA_UNIT_DAYS +from documents.models import DocumentType +from documents.tests.literals import ( + TEST_ADMIN_PASSWORD, TEST_ADMIN_USERNAME, TEST_ADMIN_EMAIL, + TEST_DOCUMENT_TYPE, TEST_SMALL_DOCUMENT_PATH +) + +from ..models import DocumentCheckout + + +class DocumentCheckoutViewTestCase(TestCase): + def setUp(self): + self.admin_user = User.objects.create_superuser( + username=TEST_ADMIN_USERNAME, email=TEST_ADMIN_EMAIL, + password=TEST_ADMIN_PASSWORD + ) + self.client = Client() + # Login the admin user + logged_in = self.client.login( + username=TEST_ADMIN_USERNAME, password=TEST_ADMIN_PASSWORD + ) + self.assertTrue(logged_in) + self.assertTrue(self.admin_user.is_authenticated()) + + self.document_type = DocumentType.objects.create( + label=TEST_DOCUMENT_TYPE + ) + + with open(TEST_SMALL_DOCUMENT_PATH) as file_object: + self.document = self.document_type.new_document( + file_object=File(file_object) + ) + + def tearDown(self): + self.document_type.delete() + self.admin_user.delete() + + def test_checkout_view(self): + response = self.client.post( + reverse( + 'checkouts:checkout_document', args=(self.document.pk,), + ), data={ + 'expiration_datetime_0': 2, + 'expiration_datetime_1': TIME_DELTA_UNIT_DAYS, + 'block_new_version': True + }, follow=True + ) + + self.assertEquals(response.status_code, 200) + + self.assertTrue(self.document.is_checked_out()) + + self.assertTrue( + DocumentCheckout.objects.is_document_checked_out( + document=self.document + ) + ) + + def test_checkin_view(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()) + + response = self.client.post( + reverse( + 'checkouts:checkin_document', args=(self.document.pk,), + ), follow=True + ) + + self.assertEquals(response.status_code, 200) + + self.assertFalse(self.document.is_checked_out()) + + self.assertFalse( + DocumentCheckout.objects.is_document_checked_out( + document=self.document + ) + ) diff --git a/mayan/apps/checkouts/views.py b/mayan/apps/checkouts/views.py index 97267d2f4d..9cc6fb99f2 100644 --- a/mayan/apps/checkouts/views.py +++ b/mayan/apps/checkouts/views.py @@ -181,38 +181,38 @@ class DocumentCheckinView(ConfirmView): def get_post_action_redirect(self): return reverse('checkouts:checkout_info', args=(self.get_object().pk,)) - def view_action(self, request): + def view_action(self): document = self.get_object() - if document.checkout_info().user == request.user: + if document.checkout_info().user == self.request.user: try: Permission.check_permissions( - request.user, (permission_document_checkin,) + self.request.user, (permission_document_checkin,) ) except PermissionDenied: AccessControlList.objects.check_access( - permission_document_checkin, request.user, document + permission_document_checkin, self.request.user, document ) else: try: Permission.check_permissions( - request.user, (permission_document_checkin_override,) + self.request.user, (permission_document_checkin_override,) ) except PermissionDenied: AccessControlList.objects.check_access( - permission_document_checkin_override, request.user, + permission_document_checkin_override, self.request.user, document ) try: - document.check_in(user=request.user) + document.check_in(user=self.request.user) except DocumentNotCheckedOut: - messages.error(request, _('Document has not been checked out.')) + messages.error(self.request, _('Document has not been checked out.')) except Exception as exception: messages.error( - request, _('Error trying to check in document; %s') % exception + self.request, _('Error trying to check in document; %s') % exception ) else: messages.success( - request, _('Document "%s" checked in successfully.') % document + self.request, _('Document "%s" checked in successfully.') % document )