summaryrefslogtreecommitdiff
path: root/tests/test_postgresql.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2011-11-28 22:29:43 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2011-11-28 22:29:43 -0500
commitfb47eda8ea08bc2ece4a2344eb87db115cdcb0d0 (patch)
tree752943d56dd9a0acaee307fdcfeeda2b7eaab6c2 /tests/test_postgresql.py
parent48ecd445cfaebad67a143480109586075dcb9ea0 (diff)
downloadalembic-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.py98
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,