def test_bad_ref(self):
     unmigrate = UnmigrateCommand()
     unmigrate.from_argv = True  # Need to skip argv check
     with self.assertRaises(CommandError) as ctx:
         call_command(unmigrate,
                      "hopefully-unexisting-ref-in-my-own-git-repo")
     self.assertTrue(str(ctx.exception).startswith("Git says:"))
 def test_migration_zero(self):
     unmigrate = UnmigrateCommand()
     unmigrate.from_argv = True  # Need to skip argv check
     with StringIO() as stdout:
         call_command(
             unmigrate, MIGRATION_ZERO_COMMIT, dry_run=True, no_color=True, stdout=stdout
         )  # It's required to strip colored output
         stdout.seek(0)
         self.assertEqual(stdout.read().strip(), "myapp zero")
 def test_full_unmigrate_zero(self):
     unmigrate = UnmigrateCommand()
     unmigrate.from_argv = True  # Need to skip argv check
     with StringIO() as stdout:
         call_command(unmigrate, MIGRATION_ZERO_COMMIT, stdout=stdout)
         stdout.seek(0)
         self.assertTrue("Unapplying" in stdout.read())
     with StringIO() as stdout:
         call_command("migrate", stdout=stdout)
         stdout.seek(0)
         self.assertTrue("Applying" in stdout.read())
 def test_full_unmigrate_by_commit(self):
     unmigrate = UnmigrateCommand()
     unmigrate.from_argv = True  # Need to skip argv check
     for commit, expected_migrations in COMMITS.items():
         expected_migrations.sort()  # We know tuple-sorting our migrations yields chronological order
         expected_parents = []
         if expected_migrations:
             expected_parents = PARENTS[expected_migrations[0]]
         with StringIO() as stdout:
             call_command(unmigrate, commit, stdout=stdout)
             stdout.seek(0)
             self.assertTrue(not expected_parents or "Unapplying" in stdout.read())
         with StringIO() as stdout:
             call_command("migrate", stdout=stdout)
             stdout.seek(0)
             self.assertTrue(not expected_parents or "Applying" in stdout.read())
 def test_migration_parents(self):
     unmigrate = UnmigrateCommand()
     unmigrate.from_argv = True  # Need to skip argv check
     for commit, expected_migrations in COMMITS.items():
         expected_migrations.sort()  # We know tuple-sorting our migrations yields chronological order
         expected_parents = []
         if expected_migrations:
             expected_parents = PARENTS[expected_migrations[0]]
         with StringIO() as stdout:
             call_command(
                 unmigrate, commit, dry_run=True, no_color=True, stdout=stdout
             )  # It's required to strip colored output, skipping verbosity check on purpose
             stdout.seek(0)
             self.assertEqual(
                 set(stdout.read().strip().splitlines()), set(["{0} {1}".format(*x) for x in expected_parents])
             )
 def test_debug_with_danger(self):
     unmigrate = UnmigrateCommand()
     unmigrate.from_argv = True  # Need to skip argv check
     call_command(unmigrate, danger=True)
 def test_debug(self):
     unmigrate = UnmigrateCommand()
     unmigrate.from_argv = True  # Need to skip argv check
     call_command(unmigrate, dry_run=True)