Fix document check in view. Fixes issue GH#238.

This commit is contained in:
Roberto Rosario
2015-10-09 23:42:34 -04:00
parent 8af1ee3246
commit 40b94e41d8
2 changed files with 105 additions and 10 deletions

View File

@@ -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
)
)

View File

@@ -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
)