kopia lustrzana https://github.com/simonw/datasette
98 wiersze
2.8 KiB
Python
98 wiersze
2.8 KiB
Python
import pytest
|
|
from datasette.database import Database
|
|
from datasette.app import Datasette
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
@pytest.mark.parametrize(
|
|
"create_sql,table_name,config,expected_label_column",
|
|
[
|
|
# Explicit label_column
|
|
(
|
|
"create table t1 (id integer primary key, name text, title text);",
|
|
"t1",
|
|
{"t1": {"label_column": "title"}},
|
|
"title",
|
|
),
|
|
# Single unique text column
|
|
(
|
|
"create table t2 (id integer primary key, name2 text unique, title text);",
|
|
"t2",
|
|
{},
|
|
"name2",
|
|
),
|
|
(
|
|
"create table t3 (id integer primary key, title2 text unique, name text);",
|
|
"t3",
|
|
{},
|
|
"title2",
|
|
),
|
|
# Two unique text columns means it cannot decide on one
|
|
(
|
|
"create table t3x (id integer primary key, name2 text unique, title2 text unique);",
|
|
"t3x",
|
|
{},
|
|
None,
|
|
),
|
|
# Name or title column
|
|
(
|
|
"create table t4 (id integer primary key, name text);",
|
|
"t4",
|
|
{},
|
|
"name",
|
|
),
|
|
(
|
|
"create table t5 (id integer primary key, title text);",
|
|
"t5",
|
|
{},
|
|
"title",
|
|
),
|
|
# But not if there are multiple non-unique text that are not called title
|
|
(
|
|
"create table t5x (id integer primary key, other1 text, other2 text);",
|
|
"t5x",
|
|
{},
|
|
None,
|
|
),
|
|
(
|
|
"create table t6 (id integer primary key, Name text);",
|
|
"t6",
|
|
{},
|
|
"Name",
|
|
),
|
|
(
|
|
"create table t7 (id integer primary key, Title text);",
|
|
"t7",
|
|
{},
|
|
"Title",
|
|
),
|
|
# Two columns, one of which is id
|
|
(
|
|
"create table t8 (id integer primary key, content text);",
|
|
"t8",
|
|
{},
|
|
"content",
|
|
),
|
|
(
|
|
"create table t9 (pk integer primary key, content text);",
|
|
"t9",
|
|
{},
|
|
"content",
|
|
),
|
|
],
|
|
)
|
|
async def test_label_column_for_table(
|
|
create_sql, table_name, config, expected_label_column
|
|
):
|
|
"""Test cases for label_column_for_table method"""
|
|
ds = Datasette()
|
|
db = ds.add_database(Database(ds, memory_name="test_label_column_for_table"))
|
|
await db.execute_write_script(create_sql)
|
|
if config:
|
|
ds.config = {"databases": {"test_label_column_for_table": {"tables": config}}}
|
|
actual_label_column = await db.label_column_for_table(table_name)
|
|
if expected_label_column is None:
|
|
assert actual_label_column is None
|
|
else:
|
|
assert actual_label_column == expected_label_column
|