mirror of
https://github.com/simonw/sqlite-utils.git
synced 2026-07-23 17:34:32 +02:00
Also made it so .duplicate() raises new NoTable exception rather than raising an AssertionError if the source table does not exist.
43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
from sqlite_utils.db import NoTable
|
|
import datetime
|
|
import pytest
|
|
|
|
|
|
def test_duplicate(fresh_db):
|
|
# Create table using native Sqlite statement:
|
|
fresh_db.execute(
|
|
"""CREATE TABLE [table1] (
|
|
[text_col] TEXT,
|
|
[real_col] REAL,
|
|
[int_col] INTEGER,
|
|
[bool_col] INTEGER,
|
|
[datetime_col] TEXT)"""
|
|
)
|
|
# Insert one row of mock data:
|
|
dt = datetime.datetime.now()
|
|
data = {
|
|
"text_col": "Cleo",
|
|
"real_col": 3.14,
|
|
"int_col": -255,
|
|
"bool_col": True,
|
|
"datetime_col": str(dt),
|
|
}
|
|
table1 = fresh_db["table1"]
|
|
row_id = table1.insert(data).last_rowid
|
|
# Duplicate table:
|
|
table2 = table1.duplicate("table2")
|
|
# Ensure data integrity:
|
|
assert data == table2.get(row_id)
|
|
# Ensure schema integrity:
|
|
assert [
|
|
{"name": "text_col", "type": "TEXT"},
|
|
{"name": "real_col", "type": "REAL"},
|
|
{"name": "int_col", "type": "INT"},
|
|
{"name": "bool_col", "type": "INT"},
|
|
{"name": "datetime_col", "type": "TEXT"},
|
|
] == [{"name": col.name, "type": col.type} for col in table2.columns]
|
|
|
|
|
|
def test_duplicate_fails_if_table_does_not_exist(fresh_db):
|
|
with pytest.raises(NoTable):
|
|
fresh_db["not_a_table"].duplicate("duplicated")
|