Skip to content

Commit 8abfb0f

Browse files
committed
Add test cases for declarative
1 parent 5029eb1 commit 8abfb0f

File tree

1 file changed

+118
-0
lines changed

1 file changed

+118
-0
lines changed

tests/test_generators.py

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
MetaData,
2020
Table,
2121
UniqueConstraint,
22+
conv,
2223
)
2324
from sqlalchemy.sql.expression import text
2425
from sqlalchemy.sql.sqltypes import NullType
@@ -2247,6 +2248,123 @@ class Simple(Base):
22472248
""",
22482249
)
22492250

2251+
def test_constraints_with_default_names(self, generator: CodeGenerator) -> None:
2252+
generator.metadata.naming_convention = {
2253+
"uq": "UNIQUE_%(table_name)s_%(column_0_N_name)s",
2254+
"ck": "CHECK_%(table_name)s",
2255+
"fk": "FOREIGN_%(table_name)s_%(column_0_key)s"
2256+
"_%(referred_table_name)s_%(referred_column_0_label)s",
2257+
"pk": "PRIMARY_%(table_name)s_%(column_0N_name)s",
2258+
}
2259+
2260+
Table(
2261+
"items",
2262+
generator.metadata,
2263+
Column("id", INTEGER),
2264+
Column("name", VARCHAR),
2265+
Column("container_id", INTEGER),
2266+
PrimaryKeyConstraint("id", "name", name="PRIMARY_items_idname"),
2267+
UniqueConstraint("id", name="UNIQUE_items_id"),
2268+
ForeignKeyConstraint(
2269+
["container_id"],
2270+
["containers.id"],
2271+
name="FOREIGN_items_container_id_containers_id",
2272+
),
2273+
)
2274+
Table(
2275+
"containers",
2276+
generator.metadata,
2277+
Column("id", INTEGER),
2278+
Column("name", VARCHAR),
2279+
PrimaryKeyConstraint("id", name="PRIMARY_containers_id"),
2280+
UniqueConstraint("id", "name", name="UNIQUE_containers_id_name"),
2281+
CheckConstraint("id > 0", name="CHECK_containers"),
2282+
)
2283+
2284+
validate_code(
2285+
generator.generate(),
2286+
"""\
2287+
from sqlalchemy import CheckConstraint, Column, ForeignKey, \
2288+
Integer, String, UniqueConstraint
2289+
from sqlalchemy.orm import declarative_base, relationship
2290+
2291+
metadata = MetaData.naming_convention = {
2292+
"uq": "UNIQUE_%(table_name)s_%(column_0_N_name)s",
2293+
"ck": "CHECK_%(table_name)s",
2294+
"fk": "FOREIGN_%(table_name)s_%(column_0_key)s_\
2295+
%(referred_table_name)s_%(referred_column_0_label)s",
2296+
"pk": "PRIMARY_%(table_name)s_%(column_0N_name)s",
2297+
}
2298+
2299+
Base = declarative_base(metadata=metadata)
2300+
2301+
2302+
class Containers(Base):
2303+
__tablename__ = 'containers'
2304+
__table_args__ = (
2305+
CheckConstraint('id > 0'),
2306+
UniqueConstraint('id', 'name')
2307+
)
2308+
2309+
id = Column(Integer, primary_key=True)
2310+
name = Column(String)
2311+
2312+
items = relationship('Items', back_populates='container')
2313+
2314+
2315+
class Items(Base):
2316+
__tablename__ = 'items'
2317+
2318+
id = Column(Integer, primary_key=True, nullable=False, unique=True)
2319+
name = Column(String, primary_key=True, nullable=False)
2320+
container_id = Column(ForeignKey('containers.id'))
2321+
2322+
container = relationship('Containers', back_populates='items')
2323+
""",
2324+
)
2325+
2326+
def test_constraint_name_token(self, generator: CodeGenerator) -> None:
2327+
generator.metadata.naming_convention = {
2328+
"ck": "ck_%(table_name)s_%(constraint_name)s",
2329+
"pk": "pk_%(table_name)s",
2330+
}
2331+
2332+
Table(
2333+
"simple",
2334+
generator.metadata,
2335+
Column("id", INTEGER),
2336+
Column("number", INTEGER),
2337+
PrimaryKeyConstraint("id", name="pk_simple"),
2338+
CheckConstraint("id > 0", name=conv("ck_simple_idcheck")),
2339+
CheckConstraint("number > 0", name=conv("non_default_name")),
2340+
)
2341+
2342+
validate_code(
2343+
generator.generate(),
2344+
"""\
2345+
from sqlalchemy import CheckConstraint, Column, Integer
2346+
from sqlalchemy.orm import declarative_base
2347+
2348+
metadata = MetaData.naming_convention = {
2349+
"ck": "ck_%(table_name)s_%(constraint_name)s",
2350+
"pk": "pk_%(table_name)s",
2351+
}
2352+
2353+
Base = declarative_base(metadata=metadata)
2354+
2355+
2356+
class Simple(Base):
2357+
__tablename__ = 'simple'
2358+
__table_args__ = (
2359+
CheckConstraint('id > 0', name='idcheck'),
2360+
CheckConstraint('number > 0', name=conv('non_default_name'))
2361+
)
2362+
2363+
id = Column(Integer, primary_key=True)
2364+
number = Column(Integer)
2365+
""",
2366+
)
2367+
22502368

22512369
class TestDataclassGenerator:
22522370
@pytest.fixture

0 commit comments

Comments
 (0)