From d9a83d597ee5aa510cf1aaa086e2fc3f1d7ee4c6 Mon Sep 17 00:00:00 2001 From: Huu Nguyen Date: Thu, 19 Jun 2014 16:50:01 -0700 Subject: [1.7.x] Fixed #22862 -- Added --noinput option to makemigrations. Thanks artortenburger for the report. Backport of fbb684d95e from master --- tests/migrations/test_commands.py | 47 ++++++++++++++++++++++++++------------- 1 file changed, 32 insertions(+), 15 deletions(-) (limited to 'tests') diff --git a/tests/migrations/test_commands.py b/tests/migrations/test_commands.py index c223b5f489..7895259ccd 100644 --- a/tests/migrations/test_commands.py +++ b/tests/migrations/test_commands.py @@ -231,19 +231,6 @@ class MakeMigrationsTests(MigrationTestBase): with self.assertRaises(CommandError): call_command("makemigrations") - @override_system_checks([]) - @override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations_conflict"}) - def test_makemigrations_merge_basic(self): - """ - Makes sure that makemigrations doesn't error if you ask for - merge mode with a conflict present. Doesn't test writing of the merge - file, as that requires temp directories. - """ - try: - call_command("makemigrations", merge=True, verbosity=0) - except CommandError: - self.fail("Makemigrations errored in merge mode with conflicts") - @override_system_checks([]) @override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations"}) def test_makemigrations_merge_no_conflict(self): @@ -386,13 +373,18 @@ class MakeMigrationsTests(MigrationTestBase): @override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations_conflict"}) def test_makemigrations_handle_merge(self): """ - Makes sure that makemigrations properly merges the conflicting migrations. + Makes sure that makemigrations properly merges the conflicting migrations with --noinput. """ stdout = six.StringIO() - call_command("makemigrations", "migrations", merge=True, stdout=stdout) + call_command("makemigrations", "migrations", merge=True, interactive=False, stdout=stdout) self.assertIn("Merging migrations", stdout.getvalue()) self.assertIn("Branch 0002_second", stdout.getvalue()) self.assertIn("Branch 0002_conflicting_second", stdout.getvalue()) + merge_file = os.path.join(self.test_dir, 'test_migrations_conflict', '0003_merge.py') + self.assertTrue(os.path.exists(merge_file)) + os.remove(merge_file) + self.assertFalse(os.path.exists(merge_file)) + self.assertIn("Created new merge migration", stdout.getvalue()) @override_system_checks([]) @override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations_no_default"}) @@ -469,3 +461,28 @@ class MakeMigrationsTests(MigrationTestBase): self.assertTrue(os.path.isfile(os.path.join(self.test_dir, "test_migrations_path_doesnt_exist", "foo", "bar", "0001_initial.py"))) + + @override_system_checks([]) + @override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations_conflict"}) + def test_makemigrations_interactive_by_default(self): + """ + Makes sure that the user is prompted to merge by default if there are + conflicts and merge is True. Answer negative to differentiate it from + behavior when --noinput is specified. + """ + # Monkeypatch interactive questioner to auto reject + old_input = questioner.input + questioner.input = lambda _: "N" + stdout = six.StringIO() + merge_file = os.path.join(self.test_dir, 'test_migrations_conflict', '0003_merge.py') + try: + call_command("makemigrations", "migrations", merge=True, stdout=stdout) + # This will fail if interactive is False by default + self.assertFalse(os.path.exists(merge_file)) + except CommandError: + self.fail("Makemigrations failed while running interactive questioner") + finally: + questioner.input = old_input + if os.path.exists(merge_file): + os.remove(merge_file) + self.assertNotIn("Created new merge migration", stdout.getvalue()) -- cgit v1.3