summaryrefslogtreecommitdiff
path: root/tests/migrations/test_commands.py
diff options
context:
space:
mode:
authorJacob Walls <jacobtylerwalls@gmail.com>2021-12-31 10:30:48 -0500
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2022-01-03 12:30:51 +0100
commit0ab58c120939093fea90822f376e1866fc714d1f (patch)
tree83c0412efaf60c2715d5c3ffe8cd9e67dccb1fea /tests/migrations/test_commands.py
parent03a648811615cb623affc2d79dccd4b05919319e (diff)
Refs #29026 -- Allowed customizing InteractiveMigrationQuestioner's prompt destination.
Previously, the questioner did not obey the value of stdout provided to the command.
Diffstat (limited to 'tests/migrations/test_commands.py')
-rw-r--r--tests/migrations/test_commands.py49
1 files changed, 28 insertions, 21 deletions
diff --git a/tests/migrations/test_commands.py b/tests/migrations/test_commands.py
index bf78b60a85..ef5db241d6 100644
--- a/tests/migrations/test_commands.py
+++ b/tests/migrations/test_commands.py
@@ -1304,7 +1304,15 @@ class MakeMigrationsTests(MigrationTestBase):
# Monkeypatch interactive questioner to auto reject
with mock.patch('builtins.input', mock.Mock(return_value='N')):
with self.temporary_migration_module(module="migrations.test_migrations_conflict") as migration_dir:
- call_command("makemigrations", "migrations", name="merge", merge=True, interactive=True, verbosity=0)
+ with captured_stdout():
+ call_command(
+ 'makemigrations',
+ 'migrations',
+ name='merge',
+ merge=True,
+ interactive=True,
+ verbosity=0,
+ )
merge_file = os.path.join(migration_dir, '0003_merge.py')
self.assertFalse(os.path.exists(merge_file))
@@ -1766,6 +1774,10 @@ class MakeMigrationsTests(MigrationTestBase):
' - remove field silly_field from author\n'
' - add field rating to author\n'
' - create model book\n'
+ '\n'
+ 'merging will only work if the operations printed above do not conflict\n'
+ 'with each other (working on different fields or models)\n'
+ 'should these migration branches be merged? [y/n] '
)
def test_makemigrations_with_custom_name(self):
@@ -1886,30 +1898,25 @@ class MakeMigrationsTests(MigrationTestBase):
"It is impossible to add the field 'creation_date' with "
"'auto_now_add=True' to entry without providing a default. This "
"is because the database needs something to populate existing "
- "rows.\n\n"
+ "rows.\n"
" 1) Provide a one-off default now which will be set on all "
"existing rows\n"
" 2) Quit and manually define a default value in models.py."
)
# Monkeypatch interactive questioner to auto accept
- with mock.patch('django.db.migrations.questioner.sys.stdout', new_callable=io.StringIO) as prompt_stdout:
- out = io.StringIO()
- with self.temporary_migration_module(module='migrations.test_auto_now_add'):
- call_command('makemigrations', 'migrations', interactive=True, stdout=out)
- output = out.getvalue()
- prompt_output = prompt_stdout.getvalue()
- self.assertIn(input_msg, prompt_output)
- self.assertIn(
- 'Please enter the default value as valid Python.',
- prompt_output,
- )
- self.assertIn(
- "Accept the default 'timezone.now' by pressing 'Enter' or "
- "provide another value.",
- prompt_output,
- )
- self.assertIn("Type 'exit' to exit this prompt", prompt_output)
- self.assertIn("Add field creation_date to entry", output)
+ prompt_stdout = io.StringIO()
+ with self.temporary_migration_module(module='migrations.test_auto_now_add'):
+ call_command('makemigrations', 'migrations', interactive=True, stdout=prompt_stdout)
+ prompt_output = prompt_stdout.getvalue()
+ self.assertIn(input_msg, prompt_output)
+ self.assertIn('Please enter the default value as valid Python.', prompt_output)
+ self.assertIn(
+ "Accept the default 'timezone.now' by pressing 'Enter' or provide "
+ "another value.",
+ prompt_output,
+ )
+ self.assertIn("Type 'exit' to exit this prompt", prompt_output)
+ self.assertIn("Add field creation_date to entry", prompt_output)
@mock.patch('builtins.input', return_value='2')
def test_makemigrations_auto_now_add_interactive_quit(self, mock_input):
@@ -1960,7 +1967,7 @@ class MakeMigrationsTests(MigrationTestBase):
input_msg = (
f'Callable default on unique field book.created will not generate '
f'unique values upon migrating.\n'
- f'Please choose how to proceed:\n\n'
+ f'Please choose how to proceed:\n'
f' 1) Continue making this migration as the first step in writing '
f'a manual migration to generate unique values described here: '
f'https://docs.djangoproject.com/en/{version}/howto/'