diff --git a/tests/rules/test_systemctl.py b/tests/rules/test_systemctl.py new file mode 100644 index 00000000..8c8901e8 --- /dev/null +++ b/tests/rules/test_systemctl.py @@ -0,0 +1,18 @@ +import pytest +from thefuck.rules.systemctl import match, get_new_command +from tests.utils import Command + + + +def test_match(): + assert match(Command('systemctl nginx start', stderr='Unknown operation \'nginx\'.'), None) + assert match(Command('sudo systemctl nginx start', stderr='Unknown operation \'nginx\'.'), None) + assert not match(Command('systemctl start nginx'), None) + assert not match(Command('systemctl start nginx'), None) + assert not match(Command('sudo systemctl nginx', stderr='Unknown operation \'nginx\'.'), None) + assert not match(Command('systemctl nginx', stderr='Unknown operation \'nginx\'.'), None) + assert not match(Command('systemctl start wtf', stderr='Failed to start wtf.service: Unit wtf.service failed to load: No such file or directory.'), None) + +def test_get_new_command(): + assert get_new_command(Command('systemctl nginx start'), None) == "systemctl start nginx" + assert get_new_command(Command('sudo systemctl nginx start'), None) == "sudo systemctl start nginx" diff --git a/thefuck/rules/systemctl.py b/thefuck/rules/systemctl.py new file mode 100644 index 00000000..6065abc5 --- /dev/null +++ b/thefuck/rules/systemctl.py @@ -0,0 +1,16 @@ +""" +The confusion in systemctl's param order is massive +""" +from thefuck.utils import sudo_support + +@sudo_support +def match(command, settings): + #Catches 'Unknown operation 'service'.' when executing systemctl with misordered arguments + cmd = command.script.split() + return ('systemctl' in command.script) and ('Unknown operation \'' in command.stderr) and (len(cmd) - cmd.index('systemctl') == 3); + +@sudo_support +def get_new_command(command, settings): + cmd = command.script.split() + cmd[len(cmd)-1], cmd[len(cmd)-2] = cmd[len(cmd)-2], cmd[len(cmd)-1] + return ' '.join(cmd)