kopia lustrzana https://github.com/simonw/datasette
				
				
				
			
		
			
				
	
	
		
			104 wiersze
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			104 wiersze
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
| from datasette.app import Datasette
 | |
| import os
 | |
| import pytest
 | |
| import sqlite3
 | |
| import tempfile
 | |
| 
 | |
| 
 | |
| TABLES = '''
 | |
| CREATE TABLE "election_results" (
 | |
|   "county" INTEGER,
 | |
|   "party" INTEGER,
 | |
|   "office" INTEGER,
 | |
|   "votes" INTEGER,
 | |
|   FOREIGN KEY (county) REFERENCES county(id),
 | |
|   FOREIGN KEY (party) REFERENCES party(id),
 | |
|   FOREIGN KEY (office) REFERENCES office(id)
 | |
|  );
 | |
| 
 | |
| CREATE VIRTUAL TABLE "election_results_fts" USING FTS4 ("county", "party");
 | |
| 
 | |
| CREATE TABLE "county" (
 | |
|   "id" INTEGER PRIMARY KEY ,
 | |
|   "name" TEXT
 | |
| );
 | |
| 
 | |
| CREATE TABLE "party" (
 | |
|   "id" INTEGER PRIMARY KEY ,
 | |
|   "name" TEXT
 | |
| );
 | |
| 
 | |
| CREATE TABLE "office" (
 | |
|   "id" INTEGER PRIMARY KEY ,
 | |
|   "name" TEXT
 | |
| );
 | |
| '''
 | |
| 
 | |
| 
 | |
| @pytest.fixture(scope='module')
 | |
| def ds_instance():
 | |
|     with tempfile.TemporaryDirectory() as tmpdir:
 | |
|         filepath = os.path.join(tmpdir, 'test_tables.db')
 | |
|         conn = sqlite3.connect(filepath)
 | |
|         conn.executescript(TABLES)
 | |
|         yield Datasette([filepath])
 | |
| 
 | |
| 
 | |
| def test_inspect_hidden_tables(ds_instance):
 | |
|     info = ds_instance.inspect()
 | |
|     tables = info['test_tables']['tables']
 | |
|     expected_hidden = (
 | |
|         'election_results_fts',
 | |
|         'election_results_fts_content',
 | |
|         'election_results_fts_docsize',
 | |
|         'election_results_fts_segdir',
 | |
|         'election_results_fts_segments',
 | |
|         'election_results_fts_stat',
 | |
|     )
 | |
|     expected_visible = (
 | |
|         'election_results',
 | |
|         'county',
 | |
|         'party',
 | |
|         'office',
 | |
|     )
 | |
|     assert sorted(expected_hidden) == sorted(
 | |
|         [table for table in tables if tables[table]['hidden']]
 | |
|     )
 | |
|     assert sorted(expected_visible) == sorted(
 | |
|         [table for table in tables if not tables[table]['hidden']]
 | |
|     )
 | |
| 
 | |
| 
 | |
| def test_inspect_foreign_keys(ds_instance):
 | |
|     info = ds_instance.inspect()
 | |
|     tables = info['test_tables']['tables']
 | |
|     for table_name in ('county', 'party', 'office'):
 | |
|         assert 0 == tables[table_name]['count']
 | |
|         foreign_keys = tables[table_name]['foreign_keys']
 | |
|         assert [] == foreign_keys['outgoing']
 | |
|         assert [{
 | |
|             'column': 'id',
 | |
|             'other_column': table_name,
 | |
|             'other_table': 'election_results'
 | |
|         }] == foreign_keys['incoming']
 | |
| 
 | |
|     election_results = tables['election_results']
 | |
|     assert 0 == election_results['count']
 | |
|     assert sorted([{
 | |
|         'column': 'county',
 | |
|         'other_column': 'id',
 | |
|         'other_table': 'county'
 | |
|     }, {
 | |
|         'column': 'party',
 | |
|         'other_column': 'id',
 | |
|         'other_table': 'party'
 | |
|     }, {
 | |
|         'column': 'office',
 | |
|         'other_column': 'id',
 | |
|         'other_table': 'office'
 | |
|     }], key=lambda d: d['column']) == sorted(
 | |
|         election_results['foreign_keys']['outgoing'],
 | |
|         key=lambda d: d['column']
 | |
|     )
 | |
|     assert [] == election_results['foreign_keys']['incoming']
 |