123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- from django.http import Http404
- from django.test import TestCase, override_settings
- from django.urls import reverse
- from ..shortcuts import get_int_or_404
- @override_settings(ROOT_URLCONF="misago.core.testproject.urls")
- class PaginateTests(TestCase):
- def test_valid_page_handling(self):
- """Valid page number causes no errors"""
- response = self.client.get(reverse("test-pagination", kwargs={"page": 2}))
- self.assertEqual("5,6,7,8,9", response.content.decode())
- def test_invalid_page_handling(self):
- """Invalid page number results in 404 error"""
- response = self.client.get(reverse("test-pagination", kwargs={"page": 42}))
- self.assertEqual(response.status_code, 404)
- def test_implicit_page_handling(self):
- """Implicit page number causes no errors"""
- response = self.client.get(reverse("test-pagination"))
- self.assertEqual("0,1,2,3,4", response.content.decode())
- def test_explicit_page_handling(self):
- """Explicit page number results in redirect"""
- response = self.client.get(reverse("test-pagination", kwargs={"page": 1}))
- valid_url = "/forum/test-pagination/"
- self.assertEqual(response["Location"], valid_url)
- @override_settings(ROOT_URLCONF="misago.core.testproject.urls")
- class ValidateSlugTests(TestCase):
- def test_valid_slug_handling(self):
- """Valid slug causes no interruption in view processing"""
- response = self.client.get(
- reverse("validate-slug-view", kwargs={"slug": "eric-the-fish", "pk": 1})
- )
- self.assertContains(response, "Allright")
- def test_invalid_slug_handling(self):
- """Invalid slug returns in redirect to valid page"""
- response = self.client.get(
- reverse("validate-slug-view", kwargs={"slug": "lion-the-eric", "pk": 1})
- )
- valid_url = "/forum/test-valid-slug/eric-the-fish-1/"
- self.assertEqual(response["Location"], valid_url)
- class GetIntOr404Tests(TestCase):
- def test_valid_inputs(self):
- """get_int_or_404 returns int for valid values"""
- VALID_VALUES = [("0", 0), ("123", 123), ("000123", 123), ("1", 1)]
- for value, result in VALID_VALUES:
- self.assertEqual(get_int_or_404(value), result)
- def test_invalid_inputs(self):
- """get_int_or_404 raises Http404 for invalid values"""
- INVALID_VALUES = [
- None,
- "",
- "str",
- "5tr",
- "s0tr",
- "str123",
- "12.321",
- ".4",
- "5.",
- ]
- for value in INVALID_VALUES:
- with self.assertRaises(Http404):
- get_int_or_404(value)
- @override_settings(ROOT_URLCONF="misago.core.testproject.urls")
- class PaginatedResponseTests(TestCase):
- def test_page_response(self):
- """utility returns response for only page arg"""
- response = self.client.get(reverse("test-paginated-response"))
- self.assertEqual(response.status_code, 200)
- self.assertEqual(
- response.json(),
- {
- "results": [i + 10 for i in range(10)],
- "page": 2,
- "pages": 10,
- "count": 100,
- "first": 1,
- "previous": 1,
- "next": 3,
- "last": 10,
- "before": 10,
- "more": 80,
- },
- )
- def test_explicit_data_response(self):
- """utility returns response with explicit data"""
- response = self.client.get(reverse("test-paginated-response-data"))
- self.assertEqual(response.status_code, 200)
- self.assertEqual(
- response.json(),
- {
- "results": ["a", "b", "c", "d", "e"],
- "page": 2,
- "pages": 10,
- "count": 100,
- "first": 1,
- "previous": 1,
- "next": 3,
- "last": 10,
- "before": 10,
- "more": 80,
- },
- )
- def test_explicit_serializer_response(self):
- """utility returns response with data serialized via serializer"""
- response = self.client.get(reverse("test-paginated-response-serializer"))
- self.assertEqual(response.status_code, 200)
- self.assertEqual(
- response.json(),
- {
- "results": [{"id": 0}, {"id": 2}, {"id": 4}, {"id": 6}],
- "page": 1,
- "pages": 1,
- "count": 4,
- "first": None,
- "previous": None,
- "next": None,
- "last": None,
- "before": 0,
- "more": 0,
- },
- )
- def test_explicit_data_serializer_response(self):
- """utility returns response with explicit data serialized via serializer"""
- response = self.client.get(reverse("test-paginated-response-data-serializer"))
- self.assertEqual(response.status_code, 200)
- self.assertEqual(
- response.json(),
- {
- "results": [{"id": "aa"}, {"id": "bb"}, {"id": "cc"}, {"id": "dd"}],
- "page": 1,
- "pages": 1,
- "count": 4,
- "first": None,
- "previous": None,
- "next": None,
- "last": None,
- "before": 0,
- "more": 0,
- },
- )
- def test_explicit_data_extra_response(self):
- """utility returns response with explicit data and extra"""
- response = self.client.get(reverse("test-paginated-response-data-extra"))
- self.assertEqual(response.status_code, 200)
- self.assertEqual(
- response.json(),
- {
- "results": ["a", "b", "c", "d"],
- "page": 1,
- "pages": 1,
- "count": 4,
- "first": None,
- "previous": None,
- "next": "EXTRA",
- "last": None,
- "before": 0,
- "more": 0,
- "lorem": "ipsum",
- },
- )
|