diff --git a/mayan/apps/folders/tests/literals.py b/mayan/apps/folders/tests/literals.py new file mode 100644 index 0000000000..8ab1deccf0 --- /dev/null +++ b/mayan/apps/folders/tests/literals.py @@ -0,0 +1,4 @@ +from __future__ import absolute_import, unicode_literals + +TEST_FOLDER_LABEL = 'test folder label' +TEST_FOLDER_EDITED_LABEL = 'test folder edited label' diff --git a/mayan/apps/folders/tests/test_api.py b/mayan/apps/folders/tests/test_api.py index 21955e638e..772e448406 100644 --- a/mayan/apps/folders/tests/test_api.py +++ b/mayan/apps/folders/tests/test_api.py @@ -50,7 +50,9 @@ class FolderAPITestCase(APITestCase): label=TEST_FOLDER_LABEL, user=self.admin_user ) - self.client.delete(reverse('rest_api:folder-detail', args=(folder.pk,))) + self.client.delete( + reverse('rest_api:folder-detail', args=(folder.pk,)) + ) self.assertEqual(Folder.objects.count(), 0) @@ -70,7 +72,9 @@ class FolderAPITestCase(APITestCase): @override_settings(OCR_AUTO_OCR=False) def test_folder_add_document(self): - folder = Folder.objects.create(label=TEST_FOLDER_LABEL, user=self.admin_user) + folder = Folder.objects.create( + label=TEST_FOLDER_LABEL, user=self.admin_user + ) document_type = DocumentType.objects.create( label=TEST_DOCUMENT_TYPE @@ -90,7 +94,9 @@ class FolderAPITestCase(APITestCase): @override_settings(OCR_AUTO_OCR=False) def test_folder_remove_document(self): - folder = Folder.objects.create(label=TEST_FOLDER_LABEL, user=self.admin_user) + folder = Folder.objects.create( + label=TEST_FOLDER_LABEL, user=self.admin_user + ) document_type = DocumentType.objects.create( label=TEST_DOCUMENT_TYPE diff --git a/mayan/apps/folders/tests/test_views.py b/mayan/apps/folders/tests/test_views.py new file mode 100644 index 0000000000..4c16db7707 --- /dev/null +++ b/mayan/apps/folders/tests/test_views.py @@ -0,0 +1,145 @@ +from __future__ import absolute_import, unicode_literals + +from django.contrib.auth import get_user_model +from django.core.files import File +from django.core.urlresolvers import reverse +from django.test.client import Client +from django.test import TestCase + +from documents.models import DocumentType +from documents.tests import ( + TEST_ADMIN_PASSWORD, TEST_ADMIN_USERNAME, TEST_ADMIN_EMAIL, + TEST_DOCUMENT_TYPE, TEST_SMALL_DOCUMENT_PATH +) + +from ..models import Folder + +from .literals import TEST_FOLDER_LABEL, TEST_FOLDER_EDITED_LABEL + + +class FolderViewTestCase(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_SMALL_DOCUMENT_PATH) as file_object: + self.document = self.document_type.new_document( + file_object=File(file_object) + ) + + 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()) + + def tearDown(self): + self.admin_user.delete() + self.document_type + + def test_folder_create_view(self): + response = self.client.post( + reverse('folders:folder_create'), data={ + 'label': TEST_FOLDER_LABEL + }, follow=True + ) + + self.assertContains(response, text='created', status_code=200) + self.assertEqual(Folder.objects.count(), 1) + self.assertEqual(Folder.objects.first().label, TEST_FOLDER_LABEL) + self.assertEqual(Folder.objects.first().user, self.admin_user) + + def test_folder_delete_view(self): + folder = Folder.objects.create( + label=TEST_FOLDER_LABEL, user=self.admin_user + ) + + response = self.client.post( + reverse('folders:folder_delete', args=(folder.pk,)), follow=True + ) + + self.assertContains(response, text='deleted', status_code=200) + self.assertEqual(Folder.objects.count(), 0) + + def test_folder_edit_view(self): + folder = Folder.objects.create( + label=TEST_FOLDER_LABEL, user=self.admin_user + ) + + response = self.client.post( + reverse('folders:folder_edit', args=(folder.pk,)), data = { + 'label': TEST_FOLDER_EDITED_LABEL + }, follow=True + ) + + folder = Folder.objects.get(pk=folder.pk) + self.assertContains(response, text='saved', status_code=200) + self.assertEqual(folder.label, TEST_FOLDER_EDITED_LABEL) + self.assertEqual(folder.user, self.admin_user) + + def test_folder_add_document_view(self): + folder = Folder.objects.create( + label=TEST_FOLDER_LABEL, user=self.admin_user + ) + + response = self.client.post( + reverse('folders:folder_add_document', args=(self.document.pk,)), + data={ + 'folder': folder.pk, + }, follow=True + ) + + folder = Folder.objects.get(pk=folder.pk) + self.assertContains(response, text='added', status_code=200) + self.assertEqual(folder.documents.count(), 1) + self.assertQuerysetEqual( + folder.documents.all(), (repr(self.document),) + ) + + def test_folder_add_multiple_documents_view(self): + folder = Folder.objects.create( + label=TEST_FOLDER_LABEL, user=self.admin_user + ) + + response = self.client.post( + reverse('folders:folder_add_multiple_documents'), data={ + 'id_list': (self.document.pk,), + 'folder': folder.pk + }, follow=True + ) + + folder = Folder.objects.get(pk=folder.pk) + self.assertContains(response, text='added', status_code=200) + self.assertEqual(folder.documents.count(), 1) + self.assertQuerysetEqual( + folder.documents.all(), (repr(self.document),) + ) + + def test_folder_remove_document_view(self): + folder = Folder.objects.create( + label=TEST_FOLDER_LABEL, user=self.admin_user, + ) + + folder.documents.add(self.document) + + self.assertEqual(folder.documents.count(), 1) + + response = self.client.post( + reverse( + 'folders:folder_document_multiple_remove', args=(folder.pk,) + ), data={ + 'id_list': (self.document.pk,), + }, follow=True + ) + + folder = Folder.objects.get(pk=folder.pk) + self.assertContains(response, text='removed', status_code=200) + self.assertEqual(folder.documents.count(), 0) diff --git a/mayan/apps/folders/views.py b/mayan/apps/folders/views.py index 0caa4eaaed..e63b2e88da 100644 --- a/mayan/apps/folders/views.py +++ b/mayan/apps/folders/views.py @@ -124,11 +124,23 @@ def folder_delete(request, folder_id): 'title': _('Delete the folder: %s?') % folder, } - return render_to_response('appearance/generic_confirm.html', context, - context_instance=RequestContext(request)) + return render_to_response( + 'appearance/generic_confirm.html', context, + context_instance=RequestContext(request) + ) class FolderDetailView(DocumentListView): + def get_document_queryset(self): + return self.get_folder().documents.all() + + def get_extra_context(self): + return { + 'title': _('Documents in folder: %s') % self.get_folder(), + 'hide_links': True, + 'object': self.get_folder(), + } + def get_folder(self): folder = get_object_or_404(Folder, pk=self.kwargs['pk']) @@ -143,19 +155,8 @@ class FolderDetailView(DocumentListView): return folder - def get_document_queryset(self): - return self.get_folder().documents.all() - - def get_extra_context(self): - return { - 'title': _('Documents in folder: %s') % self.get_folder(), - 'hide_links': True, - 'object': self.get_folder(), - } - def folder_add_document(request, document_id=None, document_id_list=None): - if document_id: documents = [get_object_or_404(Document, pk=document_id)] elif document_id_list: @@ -208,8 +209,10 @@ def folder_add_document(request, document_id=None, document_id_list=None): len(documents) ) - return render_to_response('appearance/generic_form.html', context, - context_instance=RequestContext(request)) + return render_to_response( + 'appearance/generic_form.html', context, + context_instance=RequestContext(request) + ) class DocumentFolderListView(FolderListView): @@ -227,9 +230,6 @@ class DocumentFolderListView(FolderListView): return super(DocumentFolderListView, self).dispatch(request, *args, **kwargs) - def get_folder_queryset(self): - return self.document.document_folders().all() - def get_extra_context(self): return { 'hide_link': True, @@ -237,6 +237,9 @@ class DocumentFolderListView(FolderListView): 'title': _('Folders containing document: %s') % self.document, } + def get_folder_queryset(self): + return self.document.document_folders().all() + def folder_document_remove(request, folder_id, document_id=None, document_id_list=None): post_action_redirect = None @@ -287,15 +290,17 @@ def folder_document_remove(request, folder_id, document_id=None, document_id_lis if len(folder_documents) == 1: context['object'] = folder_documents[0] - return render_to_response('appearance/generic_confirm.html', context, - context_instance=RequestContext(request)) + return render_to_response( + 'appearance/generic_confirm.html', context, + context_instance=RequestContext(request) + ) def folder_document_multiple_remove(request, folder_id): - return folder_document_remove(request, folder_id, document_id_list=request.GET.get('id_list', [])) + return folder_document_remove(request, folder_id, document_id_list=request.GET.get('id_list', request.POST.get('id_list', []))) def folder_add_multiple_documents(request): return folder_add_document( - request, document_id_list=request.GET.get('id_list', []) + request, document_id_list=request.GET.get('id_list', request.POST.get('id_list', [])) )