summaryrefslogtreecommitdiff
path: root/test/engine
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2015-04-27 15:05:41 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2015-04-27 15:05:41 -0400
commite25ef01fbb70c9e6af5714b246103a2564729ade (patch)
tree6048814d71cd9076a50efa7f7a17e4f8d0a2c4ed /test/engine
parent6c0f30db81d127920ca7a68d7a28b8ea086866b6 (diff)
downloadsqlalchemy-e25ef01fbb70c9e6af5714b246103a2564729ade.tar.gz
- Fixed regression due to :ticket:`3282` where the ``tables`` collection
passed as a keyword argument to the :meth:`.DDLEvents.before_create`, :meth:`.DDLEvents.after_create`, :meth:`.DDLEvents.before_drop`, and :meth:`.DDLEvents.after_drop` events would no longer be a list of tables, but instead a list of tuples which contained a second entry with foreign keys to be added or dropped. As the ``tables`` collection, while documented as not necessarily stable, has come to be relied upon, this change is considered a regression. Additionally, in some cases for "drop", this collection would be an iterator that would cause the operation to fail if prematurely iterated. The collection is now a list of table objects in all cases and test coverage for the format of this collection is now added. fixes #3391
Diffstat (limited to 'test/engine')
-rw-r--r--test/engine/test_ddlevents.py55
1 files changed, 53 insertions, 2 deletions
diff --git a/test/engine/test_ddlevents.py b/test/engine/test_ddlevents.py
index 18300179c..cb13daa4c 100644
--- a/test/engine/test_ddlevents.py
+++ b/test/engine/test_ddlevents.py
@@ -19,29 +19,45 @@ class DDLEventTest(fixtures.TestBase):
self.state = None
self.schema_item = schema_item
self.bind = bind
+ if isinstance(schema_item, MetaData):
+ self.tables = set(schema_item.tables.values())
+ else:
+ self.tables = None
def before_create(self, schema_item, bind, **kw):
assert self.state is None
assert schema_item is self.schema_item
assert bind is self.bind
+ if self.tables:
+ eq_(self.tables, set(kw['tables']))
+ assert isinstance(kw['tables'], list)
self.state = 'before-create'
def after_create(self, schema_item, bind, **kw):
assert self.state in ('before-create', 'skipped')
assert schema_item is self.schema_item
assert bind is self.bind
+ if self.tables:
+ eq_(self.tables, set(kw['tables']))
+ assert isinstance(kw['tables'], list)
self.state = 'after-create'
def before_drop(self, schema_item, bind, **kw):
- assert self.state is None
+ assert self.state in (None, 'skipped')
assert schema_item is self.schema_item
assert bind is self.bind
+ if self.tables:
+ eq_(self.tables, set(kw['tables']))
+ assert isinstance(kw['tables'], list)
self.state = 'before-drop'
def after_drop(self, schema_item, bind, **kw):
assert self.state in ('before-drop', 'skipped')
assert schema_item is self.schema_item
assert bind is self.bind
+ if self.tables:
+ eq_(self.tables, set(kw['tables']))
+ assert isinstance(kw['tables'], list)
self.state = 'after-drop'
def setup(self):
@@ -130,7 +146,7 @@ class DDLEventTest(fixtures.TestBase):
table.drop(bind)
assert canary.state == 'after-drop'
- def test_table_create_before(self):
+ def test_metadata_create_before(self):
metadata, bind = self.metadata, self.bind
canary = self.Canary(metadata, bind)
event.listen(metadata, 'before_create', canary.before_create)
@@ -163,6 +179,41 @@ class DDLEventTest(fixtures.TestBase):
metadata.drop_all(bind)
assert canary.state == 'after-create'
+ def test_metadata_drop_before(self):
+ metadata, bind = self.metadata, self.bind
+ canary = self.Canary(metadata, bind)
+ event.listen(metadata, 'before_drop', canary.before_drop)
+
+ canary.state = 'skipped'
+ metadata.create_all(bind)
+ assert canary.state == 'skipped'
+ metadata.drop_all(bind)
+ assert canary.state == 'before-drop'
+
+ def test_metadata_drop_after(self):
+ metadata, bind = self.metadata, self.bind
+ canary = self.Canary(metadata, bind)
+ event.listen(metadata, 'after_drop', canary.after_drop)
+
+ canary.state = 'skipped'
+ metadata.create_all(bind)
+ assert canary.state == 'skipped'
+ metadata.drop_all(bind)
+ assert canary.state == 'after-drop'
+
+ def test_metadata_drop_both(self):
+ metadata, bind = self.metadata, self.bind
+ canary = self.Canary(metadata, bind)
+
+ event.listen(metadata, 'before_drop', canary.before_drop)
+ event.listen(metadata, 'after_drop', canary.after_drop)
+
+ canary.state = 'skipped'
+ metadata.create_all(bind)
+ assert canary.state == 'skipped'
+ metadata.drop_all(bind)
+ assert canary.state == 'after-drop'
+
def test_metadata_table_isolation(self):
metadata, table, bind = self.metadata, self.table, self.bind
table_canary = self.Canary(table, bind)