Back to Repositories

Testing Hostscli Command Validation and Error Handling in TheFuck

This test suite validates the hostscli rule functionality in TheFuck project, specifically focusing on handling non-existent website scenarios and command suggestions. The tests ensure proper error handling and user guidance when attempting to block undefined domains.

Test Coverage Overview

The test suite provides comprehensive coverage of the hostscli rule’s error handling capabilities.

Key areas tested include:
  • Website existence validation
  • Error message formatting
  • Command suggestion functionality
Edge cases focus on non-existent website handling and proper suggestion of the ‘hostscli websites’ command as a fallback.

Implementation Analysis

The testing approach utilizes pytest’s parametrize decorator to efficiently test multiple scenarios with minimal code duplication.

Technical implementation details:
  • Command object usage for input simulation
  • Parametrized test cases for different command variations
  • Direct assertion testing for command matching and suggestions

Technical Details

Testing infrastructure includes:
  • pytest framework for test organization
  • Custom Command type for input handling
  • Mock error messages and command responses
  • Integration with TheFuck’s rule system

Best Practices Demonstrated

The test suite exemplifies several testing best practices in Python.

Notable practices include:
  • Separation of test cases using pytest fixtures
  • Clear test function naming conventions
  • Efficient test data organization
  • Focused unit test scope

nvbn/thefuck

tests/rules/test_hostscli.py

            
import pytest
from thefuck.rules.hostscli import no_website, get_new_command, match
from thefuck.types import Command

no_website_long = '''
{}:

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
'''.format(no_website)


@pytest.mark.parametrize('command', [
    Command('hostscli block a_website_that_does_not_exist', no_website_long)])
def test_match(command):
    assert match(command)


@pytest.mark.parametrize('command, result', [(
    Command('hostscli block a_website_that_does_not_exist', no_website_long),
    ['hostscli websites'])])
def test_get_new_command(command, result):
    assert get_new_command(command) == result