From 55dcf0656932faf68ecb8e88e9dcb5ee54aab587 Mon Sep 17 00:00:00 2001 From: dhilipsiva Date: Sun, 5 Feb 2017 14:50:36 +0530 Subject: [PATCH] Hostscli --- tests/rules/test_hostscli.py | 65 ++++++++++++++++++++++++++++++++++++ thefuck/rules/hostscli.py | 37 ++++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 tests/rules/test_hostscli.py create mode 100644 thefuck/rules/hostscli.py diff --git a/tests/rules/test_hostscli.py b/tests/rules/test_hostscli.py new file mode 100644 index 00000000..1736d43e --- /dev/null +++ b/tests/rules/test_hostscli.py @@ -0,0 +1,65 @@ +#! /usr/bin/env python +# -*- coding: utf-8 -*- +# +# vim: fenc=utf-8 +# vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 +# +# + +""" +File name: test_hostscli.py +Author: dhilipsiva +Date created: 2017-02-05 +""" + +import pytest +from thefuck.rules.hostscli import no_command, need_sudo, no_website, \ + match, get_new_command +from tests.utils import Command + + +no_command = ''' +Usage: hostscli [OPTIONS] COMMAND [ARGS]... + +%s "invalid". +''' % no_command + +need_sudo = ''' +%s: + +"sudo" permissions are required to run this command. + +Please run the last command again with sudo +''' % need_sudo + + +no_website = ''' +%s: + +No Domain list found for website: a_website_that_does_not_exist + +Please raise a Issue here: https://github.com/dhilipsiva/hostscli/issues/new +if you think we should add domains for this website. + +type `hostscli websites` to see a list of websites that you can block/unblock +''' % no_website + + +@pytest.mark.parametrize('command', [ + Command('hostscli invalid', stderr=no_command)]) +def test_match(command): + assert match(command) + + +@pytest.mark.parametrize('command, result', [ + (Command( + 'hostscli invalid', stderr=no_command), ['hostscli --help']), + (Command( + 'hostscli block test', stderr=need_sudo), + ['sudo hostscli block test']), + (Command( + 'sudo hostscli block a_website_that_does_not_exist', + stderr=no_website), + ['hostscli websites'])]) +def test_get_new_command(command, result): + assert get_new_command(command) == result diff --git a/thefuck/rules/hostscli.py b/thefuck/rules/hostscli.py new file mode 100644 index 00000000..7f3bd6fb --- /dev/null +++ b/thefuck/rules/hostscli.py @@ -0,0 +1,37 @@ +#! /usr/bin/env python +# -*- coding: utf-8 -*- +# +# vim: fenc=utf-8 +# vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 +# +# + +""" +File name: hostscli.py +Author: dhilipsiva +Date created: 2017-02-05 +""" + +from thefuck.utils import for_app + +no_command = "Error: No such command" +need_sudo = "hostscli.errors.SudoRequiredError" +no_website = "hostscli.errors.WebsiteImportError" + + +@for_app("hostscli") +def match(command): + errors = [no_command, need_sudo, no_website] + for error in errors: + if error in command.stderr: + return True + return False + + +def get_new_command(command): + if no_website in command.stderr: + return ['hostscli websites'] + if need_sudo in command.stderr: + return ['sudo {}'.format(command.script)] + if no_command in command.stderr: + return ['hostscli --help']