summaryrefslogtreecommitdiff
path: root/src/mailman/database/tests/test_migrations.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/mailman/database/tests/test_migrations.py')
-rw-r--r--src/mailman/database/tests/test_migrations.py54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/mailman/database/tests/test_migrations.py b/src/mailman/database/tests/test_migrations.py
index 5b686d13b..104487350 100644
--- a/src/mailman/database/tests/test_migrations.py
+++ b/src/mailman/database/tests/test_migrations.py
@@ -32,10 +32,13 @@ from mailman.database.transaction import transaction
from mailman.database.types import Enum, SAUnicode
from mailman.interfaces.action import Action
from mailman.interfaces.cache import ICacheManager
+from mailman.interfaces.mailinglist import SubscriptionPolicy
from mailman.interfaces.member import MemberRole
from mailman.interfaces.template import ITemplateManager
from mailman.interfaces.usermanager import IUserManager
from mailman.testing.layers import ConfigLayer
+from mailman.workflows.subscription import ModerationSubscriptionPolicy
+from mailman.workflows.unsubscription import OpenUnsubscriptionPolicy
from warnings import catch_warnings, simplefilter
from zope.component import getUtility
@@ -594,3 +597,54 @@ class TestMigrations(unittest.TestCase):
self.assertEqual(token, 'abcde')
self.assertEqual(step, None)
self.assertEqual(data, 'another data')
+
+ def test_ccb9e28c44f4_mailinglist_sub_unsub_policies_downgrade(self):
+ # Downgrade to the tested revision.
+ alembic.command.downgrade(alembic_cfg, 'ccb9e28c44f4')
+ # Create our example list.
+ with transaction():
+ mlist = create_list('test@example.com')
+ mlist.subscription_policy = ModerationSubscriptionPolicy
+ mlist.unsubscription_policy = OpenUnsubscriptionPolicy
+ # Downgrade, should keep the policies, since they have a value in the
+ # SubscriptionPolicy enum.
+ alembic.command.downgrade(alembic_cfg, '7c5b39d1ecc4')
+ old_mlist_table = sa.sql.table(
+ 'mailinglist',
+ sa.sql.column('id', sa.Integer),
+ sa.sql.column('subscription_policy', sa.Integer),
+ sa.sql.column('unsubscription_policy', sa.Integer)
+ )
+ table_id, sub_policy, unsub_policy = config.db.store.execute(
+ old_mlist_table.select()).fetchone()
+ self.assertEqual(sub_policy, SubscriptionPolicy.moderate.value)
+ self.assertEqual(unsub_policy, SubscriptionPolicy.open.value)
+
+ def test_ccb9e28c44f4_mailinglist_sub_unsub_policies_upgrade(self):
+ old_mlist_table = sa.sql.table(
+ 'mailinglist',
+ sa.sql.column('id', sa.Integer),
+ sa.sql.column('subscription_policy', sa.Integer),
+ sa.sql.column('unsubscription_policy', sa.Integer)
+ )
+ with transaction():
+ # Downgrade to a revision below the one tested.
+ alembic.command.downgrade(alembic_cfg, '7c5b39d1ecc4')
+
+ config.db.store.execute(
+ old_mlist_table.insert().values(
+ subscription_policy=SubscriptionPolicy.moderate.value,
+ unsubscription_policy=SubscriptionPolicy.open.value)
+ )
+ # Upgrade and test that the new names and types are there.
+ alembic.command.upgrade(alembic_cfg, 'ccb9e28c44f4')
+ new_mlist_table = sa.sql.table(
+ 'mailinglist',
+ sa.sql.column('id', sa.Integer),
+ sa.sql.column('subscription_policy', SAUnicode),
+ sa.sql.column('unsubscription_policy', SAUnicode)
+ )
+ table_id, sub_policy, unsub_policy = config.db.store.execute(
+ new_mlist_table.select()).fetchone()
+ self.assertEqual(sub_policy, ModerationSubscriptionPolicy.name)
+ self.assertEqual(unsub_policy, OpenUnsubscriptionPolicy.name)