summaryrefslogtreecommitdiff
path: root/tests/test_op_naming_convention.py
blob: fd70faafcf2726261ce10da432525da8f6b4d8af (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
from sqlalchemy import Integer, Column, \
    Table, Boolean, MetaData, CheckConstraint
from sqlalchemy.sql import column, func

from alembic import op

from alembic.testing.fixtures import op_fixture
from alembic.testing.fixtures import TestBase


class AutoNamingConventionTest(TestBase):
    __requires__ = ('sqlalchemy_094', )

    def test_add_check_constraint(self):
        context = op_fixture(naming_convention={
            "ck": "ck_%(table_name)s_%(constraint_name)s"
        })
        op.create_check_constraint(
            "foo",
            "user_table",
            func.len(column('name')) > 5
        )
        context.assert_(
            "ALTER TABLE user_table ADD CONSTRAINT ck_user_table_foo "
            "CHECK (len(name) > 5)"
        )

    def test_add_check_constraint_name_is_none(self):
        context = op_fixture(naming_convention={
            "ck": "ck_%(table_name)s_foo"
        })
        op.create_check_constraint(
            None,
            "user_table",
            func.len(column('name')) > 5
        )
        context.assert_(
            "ALTER TABLE user_table ADD CONSTRAINT ck_user_table_foo "
            "CHECK (len(name) > 5)"
        )

    def test_add_unique_constraint_name_is_none(self):
        context = op_fixture(naming_convention={
            "uq": "uq_%(table_name)s_foo"
        })
        op.create_unique_constraint(
            None,
            "user_table",
            'x'
        )
        context.assert_(
            "ALTER TABLE user_table ADD CONSTRAINT uq_user_table_foo UNIQUE (x)"
        )

    def test_add_index_name_is_none(self):
        context = op_fixture(naming_convention={
            "ix": "ix_%(table_name)s_foo"
        })
        op.create_index(
            None,
            "user_table",
            'x'
        )
        context.assert_(
            "CREATE INDEX ix_user_table_foo ON user_table (x)"
        )

    def test_add_check_constraint_already_named_from_schema(self):
        m1 = MetaData(
            naming_convention={"ck": "ck_%(table_name)s_%(constraint_name)s"})
        ck = CheckConstraint("im a constraint", name="cc1")
        Table('t', m1, Column('x'), ck)

        context = op_fixture(
            naming_convention={"ck": "ck_%(table_name)s_%(constraint_name)s"})

        op.create_table(
            "some_table",
            Column('x', Integer, ck),
        )
        context.assert_(
            "CREATE TABLE some_table "
            "(x INTEGER CONSTRAINT ck_t_cc1 CHECK (im a constraint))"
        )

    def test_add_check_constraint_inline_on_table(self):
        context = op_fixture(
            naming_convention={"ck": "ck_%(table_name)s_%(constraint_name)s"})
        op.create_table(
            "some_table",
            Column('x', Integer),
            CheckConstraint("im a constraint", name="cc1")
        )
        context.assert_(
            "CREATE TABLE some_table "
            "(x INTEGER, CONSTRAINT ck_some_table_cc1 CHECK (im a constraint))"
        )

    def test_add_check_constraint_inline_on_table_w_f(self):
        context = op_fixture(
            naming_convention={"ck": "ck_%(table_name)s_%(constraint_name)s"})
        op.create_table(
            "some_table",
            Column('x', Integer),
            CheckConstraint("im a constraint", name=op.f("ck_some_table_cc1"))
        )
        context.assert_(
            "CREATE TABLE some_table "
            "(x INTEGER, CONSTRAINT ck_some_table_cc1 CHECK (im a constraint))"
        )

    def test_add_check_constraint_inline_on_column(self):
        context = op_fixture(
            naming_convention={"ck": "ck_%(table_name)s_%(constraint_name)s"})
        op.create_table(
            "some_table",
            Column('x', Integer, CheckConstraint("im a constraint", name="cc1"))
        )
        context.assert_(
            "CREATE TABLE some_table "
            "(x INTEGER CONSTRAINT ck_some_table_cc1 CHECK (im a constraint))"
        )

    def test_add_check_constraint_inline_on_column_w_f(self):
        context = op_fixture(
            naming_convention={"ck": "ck_%(table_name)s_%(constraint_name)s"})
        op.create_table(
            "some_table",
            Column(
                'x', Integer,
                CheckConstraint("im a constraint", name=op.f("ck_q_cc1")))
        )
        context.assert_(
            "CREATE TABLE some_table "
            "(x INTEGER CONSTRAINT ck_q_cc1 CHECK (im a constraint))"
        )

    def test_add_column_schema_type(self):
        context = op_fixture(naming_convention={
            "ck": "ck_%(table_name)s_%(constraint_name)s"
        })
        op.add_column('t1', Column('c1', Boolean(name='foo'), nullable=False))
        context.assert_(
            'ALTER TABLE t1 ADD COLUMN c1 BOOLEAN NOT NULL',
            'ALTER TABLE t1 ADD CONSTRAINT ck_t1_foo CHECK (c1 IN (0, 1))'
        )

    def test_add_column_schema_type_w_f(self):
        context = op_fixture(naming_convention={
            "ck": "ck_%(table_name)s_%(constraint_name)s"
        })
        op.add_column(
            't1', Column('c1', Boolean(name=op.f('foo')), nullable=False))
        context.assert_(
            'ALTER TABLE t1 ADD COLUMN c1 BOOLEAN NOT NULL',
            'ALTER TABLE t1 ADD CONSTRAINT foo CHECK (c1 IN (0, 1))'
        )