123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- from django.http import Http404
- from django.test import TestCase, override_settings
- from django.urls import reverse
- from misago.core.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, '', 'bob', '1bob', 'b0b', 'bob123', '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'
- }
- )
|