]> git.jsancho.org Git - datasette-pytables.git/blobdiff - tests/test_api.py
Fix entry point and some issues with sqlite glob operand
[datasette-pytables.git] / tests / test_api.py
index c1938b1ddd8a059a0b523004dfd525030ddd6f43..eb0453a12c1e804fa9f6fa744ba810b2ceebaf4c 100644 (file)
@@ -15,7 +15,7 @@ def test_database_page(app_client):
     data = response.json
     assert 'test_tables' == data['database']
     assert [{
-        'name': '/array1',
+        'name': '%array1',
         'columns': ['value'],
         'primary_keys': [],
         'count': 2,
@@ -24,7 +24,7 @@ def test_database_page(app_client):
         'foreign_keys': {'incoming': [], 'outgoing': []},
         'private': False,
     }, {
-        'name': '/group1/array2',
+        'name': '%group1%array2',
         'columns': ['value'],
         'primary_keys': [],
         'count': 10000,
@@ -33,7 +33,7 @@ def test_database_page(app_client):
         'foreign_keys': {'incoming': [], 'outgoing': []},
         'private': False,
     }, {
-        'name': '/group1/table1',
+        'name': '%group1%table1',
         'columns': ['identity', 'idnumber', 'speed'],
         'primary_keys': [],
         'count': 10000,
@@ -42,7 +42,7 @@ def test_database_page(app_client):
         'foreign_keys': {'incoming': [], 'outgoing': []},
         'private': False,
     }, {
-        'name': '/group2/multi',
+        'name': '%group2%multi',
         'columns': ['value'],
         'primary_keys': [],
         'count': 10,
@@ -51,7 +51,7 @@ def test_database_page(app_client):
         'foreign_keys': {'incoming': [], 'outgoing': []},
         'private': False,
     }, {
-        'name': '/group2/table2',
+        'name': '%group2%table2',
         'columns': ['identity', 'idnumber', 'speed'],
         'primary_keys': [],
         'count': 10000,
@@ -64,13 +64,13 @@ def test_database_page(app_client):
 def test_custom_sql(app_client):
     response = app_client.get(
         '/test_tables.json?' + urlencode({
-            'sql': 'select identity from [/group1/table1]',
+            'sql': 'select identity from [%group1%table1]',
             '_shape': 'objects'
         }),
     )
     data = response.json
     assert {
-        'sql': 'select identity from [/group1/table1]',
+        'sql': 'select identity from [%group1%table1]',
         'params': {}
     } == data['query']
     assert 1000 == len(data['rows'])
@@ -87,21 +87,21 @@ def test_custom_sql(app_client):
 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'
+            'sql': 'select identity from [%group1%table1] where speed > 100 and idnumber < 55',
+            '_shape': 'objects',
         }),
     )
     data = response.json
     assert {
-        'sql': 'select identity from [/group1/table1] where speed > 100 and idnumber < 55',
-        'params': {}
+        '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'}
+        {'identity': 'This is particle: 54'},
     ] == data['rows']
     assert ['identity'] == data['columns']
     assert 'test_tables' == data['database']
@@ -110,20 +110,20 @@ def test_custom_complex_sql(app_client):
 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'
-            }),
+            'sql': 'select identity from [%group1%table1] where (speed > 100) & (speed < 500)',
+            '_shape': 'objects',
+        }),
     )
     data = response.json
     assert {
-        'sql': 'select identity from [/group1/table1] where (speed > 100) & (speed < 500)',
-        'params': {}
+        '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'}
+        {'identity': 'This is particle: 53'},
     ] == data['rows'][:3]
     assert ['identity'] == data['columns']
     assert 'test_tables' == data['database']
@@ -139,23 +139,20 @@ def test_invalid_custom_sql(app_client):
 
 def test_table_json(app_client):
     response = app_client.get(
-        '/test_tables/%2Fgroup2%2Ftable2.json?_shape=objects',
+        '/test_tables/%group2%table2.json?_shape=objects',
     )
     assert response.status == 200
     data = response.json
-    assert data['query']['sql'] == 'select rowid, * from [/group2/table2] order by rowid limit 51'
+    assert data['query']['sql'] == 'select identity, idnumber, speed from [%group2%table2] 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
@@ -173,24 +170,22 @@ def test_table_not_exists_json(app_client):
 
 def test_table_shape_arrays(app_client):
     response = app_client.get(
-        '/test_tables/%2Fgroup2%2Ftable2.json?_shape=arrays',
+        '/test_tables/%group2%table2.json?_shape=arrays',
     )
     assert [
-        [6, 'This is particle:  6', 6, 12.0],
-        [7, 'This is particle:  7', 7, 14.0],
+        ['This is particle:  6', 6, 12.0],
+        ['This is particle:  7', 7, 14.0],
     ] == response.json['rows'][6:8]
 
 def test_table_shape_objects(app_client):
     response = app_client.get(
-        '/test_tables/%2Fgroup2%2Ftable2.json?_shape=objects',
+        '/test_tables/%group2%table2.json?_shape=objects',
     )
     assert [{
-        'rowid': 6,
         'identity': 'This is particle:  6',
         'idnumber': 6,
         'speed': 12.0,
     }, {
-        'rowid': 7,
         'identity': 'This is particle:  7',
         'idnumber': 7,
         'speed': 14.0,
@@ -198,15 +193,13 @@ def test_table_shape_objects(app_client):
 
 def test_table_shape_array(app_client):
     response = app_client.get(
-        '/test_tables/%2Fgroup2%2Ftable2.json?_shape=array',
+        '/test_tables/%group2%table2.json?_shape=array',
     )
     assert [{
-        'rowid': 6,
         'identity': 'This is particle:  6',
         'idnumber': 6,
         'speed': 12.0,
     }, {
-        'rowid': 7,
         'identity': 'This is particle:  7',
         'idnumber': 7,
         'speed': 14.0,
@@ -214,7 +207,7 @@ def test_table_shape_array(app_client):
 
 def test_table_shape_invalid(app_client):
     response = app_client.get(
-        '/test_tables/%2Fgroup2%2Ftable2.json?_shape=invalid',
+        '/test_tables/%group2%table2.json?_shape=invalid',
     )
     assert {
         'ok': False,
@@ -224,22 +217,22 @@ def test_table_shape_invalid(app_client):
     } == response.json
 
 @pytest.mark.parametrize('path, expected_rows, expected_pages', [
-    ('/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),
+    ('/test_tables/%array1.json', 2, 1),
+    ('/test_tables/%array1.json?_size=1', 2, 2),
+    ('/test_tables/%group1%array2.json?_size=1000', 10000, 10),
+    ('/test_tables/%group2%multi.json?_size=5', 10, 2),
 ])
 def test_paginate_tables_and_arrays(app_client, path, expected_rows, expected_pages):
     fetched = []
     count = 0
     while path:
         response = app_client.get(path)
-        print("*****", response.json)
         assert 200 == response.status
         count += 1
         fetched.extend(response.json['rows'])
         path = response.json['next_url']
         if path:
+            path = path.replace('http://localhost', '')
             assert response.json['next']
             assert '_next={}'.format(response.json['next']) in path