Пример #1
0
 def test_rollback_step_cmd(self):
     wd = WorkDirectory(self.work_dir)
     migr_ctx = create_migration_ctx(wd.get_migration_ctx_config())
     self.assertIsNone(migr_ctx.head)
     runner = CliRunner()
     wd.add_revision(
         Revision(gen_rev_id(),
                  "adding table foo",
                  datetime.now(),
                  upgrade_sql="create table test.foo (a string);",
                  downgrade_sql="drop table test.foo"))
     res = runner.invoke(upgrade)
     self.assertTrue(res.exit_code == 0)
     wd.add_revision(
         Revision(gen_rev_id(),
                  "adding table bar",
                  datetime.now(),
                  upgrade_sql="create table test.bar (a string);",
                  downgrade_sql="drop table test.bar"))
     res = runner.invoke(upgrade)
     self.assertTrue(res.exit_code == 0)
     self.assertIsNotNone(migr_ctx.head)
     self.assertTrue(len(migr_ctx.revisions) == 2)
     res = runner.invoke(rollback, ['-n', 2])
     self.assertIsNone(migr_ctx.head)
Пример #2
0
 def test_rollback_to_rev_id(self):
     wd = WorkDirectory(self.work_dir)
     migr_ctx = create_migration_ctx(wd.get_migration_ctx_config())
     self.assertIsNone(migr_ctx.head)
     one = gen_rev_id()
     two = gen_rev_id()
     three = gen_rev_id()
     revisions = [
         Revision(one,
                  "adding table foo",
                  datetime.now(),
                  upgrade_sql="create table test.foo (a string);",
                  downgrade_sql="drop table test.foo;"),
         Revision(two,
                  "adding table bar",
                  datetime.now(),
                  upgrade_sql="create table test.bar (a string);",
                  downgrade_sql="drop table test.bar;"),
         Revision(three,
                  "add column b foo",
                  datetime.now(),
                  upgrade_sql="alter table test.foo add column b string;",
                  downgrade_sql="alter table test.foo drop column b;")
     ]
     for rev in revisions:
         wd.add_revision(rev)
     runner = CliRunner()
     res = runner.invoke(upgrade)
     self.assertTrue(res.exit_code == 0)
     self.assertIsNotNone(migr_ctx.head)
     self.assertTrue(len(migr_ctx.revisions) == 3)
     res = runner.invoke(rollback, ['-r', two])
     self.assertTrue(res.exit_code == 0)
     self.assertTrue(len(migr_ctx.revisions) == 1)
 def test_ctx_revisions(self):
     wd = WorkDirectory(path=self.work_dir)
     ctx = create_migration_ctx(wd.get_migration_ctx_config())
     ctx.create_revisions_tbl()
     self.assertTrue(len(ctx.revisions) == 0)
     conn = pymonetdb.connect(self.db_name)
     sql = """insert into sys.mroll_revisions values ('{}', '{}', '{}'), ('{}', '{}', '{}');""".format(
         gen_rev_id(), "revision 1", datetime.now(), gen_rev_id(),
         "revision 2", datetime.now())
     conn.execute(sql)
     conn.commit()
     self.assertTrue(len(ctx.revisions) == 2)
 def test_ctx_add_revisions(self):
     wd = WorkDirectory(path=self.work_dir)
     ctx = create_migration_ctx(wd.get_migration_ctx_config())
     ctx.create_revisions_tbl()
     self.assertTrue(len(ctx.revisions) == 0)
     revisions = [
         Revision(gen_rev_id(),
                  "adding table foo",
                  datetime.now(),
                  upgrade_sql="create table test.foo (a string);",
                  downgrade_sql="drop table test.foo;"),
         Revision(gen_rev_id(),
                  "adding table bar",
                  datetime.now(),
                  upgrade_sql="create table test.bar (a string);",
                  downgrade_sql="drop table test.bar;")
     ]
     ctx.add_revisions(revisions)
     self.assertTrue(len(ctx.revisions) == 2)
Пример #5
0
 def test_upgrade_raise(self):
     wd = WorkDirectory(self.work_dir)
     migr_ctx = create_migration_ctx(wd.get_migration_ctx_config())
     self.assertIsNone(migr_ctx.head)
     wd.add_revision(
         Revision(gen_rev_id(), "adding table foo", datetime.now()))
     self.assertTrue(len(wd.revisions) == 1)
     runner = CliRunner()
     res = runner.invoke(upgrade)
     self.assertTrue(res.exit_code == 1)
 def test_migr_ctx_head(self):
     wd = WorkDirectory(path=self.work_dir)
     ctx = create_migration_ctx(wd.get_migration_ctx_config())
     ctx.create_revisions_tbl()
     self.assertIsNone(ctx.head)
     conn = pymonetdb.connect(self.db_name)
     sql = """insert into sys.mroll_revisions values ('{}', '{}', '{}')""".format(
         gen_rev_id(), "bla bla", datetime.now())
     conn.execute(sql)
     conn.commit()
     self.assertIsNotNone(ctx.head)
Пример #7
0
 def test_upgrade_num_command(self):
     # Test upgrade cmd with a step
     wd = WorkDirectory(self.work_dir)
     revisions = [
         Revision(gen_rev_id(),
                  "adding table foo",
                  datetime.now(),
                  upgrade_sql="create table test.foo (a string);",
                  downgrade_sql="drop table test.foo;"),
         Revision(gen_rev_id(),
                  "adding table bar",
                  datetime.now(),
                  upgrade_sql="create table test.bar (a string);",
                  downgrade_sql="drop table test.bar;")
     ]
     for rev in revisions:
         wd.add_revision(rev)
     self.assertTrue(len(wd.revisions) == 2)
     runner = CliRunner()
     res = runner.invoke(upgrade, ['-n', 1])
     self.assertTrue(res.exit_code == 0)
     migr_ctx = create_migration_ctx(wd.get_migration_ctx_config())
     self.assertIsNotNone(migr_ctx.head)
     self.assertTrue(len(migr_ctx.revisions) == 1)
Пример #8
0
 def test_show_applied_revisions(self):
     wd = WorkDirectory(self.work_dir)
     wd.add_revision(
         Revision(gen_rev_id(),
                  "adding table bar",
                  datetime.now(),
                  upgrade_sql="create table test.bar (a string);",
                  downgrade_sql="drop table test.bar"))
     self.assertTrue(len(wd.revisions) == 1)
     runner = CliRunner()
     res = runner.invoke(upgrade)
     self.assertTrue(res.exit_code == 0)
     res = runner.invoke(show, ['applied'])
     self.assertTrue(res.exit_code == 0)
     self.assertNotEqual(res.stdout, '')
Пример #9
0
    def test_get_all_upgrade_sql(self):
        for i in range(3):
            id_ = gen_rev_id()
            content = """
            -- identifiers used by mroll
            -- id={}
            -- description=add column
            -- ts=2020-05-04T23:14:37.498799
            -- migration:upgrade
                alter table foo add column b string;

            -- migration:downgrade
            """.format(id_)
            fn = os.path.join(self.work_dir, 'versions', "{}.sql".format(id_))
            with open(fn, 'w') as f:
                f.write(content)
        res = get_all_upgrade_sql(self.work_dir)
        self.assertNotEqual(res, '')
Пример #10
0
 def test_rollback_raises(self):
     wd = WorkDirectory(self.work_dir)
     migr_ctx = create_migration_ctx(wd.get_migration_ctx_config())
     self.assertIsNone(migr_ctx.head)
     runner = CliRunner()
     # add revison with no downgrade_sql
     wd.add_revision(
         Revision(
             gen_rev_id(),
             "adding table foo",
             datetime.now(),
             upgrade_sql="create table test.foo (a string);",
         ))
     res = runner.invoke(upgrade)
     self.assertTrue(res.exit_code == 0)
     self.assertIsNotNone(migr_ctx.head)
     self.assertTrue(len(migr_ctx.revisions) == 1)
     res = runner.invoke(rollback)
     self.assertNotEqual(res.exit_code, 0)
Пример #11
0
 def test_show_pending_revisions(self):
     wd = WorkDirectory(self.work_dir)
     wd.add_revision(
         Revision(gen_rev_id(),
                  "adding table bar",
                  datetime.now(),
                  upgrade_sql="create table test.bar (a string);",
                  downgrade_sql="drop table test.bar;"))
     self.assertTrue(len(wd.revisions) == 1)
     runner = CliRunner()
     res = runner.invoke(upgrade)
     self.assertTrue(res.exit_code == 0)
     migr_ctx = create_migration_ctx(wd.get_migration_ctx_config())
     self.assertIsNotNone(migr_ctx.head)
     self.assertTrue(len(migr_ctx.revisions) == 1)
     self.add_rev_cmd('add column a to bar')
     self.add_rev_cmd('add column a to baz')
     self.assertTrue(len(wd.revisions) == 3)
     res = runner.invoke(show, ['pending'])
     self.assertTrue(res.exit_code == 0)
Пример #12
0
 def test_rollback_default_cmd(self):
     # test rollback no cli options
     wd = WorkDirectory(self.work_dir)
     migr_ctx = create_migration_ctx(wd.get_migration_ctx_config())
     self.assertIsNone(migr_ctx.head)
     rev = Revision(gen_rev_id(),
                    "adding table foo",
                    datetime.now(),
                    upgrade_sql="create table test.foo (a string);",
                    downgrade_sql="drop table test.foo;")
     wd.add_revision(rev)
     self.assertTrue(len(wd.revisions) == 1)
     runner = CliRunner()
     res = runner.invoke(upgrade)
     self.assertTrue(res.exit_code == 0)
     self.assertIsNotNone(migr_ctx.head)
     self.assertTrue(len(migr_ctx.revisions) == 1)
     res = runner.invoke(rollback)
     self.assertTrue(res.exit_code == 0)
     self.assertIsNone(migr_ctx.head)
     self.assertTrue(len(migr_ctx.revisions) == 0)