Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -303,6 +303,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;
Expand Down
46 changes: 46 additions & 0 deletions tests/rules/test_rails_migrations_pending.py
Original file line number Diff line number Diff line change
@@ -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
14 changes: 14 additions & 0 deletions thefuck/rules/rails_migrations_pending.py
Original file line number Diff line number Diff line change
@@ -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)