X-Git-Url: https://git.jsancho.org/?p=datasette-pytables.git;a=blobdiff_plain;f=tests%2Ftest_api.py;h=72d14b18e4dca6c1a720649d0221818cb57c76e6;hp=80c64095fae00fb2a22828930506d8b04f0354f2;hb=5f5e1e533d98b36bbb159487984d5d95b2ff3ae2;hpb=06bdd1ac2d8836a2ab8e14074f2435a4c3a595b5 diff --git a/tests/test_api.py b/tests/test_api.py index 80c6409..72d14b1 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -52,3 +52,67 @@ def test_database_page(app_client): 'fts_table': None, 'foreign_keys': {'incoming': [], 'outgoing': []} }] == data['tables'] + +def test_custom_sql(app_client): + response = app_client.get( + '/test_tables.json?sql=select+identity+from+[/group1/table1]&_shape=objects', + gather_request=False + ) + data = response.json + assert { + 'sql': 'select identity from [/group1/table1]', + 'params': {} + } == data['query'] + assert 50 == len(data['rows']) + assert [ + {'identity': 'This is particle: 0'}, + {'identity': 'This is particle: 1'}, + {'identity': 'This is particle: 2'} + ] == data['rows'][:3] + assert ['identity'] == data['columns'] + assert 'test_tables' == data['database'] + assert data['truncated'] + +def test_invalid_custom_sql(app_client): + response = app_client.get( + '/test_tables.json?sql=.schema', + gather_request=False + ) + assert response.status == 400 + assert response.json['ok'] is False + assert 'Statement must be a SELECT' == response.json['error'] + +def test_table_json(app_client): + response = app_client.get( + '/test_tables/%2Fgroup2%2Ftable2.json?_shape=objects', + gather_request=False + ) + assert response.status == 200 + data = response.json + assert data['query']['sql'] == 'select rowid, * from [/group2/table2] order by rowid limit 51' + assert data['rows'][3:6] == [{ + 'rowid': 3, + 'identity': 'This is particle: 3', + 'idnumber': 3, + 'speed': 6.0 + }, { + 'rowid': 4, + 'identity': 'This is particle: 4', + 'idnumber': 4, + 'speed': 8.0 + }, { + 'rowid': 5, + 'identity': 'This is particle: 5', + 'idnumber': 5, + 'speed': 10.0 + }] + +def test_table_not_exists_json(app_client): + assert { + 'ok': False, + 'error': 'Table not found: blah', + 'status': 404, + 'title': None, + } == app_client.get( + '/test_tables/blah.json', gather_request=False + ).json