Convert the document version revert view to CBV. Add document version revert view tests.

This commit is contained in:
Roberto Rosario
2016-03-21 02:37:39 -04:00
parent c07f5a7820
commit 37d6070cab
3 changed files with 77 additions and 33 deletions

View File

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

View File

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

View File

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