From 6111523034edcd8d78216ee6aa84acc383a87ee4 Mon Sep 17 00:00:00 2001 From: Abraham Chan Date: Tue, 6 Jul 2021 03:52:54 -0700 Subject: [PATCH] #1210: Add rule 'rails_migrations_pending' * Add rule 'rails_migrations_pending' * Update thefuck/rules/rails_migrations_pending.py Co-authored-by: Pablo Aguiar * Add initial command to corrected command Co-authored-by: Pablo Aguiar --- README.md | 1 + tests/rules/test_rails_migrations_pending.py | 46 ++++++++++++++++++++ thefuck/rules/rails_migrations_pending.py | 14 ++++++ 3 files changed, 61 insertions(+) create mode 100644 tests/rules/test_rails_migrations_pending.py create mode 100644 thefuck/rules/rails_migrations_pending.py diff --git a/README.md b/README.md index 58cfe77..ba83ab0 100644 --- a/README.md +++ b/README.md @@ -310,6 +310,7 @@ following rules are enabled by default: * `python_module_error` – fixes ModuleNotFoundError by trying to `pip install` that module; * `quotation_marks` – fixes uneven usage of `'` and `"` when containing args'; * `path_from_history` – replaces not found path with a similar absolute path from history; +* `rails_migrations_pending` – runs pending migrations; * `react_native_command_unrecognized` – fixes unrecognized `react-native` commands; * `remove_shell_prompt_literal` – remove leading shell prompt symbol `$`, common when copying commands from documentations; * `remove_trailing_cedilla` – remove trailing cedillas `รง`, a common typo for European keyboard layouts; diff --git a/tests/rules/test_rails_migrations_pending.py b/tests/rules/test_rails_migrations_pending.py new file mode 100644 index 0000000..0600234 --- /dev/null +++ b/tests/rules/test_rails_migrations_pending.py @@ -0,0 +1,46 @@ +import pytest +from thefuck.rules.rails_migrations_pending import match, get_new_command +from thefuck.types import Command + +output_env_development = ''' +Migrations are pending. To resolve this issue, run: + + rails db:migrate RAILS_ENV=development +''' +output_env_test = ''' +Migrations are pending. To resolve this issue, run: + + bin/rails db:migrate RAILS_ENV=test +''' + + +@pytest.mark.parametrize( + "command", + [ + Command("", output_env_development), + Command("", output_env_test), + ], +) +def test_match(command): + assert match(command) + + +@pytest.mark.parametrize( + "command", + [ + Command("Environment data not found in the schema. To resolve this issue, run: \n\n", ""), + ], +) +def test_not_match(command): + assert not match(command) + + +@pytest.mark.parametrize( + "command, new_command", + [ + (Command("bin/rspec", output_env_development), "rails db:migrate RAILS_ENV=development && bin/rspec"), + (Command("bin/rspec", output_env_test), "bin/rails db:migrate RAILS_ENV=test && bin/rspec"), + ], +) +def test_get_new_command(command, new_command): + assert get_new_command(command) == new_command diff --git a/thefuck/rules/rails_migrations_pending.py b/thefuck/rules/rails_migrations_pending.py new file mode 100644 index 0000000..866c505 --- /dev/null +++ b/thefuck/rules/rails_migrations_pending.py @@ -0,0 +1,14 @@ +import re +from thefuck.shells import shell + + +SUGGESTION_REGEX = r"To resolve this issue, run:\s+(.*?)\n" + + +def match(command): + return "Migrations are pending. To resolve this issue, run:" in command.output + + +def get_new_command(command): + migration_script = re.search(SUGGESTION_REGEX, command.output).group(1) + return shell.and_(migration_script, command.script)