예제 #1
0
  def test_load_migration_object(self):
    db = MigrationDb(directory=self.mock_migrations_dir)
    db.warn = WarningsMocker()

    for name in ['001_foo', '0001', '001', '01', '1', 1]:
      self.assert_attrs(db.load_migration_object(name),
        name = '001_foo',
        dev = False,
        sql_up = "INSERT INTO mock VALUES (1)",
      )

    for name in ['002_bar', '0002', '002', '02', '2', 2]:
      self.assert_attrs(db.load_migration_object(name),
        name = '002_bar',
        dev = False,
        sql_up = "INSERT INTO mock VALUES (2)",
      )

    for name in ['005_DEV_hello', '0005', '005', '05', '5', 5]:
      self.assert_attrs(db.load_migration_object(name),
        name = '005_DEV_hello',
        dev = True,
        sql_up = "INSERT INTO mock VALUES (5)",
      )

    for name in ['3', '02_foo', '2_foo', 3]:
      self.assert_raises(NoSuchMigrationError, lambda: db.load_migration_object(name))
예제 #2
0
  def test_find_unique_migration_by_number(self):
    db = MigrationDb(directory=self.mock_migrations_dir)
    db.warn = WarningsMocker()

    self.assert_equal("001_foo", db.find_unique_migration_by_number(1))
    self.assert_equal("002_bar", db.find_unique_migration_by_number(2))
    self.assert_equal(None, db.find_unique_migration_by_number(3))
    self.assert_raises(AmbiguousMigrationNameError, lambda: db.find_unique_migration_by_number(9))
예제 #3
0
 def test_migrations_can_be_initialized_from_directory(self):
   db = MigrationDb(directory=self.mock_migrations_dir)
   db.warn = WarningsMocker()
   
   self.assert_equal([
       "001_foo",
       "002_bar",
       "005_DEV_hello",
       "009_one",
       "09_two",
     ], db.list()
   )
예제 #4
0
 def test_dup_warnings(self):
   db = MigrationDb()
   db.warn = WarningsMocker()
   db.populate_migrations_from_ls([
     "17_foo.py",
     "017_bar.py",
     "0018_foo.py",
     "00018_foo.py",
     "180_hello.py",
   ])
   self.assert_equal(
     [
     u'There are multiple migrations with the same number 17: 017_bar, 17_foo',
     u'There are multiple migrations with the same number 18: 00018_foo, 0018_foo'
     ],
     db.warn.warnings
   )
예제 #5
0
  def test_load_migration_object_with_dups(self):
    db = MigrationDb(directory=self.mock_migrations_dir)
    db.warn = WarningsMocker()

    self.assert_attrs(db.load_migration_object('009_one'),
      name = '009_one',
      dev = False,
      sql_up = "INSERT INTO mock VALUES (9, 1)",
    )

    self.assert_attrs(db.load_migration_object('09_two'),
      name = '09_two',
      dev = False,
      sql_up = "INSERT INTO mock VALUES (9, 2)",
    )

    for name in ['0009', '009', '09', '9', 9]:
      self.assert_raises(AmbiguousMigrationNameError, lambda: db.load_migration_object(name))
예제 #6
0
    def test_when_doing_something_then_loggged(self):
        db = MigrationDb(directory=self.mock_migrations_dir)
        db.warn = WarningsMocker()
        si = MigrationState(migration_db=db, dev=True)
        si.init()

        si.apply('001_foo')
        si.mark_as_unapplied('001_foo')
        si.apply('001_foo')
        si.mark_as_applied('005_omg')
        si.unapply('001_foo')

        self.assert_equal([
            ("apply", "001_foo", "success"),
            ("mark_as_unapplied", "001_foo", "success"),
            ("apply", "001_foo", "success"),
            ("mark_as_applied", "005_omg", "success"),
            ("unapply", "001_foo", "success"),
        ], [row[:3] for row in get_log()])
        self.assert_equal(True, isinstance(get_log()[0][3], datetime))
예제 #7
0
    def test_when_doing_something_then_loggged(self):
        db = MigrationDb(directory=self.mock_migrations_dir)
        db.warn = WarningsMocker()
        si = MigrationState(migration_db=db, dev=True)
        si.init()

        si.apply("001_foo")
        si.mark_as_unapplied("001_foo")
        si.apply("001_foo")
        si.mark_as_applied("005_omg")
        si.unapply("001_foo")

        self.assert_equal(
            [
                ("apply", "001_foo", "success"),
                ("mark_as_unapplied", "001_foo", "success"),
                ("apply", "001_foo", "success"),
                ("mark_as_applied", "005_omg", "success"),
                ("unapply", "001_foo", "success"),
            ],
            [row[:3] for row in get_log()],
        )
        self.assert_equal(True, isinstance(get_log()[0][3], datetime))
예제 #8
0
 def test_migration_path(self):
   db = MigrationDb(directory=self.mock_migrations_dir)
   db.warn = WarningsMocker()
   
   self.assert_equal(self.mock_migrations_dir + '/010_foo.py', db.migration_path('foo'))