Skip to content

Commit 9358fb4

Browse files
committed
Add test cases for declarative
1 parent 15741f7 commit 9358fb4

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
@@ -2246,6 +2247,123 @@ class Simple(Base):
22462247
""",
22472248
)
22482249

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

22502368
class TestDataclassGenerator:
22512369
@pytest.fixture

0 commit comments

Comments
 (0)