diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2011-11-28 22:29:43 -0500 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2011-11-28 22:29:43 -0500 |
| commit | fb47eda8ea08bc2ece4a2344eb87db115cdcb0d0 (patch) | |
| tree | 752943d56dd9a0acaee307fdcfeeda2b7eaab6c2 /tests/test_postgresql.py | |
| parent | 48ecd445cfaebad67a143480109586075dcb9ea0 (diff) | |
| download | alembic-fb47eda8ea08bc2ece4a2344eb87db115cdcb0d0.tar.gz | |
- add version check for at least 06, tests for 07 in selected
areas
- add "requires 07" decorators to test suite
- add tests for PG ENUM in offline mode. works in conjunction
with the latest 0.7.4 tip of SQLAlchemy, fixes #9. Docs will
be needed to illustrate how ENUM should be used.
- add support for table before_create and after_create events
within op.create_table(). Currently this will do the ENUM
thing for PG but will also invoke any other kinds of events
that might get configured on the table.
Diffstat (limited to 'tests/test_postgresql.py')
| -rw-r--r-- | tests/test_postgresql.py | 98 |
1 files changed, 88 insertions, 10 deletions
diff --git a/tests/test_postgresql.py b/tests/test_postgresql.py index 0f88f57..325cbb6 100644 --- a/tests/test_postgresql.py +++ b/tests/test_postgresql.py @@ -1,9 +1,95 @@ -from tests import op_fixture, db_for_dialect, eq_, staging_env, clear_staging_env +from tests import op_fixture, db_for_dialect, eq_, staging_env, \ + clear_staging_env, no_sql_testing_config,\ + capture_context_buffer, requires_07 from unittest import TestCase from sqlalchemy import DateTime, MetaData, Table, Column, text, Integer, String from sqlalchemy.engine.reflection import Inspector -from alembic import context +from alembic import context, command, util +from alembic.script import ScriptDirectory + +class PGOfflineEnumTest(TestCase): + @requires_07 + def setUp(self): + env = staging_env() + self.cfg = cfg = no_sql_testing_config() + + self.rid = rid = util.rev_id() + + self.script = script = ScriptDirectory.from_config(cfg) + script.generate_rev(rid, None, refresh=True) + + def _inline_enum_script(self): + self.script.write(self.rid, """ +down_revision = None + +from alembic.op import * +from sqlalchemy.dialects.postgresql import ENUM +from sqlalchemy import Column + +def upgrade(): + create_table("sometable", + Column("data", ENUM("one", "two", "three", name="pgenum")) + ) + +def downgrade(): + drop_table("sometable") +""") + + def _distinct_enum_script(self): + self.script.write(self.rid, """ +down_revision = None + +from alembic.op import * +from sqlalchemy.dialects.postgresql import ENUM +from sqlalchemy import Column + +def upgrade(): + enum = ENUM("one", "two", "three", name="pgenum", create_type=False) + enum.create(get_bind(), checkfirst=False) + create_table("sometable", + Column("data", enum) + ) + +def downgrade(): + drop_table("sometable") + ENUM(name="pgenum").drop(get_bind(), checkfirst=False) + +""") + + def tearDown(self): + clear_staging_env() + + def test_offline_inline_enum_create(self): + self._inline_enum_script() + with capture_context_buffer() as buf: + command.upgrade(self.cfg, self.rid, sql=True) + assert "CREATE TYPE pgenum AS ENUM ('one','two','three')" in buf.getvalue() + assert "CREATE TABLE sometable (\n data pgenum\n)" in buf.getvalue() + + def test_offline_inline_enum_drop(self): + self._inline_enum_script() + with capture_context_buffer() as buf: + command.downgrade(self.cfg, "%s:base" % self.rid, sql=True) + assert "DROP TABLE sometable" in buf.getvalue() + # no drop since we didn't emit events + assert "DROP TYPE pgenum" not in buf.getvalue() + + def test_offline_distinct_enum_create(self): + self._distinct_enum_script() + with capture_context_buffer() as buf: + command.upgrade(self.cfg, self.rid, sql=True) + assert "CREATE TYPE pgenum AS ENUM ('one','two','three')" in buf.getvalue() + assert "CREATE TABLE sometable (\n data pgenum\n)" in buf.getvalue() + + def test_offline_distinct_enum_drop(self): + self._distinct_enum_script() + with capture_context_buffer() as buf: + command.downgrade(self.cfg, "%s:base" % self.rid, sql=True) + assert "DROP TABLE sometable" in buf.getvalue() + assert "DROP TYPE pgenum" in buf.getvalue() + + class PostgresqlDefaultCompareTest(TestCase): @classmethod @@ -49,14 +135,6 @@ class PostgresqlDefaultCompareTest(TestCase): assert self._compare_default( t, t2, t2.c.somecol, alternate ) is expected -# t.create(self.bind) -# insp = Inspector.from_engine(self.bind) -# cols = insp.get_columns("test") -# ctx = context.get_context() -# assert ctx.impl.compare_server_default( -# cols[0], -# t2.c.somecol, -# alternate) is expected def _compare_default( self, |
