datasette/tests/test_label_column_for_table.py

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