mirror of
https://github.com/simonw/sqlite-utils.git
synced 2026-07-23 01:14:31 +02:00
60 lines
1.9 KiB
Python
60 lines
1.9 KiB
Python
from sqlite_utils.db import ForeignKey
|
|
import pytest
|
|
|
|
|
|
def test_insert_m2m_single(fresh_db):
|
|
dogs = fresh_db["dogs"]
|
|
dogs.insert({"id": 1, "name": "Cleo"}, pk="id").m2m(
|
|
"humans", {"id": 1, "name": "Natalie D"}, pk="id"
|
|
)
|
|
assert {"dogs_humans", "humans", "dogs"} == set(fresh_db.table_names())
|
|
humans = fresh_db["humans"]
|
|
dogs_humans = fresh_db["dogs_humans"]
|
|
assert [{"id": 1, "name": "Natalie D"}] == list(humans.rows)
|
|
assert [{"humans_id": 1, "dogs_id": 1}] == list(dogs_humans.rows)
|
|
|
|
|
|
def test_insert_m2m_list(fresh_db):
|
|
dogs = fresh_db["dogs"]
|
|
dogs.insert({"id": 1, "name": "Cleo"}, pk="id").m2m(
|
|
"humans",
|
|
[{"id": 1, "name": "Natalie D"}, {"id": 2, "name": "Simon W"}],
|
|
pk="id",
|
|
)
|
|
assert {"dogs", "humans", "dogs_humans"} == set(fresh_db.table_names())
|
|
humans = fresh_db["humans"]
|
|
dogs_humans = fresh_db["dogs_humans"]
|
|
assert [{"humans_id": 1, "dogs_id": 1}, {"humans_id": 2, "dogs_id": 1}] == list(
|
|
dogs_humans.rows
|
|
)
|
|
assert [{"id": 1, "name": "Natalie D"}, {"id": 2, "name": "Simon W"}] == list(
|
|
humans.rows
|
|
)
|
|
assert [
|
|
ForeignKey(
|
|
table="dogs_humans", column="dogs_id", other_table="dogs", other_column="id"
|
|
),
|
|
ForeignKey(
|
|
table="dogs_humans",
|
|
column="humans_id",
|
|
other_table="humans",
|
|
other_column="id",
|
|
),
|
|
] == dogs_humans.foreign_keys
|
|
|
|
|
|
def test_m2m_explicit_argument(fresh_db):
|
|
# .m2m("humans", ..., m2m_table="relationships")
|
|
assert False
|
|
|
|
|
|
def test_uses_existing_m2m_table_if_exists(fresh_db):
|
|
# Code should look for an existing toble with fks to both tables
|
|
# and use that if it exists.
|
|
assert False
|
|
|
|
|
|
def test_requires_explicit_m2m_table_if_multiple_options(fresh_db):
|
|
# If the code scans for m2m tables and finds more than one candidate
|
|
# it should require that the m2m_table=x argument is used
|
|
assert False
|