Source code for fobi.tests.test_drf_integration
from rest_framework import status
from rest_framework.reverse import reverse
from rest_framework.test import APITestCase
from .constants import FOBI_TEST_USER_PASSWORD, FOBI_TEST_USER_USERNAME
from .data import (
TEST_DYNAMIC_FORMS_DEFINITION_DATA_DRF,
TEST_DYNAMIC_FORMS_OPTIONS_RESPONSE,
TEST_DYNAMIC_FORMS_PUT_DATA,
TEST_DYNAMIC_FORMS_PUT_DATA_ALL,
)
from .helpers import create_form_with_entries
__title__ = "fobi.tests.test_drf_integration"
__author__ = "Artur Barseghyan <artur.barseghyan@gmail.com>"
__copyright__ = "2014-2019 Artur Barseghyan"
__license__ = "GPL 2.0/LGPL 2.1"
__all__ = ("FobiDjangoRestFrameworkIntegrationTests",)
[docs]class FobiDjangoRestFrameworkIntegrationTests(APITestCase):
"""DRF integration tests."""
[docs] def setUp(self):
"""Set up."""
super(FobiDjangoRestFrameworkIntegrationTests, self).setUp()
self.client.logout()
[docs] def tearDown(self):
"""Set up."""
super(FobiDjangoRestFrameworkIntegrationTests, self).tearDown()
self.client.logout()
[docs] @classmethod
def setUpTestData(cls):
"""Load initial data for the TestCase"""
# Public form entry
cls.form_entry = create_form_with_entries(
user=None,
data=TEST_DYNAMIC_FORMS_DEFINITION_DATA_DRF,
is_public=True,
)
cls.url = reverse(
"fobi_form_entry-detail",
args=[cls.form_entry.slug],
# request=self.context['request']
)
# Private form entry
cls.non_public_form_entry = create_form_with_entries(
user=None,
data=TEST_DYNAMIC_FORMS_DEFINITION_DATA_DRF,
is_public=False,
name="Non public test form",
slug="non-public-test-form",
)
cls.non_public_url = reverse(
"fobi_form_entry-detail",
args=[cls.non_public_form_entry.slug],
# request=self.context['request']
)
[docs] def test_01_options_action_public_form(self):
"""Test OPTIONS action call for public form."""
# Testing OPTIONS action call
options_response = self.client.options(self.url)
self.assertEqual(options_response.status_code, status.HTTP_200_OK)
self.assertIn("actions", options_response.data)
self.assertIn("PUT", options_response.data["actions"])
self.assertEqual(
options_response.data["actions"]["PUT"],
TEST_DYNAMIC_FORMS_OPTIONS_RESPONSE,
)
[docs] def test_02_put_action_public_form(self):
"""Test PUT action call for public form."""
# Testing PUT action call
put_response = self.client.put(
self.url, TEST_DYNAMIC_FORMS_PUT_DATA, format="json"
)
self.assertEqual(put_response.status_code, status.HTTP_200_OK)
self.assertEqual(
dict(put_response.data), dict(TEST_DYNAMIC_FORMS_PUT_DATA)
)
[docs] def test_03_fail_put_action_public_form(self):
"""Test PUT action call fail test for public form."""
# Testing PUT action call
put_response = self.client.put(
self.url, TEST_DYNAMIC_FORMS_PUT_DATA_ALL, format="json"
)
self.assertEqual(put_response.status_code, status.HTTP_200_OK)
self.assertEqual(
dict(put_response.data), dict(TEST_DYNAMIC_FORMS_PUT_DATA)
)
[docs] def test_04_fail_options_action_non_public_form(self):
"""Test OPTIONS action call fail test for non-public form."""
# Testing OPTIONS action call
options_response = self.client.options(self.non_public_url)
self.assertEqual(options_response.status_code, status.HTTP_200_OK)
self.assertNotIn("actions", options_response.data)
[docs] def test_05_fail_put_action(self):
"""Test PUT action call fail test for non-public form."""
# Testing PUT action call
put_response = self.client.put(
self.non_public_url, TEST_DYNAMIC_FORMS_PUT_DATA, format="json"
)
self.assertEqual(put_response.status_code, status.HTTP_404_NOT_FOUND)
[docs] def test_06_options_action_non_public_form_auth_user(self):
"""Test OPTIONS action call for authorised user for non-public form."""
# Testing OPTIONS action call
self.client.login(
username=FOBI_TEST_USER_USERNAME, password=FOBI_TEST_USER_PASSWORD
)
options_response = self.client.options(self.non_public_url)
self.assertEqual(options_response.status_code, status.HTTP_200_OK)
self.assertIn("actions", options_response.data)
self.assertIn("PUT", options_response.data["actions"])
self.assertEqual(
options_response.data["actions"]["PUT"],
TEST_DYNAMIC_FORMS_OPTIONS_RESPONSE,
)
[docs] def test_07_put_action_non_public_form_auth_user(self):
"""Test PUT action call for authorised user for non-public form."""
# Testing PUT action call
self.client.login(
username=FOBI_TEST_USER_USERNAME, password=FOBI_TEST_USER_PASSWORD
)
put_response = self.client.put(
self.non_public_url, TEST_DYNAMIC_FORMS_PUT_DATA, format="json"
)
self.assertEqual(put_response.status_code, status.HTTP_200_OK)
self.assertEqual(
dict(put_response.data), dict(TEST_DYNAMIC_FORMS_PUT_DATA)
)
[docs] def test_08_get_action_public_form(self):
"""Test OPTIONS action call for public form."""
# Testing GET action call
get_response = self.client.get(self.url)
self.assertEqual(get_response.status_code, status.HTTP_200_OK)
self.assertIn("url", get_response.data)
self.assertIn("id", get_response.data)
self.assertIn("slug", get_response.data)
self.assertEqual(get_response.data["id"], self.form_entry.pk)
self.assertEqual(get_response.data["slug"], self.form_entry.slug)
[docs] def test_09_get_action_non_public_form_auth_user(self):
"""Test GET action call for authorised user for non-public form."""
# Testing GET action call
self.client.login(
username=FOBI_TEST_USER_USERNAME, password=FOBI_TEST_USER_PASSWORD
)
get_response = self.client.get(self.non_public_url)
self.assertEqual(get_response.status_code, status.HTTP_200_OK)
self.assertIn("url", get_response.data)
self.assertIn("id", get_response.data)
self.assertIn("slug", get_response.data)
self.assertEqual(get_response.data["id"], self.non_public_form_entry.pk)
self.assertEqual(
get_response.data["slug"], self.non_public_form_entry.slug
)
[docs] def test_10_fail_get_action_non_public_form(self):
"""Test GET action call fail test for non-public form."""
# Testing GET action call
get_response = self.client.get(self.non_public_url)
self.assertEqual(get_response.status_code, status.HTTP_404_NOT_FOUND)