Files
mayan-edms/mayan/apps/cabinets/tests/test_api.py
Roberto Rosario 3e53ce0c43 Add keyword arguments to the cabinet app
Modernize tests. Use the FilteredSelectionForm in the view
to add new cabinets to documents. Add missing icons.
Rename some view names to be more consistent.

Signed-off-by: Roberto Rosario <Roberto.Rosario@mayan-edms.com>
2019-01-02 13:54:58 -04:00

239 lines
7.8 KiB
Python

from __future__ import unicode_literals
from django.contrib.auth import get_user_model
from django.utils.encoding import force_text
from rest_framework import status
from rest_framework.test import APITestCase
from mayan.apps.documents.tests import DocumentTestMixin
from mayan.apps.user_management.tests.literals import (
TEST_ADMIN_EMAIL, TEST_ADMIN_PASSWORD, TEST_ADMIN_USERNAME
)
from ..models import Cabinet
from .literals import TEST_CABINET_EDITED_LABEL, TEST_CABINET_LABEL
class CabinetAPITestCase(DocumentTestMixin, APITestCase):
"""
Test the cabinet API endpoints
"""
auto_upload_document = False
def setUp(self):
super(CabinetAPITestCase, self).setUp()
self.admin_user = get_user_model().objects.create_superuser(
username=TEST_ADMIN_USERNAME, email=TEST_ADMIN_EMAIL,
password=TEST_ADMIN_PASSWORD
)
self.client.login(
username=TEST_ADMIN_USERNAME, password=TEST_ADMIN_PASSWORD
)
self.document = self.upload_document()
self.document_2 = self.upload_document()
def test_cabinet_create(self):
response = self.post(
viewname='rest_api:cabinet-list',
data={'label': TEST_CABINET_LABEL}
)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
cabinet = Cabinet.objects.first()
self.assertEqual(response.data['id'], cabinet.pk)
self.assertEqual(response.data['label'], TEST_CABINET_LABEL)
self.assertEqual(Cabinet.objects.count(), 1)
self.assertEqual(cabinet.label, TEST_CABINET_LABEL)
def test_cabinet_create_with_single_document(self):
response = self.post(
viewname='rest_api:cabinet-list', data={
'label': TEST_CABINET_LABEL, 'documents_pk_list': '{}'.format(
self.document.pk
)
}
)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
cabinet = Cabinet.objects.first()
self.assertEqual(response.data['id'], cabinet.pk)
self.assertEqual(response.data['label'], TEST_CABINET_LABEL)
self.assertQuerysetEqual(
cabinet.documents.all(), (repr(self.document),)
)
self.assertEqual(cabinet.label, TEST_CABINET_LABEL)
def test_cabinet_create_with_multiple_documents(self):
response = self.post(
viewname='rest_api:cabinet-list', data={
'label': TEST_CABINET_LABEL,
'documents_pk_list': '{},{}'.format(
self.document.pk, self.document_2.pk
)
}
)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
cabinet = Cabinet.objects.first()
self.assertEqual(response.data['id'], cabinet.pk)
self.assertEqual(response.data['label'], TEST_CABINET_LABEL)
self.assertEqual(Cabinet.objects.count(), 1)
self.assertEqual(cabinet.label, TEST_CABINET_LABEL)
self.assertQuerysetEqual(
cabinet.documents.all(), map(
repr, (self.document, self.document_2)
)
)
def test_cabinet_document_delete(self):
cabinet = Cabinet.objects.create(label=TEST_CABINET_LABEL)
cabinet.documents.add(self.document)
response = self.delete(
viewname='rest_api:cabinet-document',
kwargs={'cabinet_pk': cabinet.pk, 'document_pk': self.document.pk}
)
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
self.assertEqual(cabinet.documents.count(), 0)
def test_cabinet_document_detail(self):
cabinet = Cabinet.objects.create(label=TEST_CABINET_LABEL)
cabinet.documents.add(self.document)
response = self.get(
viewname='rest_api:cabinet-document',
kwargs={'cabinet_pk': cabinet.pk, 'document_pk': self.document.pk}
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(
response.data['uuid'], force_text(self.document.uuid)
)
def test_cabinet_document_list(self):
cabinet = Cabinet.objects.create(label=TEST_CABINET_LABEL)
cabinet.documents.add(self.document)
response = self.get(
viewname='rest_api:cabinet-document-list',
kwargs={'cabinet_pk': cabinet.pk}
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(
response.data['results'][0]['uuid'], force_text(self.document.uuid)
)
def test_cabinet_delete(self):
cabinet = Cabinet.objects.create(label=TEST_CABINET_LABEL)
response = self.delete(
viewname='rest_api:cabinet-detail',
kwargs={'cabinet_pk': cabinet.pk}
)
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
self.assertEqual(Cabinet.objects.count(), 0)
def test_cabinet_edit_via_patch(self):
cabinet = Cabinet.objects.create(label=TEST_CABINET_LABEL)
response = self.patch(
viewname='rest_api:cabinet-detail',
kwargs={'cabinet_pk': cabinet.pk},
data={'label': TEST_CABINET_EDITED_LABEL}
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
cabinet.refresh_from_db()
self.assertEqual(cabinet.label, TEST_CABINET_EDITED_LABEL)
def test_cabinet_edit_via_put(self):
cabinet = Cabinet.objects.create(label=TEST_CABINET_LABEL)
response = self.put(
viewname='rest_api:cabinet-detail',
kwargs={'cabinet_pk': cabinet.pk},
data={'label': TEST_CABINET_EDITED_LABEL}
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
cabinet.refresh_from_db()
self.assertEqual(cabinet.label, TEST_CABINET_EDITED_LABEL)
def test_cabinet_add_document(self):
cabinet = Cabinet.objects.create(label=TEST_CABINET_LABEL)
response = self.post(
viewname='rest_api:cabinet-document-list',
kwargs={'cabinet_pk': cabinet.pk}, data={
'documents_pk_list': '{}'.format(self.document.pk)
}
)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
self.assertQuerysetEqual(
cabinet.documents.all(), (repr(self.document),)
)
def test_cabinet_add_multiple_documents(self):
cabinet = Cabinet.objects.create(label=TEST_CABINET_LABEL)
response = self.post(
viewname='rest_api:cabinet-document-list',
kwargs={'cabinet_pk': cabinet.pk},
data={
'documents_pk_list': '{},{}'.format(
self.document.pk, self.document_2.pk
)
}
)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
self.assertQuerysetEqual(
cabinet.documents.all(), map(
repr, (self.document, self.document_2)
)
)
def test_cabinet_list_view(self):
cabinet = Cabinet.objects.create(label=TEST_CABINET_LABEL)
Cabinet.objects.create(
label=TEST_CABINET_LABEL, parent=cabinet
)
response = self.get(
viewname='rest_api:cabinet-list'
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data['results'][0]['label'], cabinet.label)
def test_cabinet_remove_document(self):
cabinet = Cabinet.objects.create(label=TEST_CABINET_LABEL)
cabinet.documents.add(self.document)
response = self.delete(
viewname='rest_api:cabinet-document', kwargs={
'cabinet_pk': cabinet.pk, 'document_pk': self.document.pk
}
)
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
self.assertEqual(cabinet.documents.count(), 0)