summaryrefslogtreecommitdiff
path: root/src/mailman/database/tests/test_migrations.py
diff options
context:
space:
mode:
authorJ08nY2017-07-04 17:54:47 +0200
committerJ08nY2017-08-30 13:18:11 +0200
commitd773e0fe42213a73ca0aacbfa2a665440f7b7e4d (patch)
tree6bc84d1ab532648079b32216e133ebc4d189ab1a /src/mailman/database/tests/test_migrations.py
parent49e4e6fb81127d7d6efe5e4170980d1b812c5793 (diff)
downloadmailman-d773e0fe42213a73ca0aacbfa2a665440f7b7e4d.tar.gz
mailman-d773e0fe42213a73ca0aacbfa2a665440f7b7e4d.tar.zst
mailman-d773e0fe42213a73ca0aacbfa2a665440f7b7e4d.zip
Diffstat (limited to 'src/mailman/database/tests/test_migrations.py')
-rw-r--r--src/mailman/database/tests/test_migrations.py99
1 files changed, 99 insertions, 0 deletions
diff --git a/src/mailman/database/tests/test_migrations.py b/src/mailman/database/tests/test_migrations.py
index ce1bc101b..5b686d13b 100644
--- a/src/mailman/database/tests/test_migrations.py
+++ b/src/mailman/database/tests/test_migrations.py
@@ -18,6 +18,7 @@
"""Test database schema migrations with Alembic"""
import os
+import json
import unittest
import sqlalchemy as sa
import alembic.command
@@ -495,3 +496,101 @@ class TestMigrations(unittest.TestCase):
self.assertEqual(
len(list(config.db.store.execute(mlist_table.select()))),
0)
+
+ def test_7c5b39d1ecc4_workflow_steps_upgrade(self):
+ old_state_table = sa.sql.table(
+ 'workflowstate',
+ sa.sql.column('token', SAUnicode),
+ sa.sql.column('step', SAUnicode),
+ sa.sql.column('data', SAUnicode)
+ )
+ new_state_table = sa.sql.table(
+ 'workflowstate',
+ sa.sql.column('token', SAUnicode),
+ sa.sql.column('steps', SAUnicode),
+ sa.sql.column('data', SAUnicode)
+ )
+ with transaction():
+ # Start at the previous revision.
+ alembic.command.downgrade(alembic_cfg, '4bd95c99b2e7')
+ config.db.store.execute(old_state_table.insert().values([
+ dict(token='12345',
+ step='some_step',
+ data='whatever data'),
+ dict(token='6789',
+ step=None,
+ data='other data')
+ ]))
+
+ # Now upgrade.
+ alembic.command.upgrade(alembic_cfg, '7c5b39d1ecc4')
+
+ token, steps, data = config.db.store.execute(
+ new_state_table.select().where(
+ new_state_table.c.token == '12345'
+ )).fetchone()
+ self.assertEqual(token, '12345')
+ self.assertEqual(steps, json.dumps(['some_step']))
+ self.assertEqual(data, 'whatever data')
+
+ token, steps, data = config.db.store.execute(
+ new_state_table.select().where(
+ new_state_table.c.token == '6789'
+ )).fetchone()
+ self.assertEqual(token, '6789')
+ self.assertEqual(steps, json.dumps([]))
+ self.assertEqual(data, 'other data')
+
+ def test_7c5b39d1ecc4_workflow_steps_downgrade(self):
+ old_state_table = sa.sql.table(
+ 'workflowstate',
+ sa.sql.column('token', SAUnicode),
+ sa.sql.column('step', SAUnicode),
+ sa.sql.column('data', SAUnicode)
+ )
+ new_state_table = sa.sql.table(
+ 'workflowstate',
+ sa.sql.column('token', SAUnicode),
+ sa.sql.column('steps', SAUnicode),
+ sa.sql.column('data', SAUnicode)
+ )
+ with transaction():
+ # Start at the revision.
+ alembic.command.downgrade(alembic_cfg, '7c5b39d1ecc4')
+ config.db.store.execute(new_state_table.insert().values([
+ dict(token='12345',
+ steps=json.dumps(['next_step', 'some_step']),
+ data='whatever data'),
+ dict(token='6789',
+ steps=json.dumps(['only_step']),
+ data='other data'),
+ dict(token='abcde',
+ steps=json.dumps([]),
+ data='another data')
+ ]))
+ # Now downgrade.
+ alembic.command.downgrade(alembic_cfg, '4bd95c99b2e7')
+
+ token, step, data = config.db.store.execute(
+ old_state_table.select().where(
+ old_state_table.c.token == '12345'
+ )).fetchone()
+ self.assertEqual(token, '12345')
+ self.assertEqual(step, 'some_step')
+ self.assertEqual(data, 'whatever data')
+
+ token, step, data = config.db.store.execute(
+ old_state_table.select().where(
+ old_state_table.c.token == '6789'
+ )).fetchone()
+ self.assertEqual(token, '6789')
+ self.assertEqual(step, 'only_step')
+ self.assertEqual(data, 'other data')
+
+ token, step, data = config.db.store.execute(
+ old_state_table.select().where(
+ old_state_table.c.token == 'abcde'
+ )).fetchone()
+ self.assertEqual(token, 'abcde')
+ self.assertEqual(step, None)
+ self.assertEqual(data, 'another data')