Wrote some (semi-silly) descriptions of each migration
[mediagoblin.git] / mediagoblin / tests / test_migrations.py
index 527655bcb5c3d43fd0e28f5fff7112a902ccc2fe..8e573f5a21d20a41e29ec621e22476cc465ce7db 100644 (file)
@@ -1,5 +1,5 @@
 # GNU MediaGoblin -- federated, autonomous media hosting
-# Copyright (C) 2011 Free Software Foundation, Inc
+# Copyright (C) 2011 MediaGoblin contributors.  See AUTHORS.
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU Affero General Public License as published by
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 
+from nose.tools import assert_raises
 from pymongo import Connection
 
 from mediagoblin.tests.tools import (
     install_fixtures_simple, assert_db_meets_expected)
-from mediagoblin.db.util import RegisterMigration, MigrationManager, ObjectId
+from mediagoblin.db.mongo.util import (
+    RegisterMigration, MigrationManager, ObjectId,
+    MissingCurrentMigration)
+from mediagoblin.db.mongo.migrations import add_table_field
 
 # This one will get filled with local migrations
 TEST_MIGRATION_REGISTRY = {}
@@ -39,12 +43,10 @@ def creature_add_magical_powers(database):
     Add lists of magical powers.
 
     This defaults to [], an empty list.  Since we haven't declared any
-    magical powers, all existing monsters should
+    magical powers, all existing monsters, setting to an empty list is
+    fine.
     """
-    database['creatures'].update(
-        {'magical_powers': {'$exists': False}},
-        {'$set': {'magical_powers': []}},
-        multi=True)
+    add_table_field(database, 'creatures', 'magical_powers', [])
 
 
 @RegisterMigration(2, TEST_MIGRATION_REGISTRY)
@@ -366,3 +368,34 @@ class TestMigrations(object):
         """
         self.empty_migration_manager.install_migration_version_if_missing()
         assert self.empty_migration_manager.database_current_migration() == 0
+
+    def test_migrations_to_run(self):
+        """
+        Make sure we get the right list of migrations to run
+        """
+        self.migration_manager.set_current_migration(0)
+
+        assert self.migration_manager.migrations_to_run() == [
+            (1, creature_add_magical_powers),
+            (2, creature_rename_num_legs_to_num_limbs),
+            (3, creature_remove_is_demon),
+            (4, level_exits_dict_to_list)]
+
+        self.migration_manager.set_current_migration(3)
+
+        assert self.migration_manager.migrations_to_run() == [
+            (4, level_exits_dict_to_list)]
+
+        self.migration_manager.set_current_migration(4)
+
+        assert self.migration_manager.migrations_to_run() == []
+
+
+    def test_no_migrations_raises_exception(self):
+        """
+        If we don't have the current migration set in the database,
+        this should error out.
+        """
+        assert_raises(
+            MissingCurrentMigration,
+            self.migration_manager.migrations_to_run)