from .fixtures import app_client
import pytest
+from urllib.parse import urlencode
pytest.fixture(scope='module')(app_client)
assert response.json.keys() == {'test_tables': 0}.keys()
d = response.json['test_tables']
assert d['name'] == 'test_tables'
- assert d['tables_count'] == 4
+ assert d['tables_count'] == 5
def test_database_page(app_client):
response = app_client.get('/test_tables.json', gather_request=False)
assert 'test_tables' == data['database']
assert [{
'name': '/array1',
- 'columns': [],
+ 'columns': ['value'],
'primary_keys': [],
'count': 2,
'label_column': None,
'foreign_keys': {'incoming': [], 'outgoing': []}
}, {
'name': '/group1/array2',
- 'columns': [],
+ 'columns': ['value'],
'primary_keys': [],
'count': 10000,
'label_column': None,
'hidden': False,
'fts_table': None,
'foreign_keys': {'incoming': [], 'outgoing': []}
+ }, {
+ 'name': '/group2/multi',
+ 'columns': ['value'],
+ 'primary_keys': [],
+ 'count': 10,
+ 'label_column': None,
+ 'hidden': False,
+ 'fts_table': None,
+ 'foreign_keys': {'incoming': [], 'outgoing': []}
}, {
'name': '/group2/table2',
'columns': ['identity', 'idnumber', 'speed'],
def test_custom_sql(app_client):
response = app_client.get(
- '/test_tables.json?sql=select+identity+from+[/group1/table1]&_shape=objects',
+ '/test_tables.json?' + urlencode({
+ 'sql': 'select identity from [/group1/table1]',
+ '_shape': 'objects'
+ }),
gather_request=False
)
data = response.json
assert [
{'identity': 'This is particle: 0'},
{'identity': 'This is particle: 1'},
- {'identity': 'This is particle: 2'}
- ] == data['rows'][:3]
+ {'identity': 'This is particle: 2'},
+ {'identity': 'This is particle: 3'}
+ ] == data['rows'][:4]
assert ['identity'] == data['columns']
assert 'test_tables' == data['database']
assert data['truncated']
+def test_custom_complex_sql(app_client):
+ response = app_client.get(
+ '/test_tables.json?' + urlencode({
+ 'sql': 'select identity from [/group1/table1] where speed > 100 and idnumber < 55',
+ '_shape': 'objects'
+ }),
+ gather_request=False
+ )
+ data = response.json
+ assert {
+ 'sql': 'select identity from [/group1/table1] where speed > 100 and idnumber < 55',
+ 'params': {}
+ } == data['query']
+ assert 4 == len(data['rows'])
+ assert [
+ {'identity': 'This is particle: 51'},
+ {'identity': 'This is particle: 52'},
+ {'identity': 'This is particle: 53'},
+ {'identity': 'This is particle: 54'}
+ ] == data['rows']
+ assert ['identity'] == data['columns']
+ assert 'test_tables' == data['database']
+ assert not data['truncated']
+
+def test_custom_pytables_sql(app_client):
+ response = app_client.get(
+ '/test_tables.json?' + urlencode({
+ 'sql': 'select identity from [/group1/table1] where (speed > 100) & (speed < 500)',
+ '_shape': 'objects'
+ }),
+ gather_request=False
+ )
+ data = response.json
+ assert {
+ 'sql': 'select identity from [/group1/table1] where (speed > 100) & (speed < 500)',
+ 'params': {}
+ } == data['query']
+ assert 199 == len(data['rows'])
+ assert [
+ {'identity': 'This is particle: 51'},
+ {'identity': 'This is particle: 52'},
+ {'identity': 'This is particle: 53'}
+ ] == data['rows'][:3]
+ assert ['identity'] == data['columns']
+ assert 'test_tables' == data['database']
+ assert not data['truncated']
+
def test_invalid_custom_sql(app_client):
response = app_client.get(
'/test_tables.json?sql=.schema',
('/test_tables/%2Farray1.json', 2, 1),
('/test_tables/%2Farray1.json?_size=1', 2, 2),
('/test_tables/%2Fgroup1%2Farray2.json?_size=1000', 10000, 10),
+ ('/test_tables/%2Fgroup2%2Fmulti.json?_size=5', 10, 2),
])
def test_paginate_tables_and_arrays(app_client, path, expected_rows, expected_pages):
fetched = []