Convert the document version revert view to CBV. Add document version revert view tests.
This commit is contained in:
@@ -23,8 +23,8 @@ from ..permissions import (
|
||||
permission_document_restore, permission_document_tools,
|
||||
permission_document_trash, permission_document_type_create,
|
||||
permission_document_type_delete, permission_document_type_edit,
|
||||
permission_document_type_view, permission_document_view,
|
||||
permission_empty_trash
|
||||
permission_document_type_view, permission_document_version_revert,
|
||||
permission_document_view, permission_empty_trash
|
||||
)
|
||||
|
||||
from .literals import (
|
||||
@@ -505,10 +505,51 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
|
||||
)
|
||||
response = self.post('documents:trash_can_empty', follow=True)
|
||||
|
||||
self.assertContains(response, text='emptied successfully', status_code=200)
|
||||
self.assertContains(
|
||||
response, text='emptied successfully', status_code=200
|
||||
)
|
||||
self.assertEqual(DeletedDocument.objects.count(), 0)
|
||||
self.assertEqual(Document.objects.count(), 0)
|
||||
|
||||
def test_document_version_revert_no_permission(self):
|
||||
first_version = self.document.latest_version
|
||||
|
||||
with open(TEST_SMALL_DOCUMENT_PATH) as file_object:
|
||||
self.document.new_version(
|
||||
file_object=file_object
|
||||
)
|
||||
|
||||
self.login(username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD)
|
||||
|
||||
response = self.post(
|
||||
'documents:document_version_revert', args=(first_version.pk,)
|
||||
)
|
||||
|
||||
self.assertEqual(response.status_code, 403)
|
||||
self.assertEqual(self.document.versions.count(), 2)
|
||||
|
||||
def test_document_version_revert_with_permission(self):
|
||||
first_version = self.document.latest_version
|
||||
|
||||
with open(TEST_SMALL_DOCUMENT_PATH) as file_object:
|
||||
self.document.new_version(
|
||||
file_object=file_object
|
||||
)
|
||||
|
||||
self.login(username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD)
|
||||
|
||||
self.role.permissions.add(
|
||||
permission_document_version_revert.stored_permission
|
||||
)
|
||||
|
||||
response = self.post(
|
||||
'documents:document_version_revert', args=(first_version.pk,),
|
||||
follow=True
|
||||
)
|
||||
|
||||
self.assertContains(response, 'reverted', status_code=200)
|
||||
self.assertEqual(self.document.versions.count(), 1)
|
||||
|
||||
|
||||
class DocumentTypeViewsTestCase(GenericDocumentViewTestCase):
|
||||
def test_document_type_create_view_no_permission(self):
|
||||
|
||||
@@ -23,7 +23,8 @@ from .views import (
|
||||
DocumentTypeDocumentListView, DocumentTypeFilenameDeleteView,
|
||||
DocumentTypeFilenameEditView, DocumentTypeFilenameListView,
|
||||
DocumentTypeListView, DocumentTypeEditView, DocumentVersionListView,
|
||||
DocumentView, EmptyTrashCanView, RecentDocumentListView
|
||||
DocumentVersionRevertView, DocumentView, EmptyTrashCanView,
|
||||
RecentDocumentListView
|
||||
)
|
||||
|
||||
urlpatterns = patterns(
|
||||
@@ -130,8 +131,8 @@ urlpatterns = patterns(
|
||||
'document_download', name='document_version_download'
|
||||
),
|
||||
url(
|
||||
r'^document/version/(?P<document_version_pk>\d+)/revert/$',
|
||||
'document_version_revert', name='document_version_revert'
|
||||
r'^document/version/(?P<pk>\d+)/revert/$',
|
||||
DocumentVersionRevertView.as_view(), name='document_version_revert'
|
||||
),
|
||||
|
||||
url(
|
||||
|
||||
@@ -548,6 +548,35 @@ class DocumentVersionListView(SingleObjectListView):
|
||||
return self.get_document().versions.order_by('-timestamp')
|
||||
|
||||
|
||||
class DocumentVersionRevertView(ConfirmView):
|
||||
object_permission = permission_document_version_revert
|
||||
object_permission_related = 'document'
|
||||
|
||||
def get_extra_context(self):
|
||||
return {
|
||||
'message': _(
|
||||
'All later version after this one will be deleted too.'
|
||||
),
|
||||
'object': self.get_object().document,
|
||||
'title': _('Revert to this version?'),
|
||||
}
|
||||
|
||||
def get_object(self):
|
||||
return get_object_or_404(DocumentVersion, pk=self.kwargs['pk'])
|
||||
|
||||
def view_action(self):
|
||||
try:
|
||||
self.get_object().revert(_user=self.request.user)
|
||||
messages.success(
|
||||
self.request, _('Document version reverted successfully')
|
||||
)
|
||||
except Exception as exception:
|
||||
messages.error(
|
||||
self.request,
|
||||
_('Error reverting document version; %s') % exception
|
||||
)
|
||||
|
||||
|
||||
class DocumentView(SingleObjectDetailView):
|
||||
form_class = DocumentPropertiesForm
|
||||
model = Document
|
||||
@@ -1190,30 +1219,3 @@ def document_type_filename_create(request, document_type_id):
|
||||
'navigation_object_list': ('document_type',),
|
||||
'title': _('Create quick label for document type: %s') % document_type,
|
||||
}, context_instance=RequestContext(request))
|
||||
|
||||
|
||||
def document_version_revert(request, document_version_pk):
|
||||
document_version = get_object_or_404(DocumentVersion, pk=document_version_pk)
|
||||
|
||||
try:
|
||||
Permission.check_permissions(request.user, (permission_document_version_revert,))
|
||||
except PermissionDenied:
|
||||
AccessControlList.objects.check_access(permission_document_version_revert, request.user, document_version.document)
|
||||
|
||||
previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL))))
|
||||
|
||||
if request.method == 'POST':
|
||||
try:
|
||||
document_version.revert(_user=request.user)
|
||||
messages.success(request, _('Document version reverted successfully'))
|
||||
except Exception as exception:
|
||||
messages.error(request, _('Error reverting document version; %s') % exception)
|
||||
|
||||
return HttpResponseRedirect(previous)
|
||||
|
||||
return render_to_response('appearance/generic_confirm.html', {
|
||||
'previous': previous,
|
||||
'object': document_version.document,
|
||||
'title': _('Revert to this version?'),
|
||||
'message': _('All later version after this one will be deleted too.'),
|
||||
}, context_instance=RequestContext(request))
|
||||
|
||||
Reference in New Issue
Block a user