From 8acdc2fd14c0f7251e1e3fd592c53b3152f5256c Mon Sep 17 00:00:00 2001 From: Simon Willison Date: Sun, 12 Nov 2017 12:08:32 -0800 Subject: [PATCH] Test for table with space in name Tests code in b51836f8463ef65bc947f0a7b6e60167cb7154cf --- tests/test_app.py | 47 ++++++++++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/tests/test_app.py b/tests/test_app.py index 5fab6c32..25acdfc7 100644 --- a/tests/test_app.py +++ b/tests/test_app.py @@ -8,9 +8,9 @@ import tempfile @pytest.fixture(scope='module') def three_table_app_client(): with tempfile.TemporaryDirectory() as tmpdir: - filepath = os.path.join(tmpdir, 'three_tables.db') + filepath = os.path.join(tmpdir, 'four_tables.db') conn = sqlite3.connect(filepath) - conn.executescript(THREE_TABLES) + conn.executescript(FOUR_TABLES) os.chdir(os.path.dirname(filepath)) yield Datasette([filepath]).app().test_client @@ -18,30 +18,34 @@ def three_table_app_client(): def test_homepage(three_table_app_client): _, response = three_table_app_client.get('/') assert response.status == 200 - assert 'three_tables' in response.text + assert 'four_tables' in response.text # Now try the JSON _, response = three_table_app_client.get('/.json') assert response.status == 200 - assert response.json.keys() == {'three_tables': 0}.keys() - d = response.json['three_tables'] - assert d['name'] == 'three_tables' - assert d['tables_count'] == 3 + assert response.json.keys() == {'four_tables': 0}.keys() + d = response.json['four_tables'] + assert d['name'] == 'four_tables' + assert d['tables_count'] == 4 def test_database_page(three_table_app_client): - _, response = three_table_app_client.get('/three_tables', allow_redirects=False) + _, response = three_table_app_client.get('/four_tables', allow_redirects=False) assert response.status == 302 - _, response = three_table_app_client.get('/three_tables') - assert 'three_tables' in response.text + _, response = three_table_app_client.get('/four_tables') + assert 'four_tables' in response.text # Test JSON list of tables - _, response = three_table_app_client.get('/three_tables.json') + _, response = three_table_app_client.get('/four_tables.json') data = response.json - assert 'three_tables' == data['database'] + assert 'four_tables' == data['database'] assert [{ + 'columns': ['pk', 'content'], + 'name': 'Table With Space In Name', + 'table_rows': 0, + }, { 'columns': ['pk1', 'pk2', 'content'], 'name': 'compound_primary_key', - 'table_rows': 0 + 'table_rows': 0, }, { 'columns': ['content'], 'name': 'no_primary_key', @@ -49,13 +53,13 @@ def test_database_page(three_table_app_client): }, { 'columns': ['pk', 'content'], 'name': 'simple_primary_key', - 'table_rows': 2 + 'table_rows': 2, }] == data['tables'] def test_custom_sql(three_table_app_client): _, response = three_table_app_client.get( - '/three_tables.jsono?sql=select+content+from+simple_primary_key' + '/four_tables.jsono?sql=select+content+from+simple_primary_key' ) data = response.json assert { @@ -67,13 +71,13 @@ def test_custom_sql(three_table_app_client): {'content': 'world'} ] == data['rows'] assert ['content'] == data['columns'] - assert 'three_tables' == data['database'] + assert 'four_tables' == data['database'] def test_table_page(three_table_app_client): - _, response = three_table_app_client.get('/three_tables/simple_primary_key') + _, response = three_table_app_client.get('/four_tables/simple_primary_key') assert response.status == 200 - _, response = three_table_app_client.get('/three_tables/simple_primary_key.jsono') + _, response = three_table_app_client.get('/four_tables/simple_primary_key.jsono') assert response.status == 200 data = response.json assert data['query']['sql'] == 'select * from "simple_primary_key" order by pk limit 51' @@ -87,7 +91,7 @@ def test_table_page(three_table_app_client): }] -THREE_TABLES = ''' +FOUR_TABLES = ''' CREATE TABLE simple_primary_key ( pk varchar(30) primary key, content text @@ -104,6 +108,11 @@ CREATE TABLE no_primary_key ( content text ); +CREATE TABLE "Table With Space In Name" ( + pk varchar(30) primary key, + content text +); + INSERT INTO simple_primary_key VALUES (1, 'hello'); INSERT INTO simple_primary_key VALUES (2, 'world'); '''