mirror of
https://github.com/postgres/pgweb.git
synced 2025-08-03 15:38:59 +00:00

Sync up to the same version we have on the commitfest app, which will also be required for eventual django 1.11 support.
94 lines
3.4 KiB
Python
94 lines
3.4 KiB
Python
from __future__ import division
|
|
|
|
import json
|
|
|
|
from django.conf import settings
|
|
from django.core.urlresolvers import reverse
|
|
from django.test import override_settings
|
|
|
|
from . import ThingLookup
|
|
from .base import BaseSelectableTestCase
|
|
|
|
|
|
__all__ = (
|
|
'SelectableViewTest',
|
|
)
|
|
|
|
|
|
@override_settings(SELECTABLE_MAX_LIMIT=25)
|
|
class SelectableViewTest(BaseSelectableTestCase):
|
|
|
|
def setUp(self):
|
|
super(SelectableViewTest, self).setUp()
|
|
self.url = ThingLookup.url()
|
|
self.lookup = ThingLookup()
|
|
self.thing = self.create_thing()
|
|
self.other_thing = self.create_thing()
|
|
|
|
def test_response_type(self):
|
|
response = self.client.get(self.url)
|
|
self.assertEqual(response['Content-Type'], 'application/json')
|
|
|
|
def test_response_keys(self):
|
|
response = self.client.get(self.url)
|
|
data = json.loads(response.content.decode('utf-8'))
|
|
for result in data.get('data'):
|
|
self.assertTrue('id' in result)
|
|
self.assertTrue('value' in result)
|
|
self.assertTrue('label' in result)
|
|
|
|
def test_no_term_lookup(self):
|
|
data = {}
|
|
response = self.client.get(self.url, data)
|
|
data = json.loads(response.content.decode('utf-8'))
|
|
self.assertEqual(len(data), 2)
|
|
|
|
def test_simple_term_lookup(self):
|
|
data = {'term': self.thing.name}
|
|
response = self.client.get(self.url, data)
|
|
data = json.loads(response.content.decode('utf-8'))
|
|
self.assertEqual(len(data), 2)
|
|
self.assertEqual(len(data.get('data')), 1)
|
|
|
|
def test_unknown_lookup(self):
|
|
unknown_url = reverse('selectable-lookup', args=["XXXXXXX"])
|
|
response = self.client.get(unknown_url)
|
|
self.assertEqual(response.status_code, 404)
|
|
|
|
def test_basic_limit(self):
|
|
for i in range(settings.SELECTABLE_MAX_LIMIT):
|
|
self.create_thing(data={'name': 'Thing%s' % i})
|
|
response = self.client.get(self.url)
|
|
data = json.loads(response.content.decode('utf-8'))
|
|
self.assertEqual(len(data.get('data')), settings.SELECTABLE_MAX_LIMIT)
|
|
meta = data.get('meta')
|
|
self.assertTrue('next_page' in meta)
|
|
|
|
def test_get_next_page(self):
|
|
for i in range(settings.SELECTABLE_MAX_LIMIT * 2):
|
|
self.create_thing(data={'name': 'Thing%s' % i})
|
|
data = {'term': 'Thing', 'page': 2}
|
|
response = self.client.get(self.url, data)
|
|
data = json.loads(response.content.decode('utf-8'))
|
|
self.assertEqual(len(data.get('data')), settings.SELECTABLE_MAX_LIMIT)
|
|
# No next page
|
|
meta = data.get('meta')
|
|
self.assertFalse('next_page' in meta)
|
|
|
|
def test_request_more_than_max(self):
|
|
for i in range(settings.SELECTABLE_MAX_LIMIT):
|
|
self.create_thing(data={'name': 'Thing%s' % i})
|
|
data = {'term': '', 'limit': settings.SELECTABLE_MAX_LIMIT * 2}
|
|
response = self.client.get(self.url)
|
|
data = json.loads(response.content.decode('utf-8'))
|
|
self.assertEqual(len(data.get('data')), settings.SELECTABLE_MAX_LIMIT)
|
|
|
|
def test_request_less_than_max(self):
|
|
for i in range(settings.SELECTABLE_MAX_LIMIT):
|
|
self.create_thing(data={'name': 'Thing%s' % i})
|
|
new_limit = settings.SELECTABLE_MAX_LIMIT // 2
|
|
data = {'term': '', 'limit': new_limit}
|
|
response = self.client.get(self.url, data)
|
|
data = json.loads(response.content.decode('utf-8'))
|
|
self.assertEqual(len(data.get('data')), new_limit)
|