fix the error thrown, unit test for it, and add string explanations

This commit is contained in:
Isaac 2023-05-06 11:25:15 -07:00
parent 77dbb5c499
commit aa564ac5fe
No known key found for this signature in database
GPG Key ID: E69FB5A841448A48
2 changed files with 23 additions and 14 deletions

View File

@ -136,7 +136,7 @@ def exact_options_completion(action: Action):
if has_unknown_required_param_options(action):
return f'''\ncomplete -c borgmatic -x -n "__borgmatic_last_arg {args}"'''
raise RuntimeError(
raise ValueError(
f'Unexpected action: {action} passes has_exact_options but has no choices produced'
)

View File

@ -5,6 +5,7 @@ from typing import Tuple
import pytest
from borgmatic.commands.completion import (
exact_options_completion,
has_choice_options,
has_exact_options,
has_file_options,
@ -89,32 +90,40 @@ test_data: list[TestCase] = [
@pytest.mark.parametrize('action, option_type', test_data)
def test_has_file_options_detects_file_options(action: Action, option_type: OptionType):
assert has_file_options(action) == option_type.file
# if has_file_options(action) was true, has_exact_options(action) should also be true
if option_type.file:
assert has_exact_options(action)
assert (
has_file_options(action) == option_type.file
), f'Action: {action} should be file={option_type.file}'
@pytest.mark.parametrize('action, option_type', test_data)
def test_has_choice_options_detects_choice_options(action: Action, option_type: OptionType):
assert has_choice_options(action) == option_type.choice
# if has_choice_options(action) was true, has_exact_options(action) should also be true
if option_type.choice:
assert has_exact_options(action)
assert (
has_choice_options(action) == option_type.choice
), f'Action: {action} should be choice={option_type.choice}'
@pytest.mark.parametrize('action, option_type', test_data)
def test_has_unknown_required_param_options_detects_unknown_required_param_options(
action: Action, option_type: OptionType
):
assert has_unknown_required_param_options(action) == option_type.unknown_required
# if has_unknown_required_param_options(action) was true, has_exact_options(action) should also be true
if option_type.unknown_required:
assert has_exact_options(action)
assert (
has_unknown_required_param_options(action) == option_type.unknown_required
), f'Action: {action} should be unknown_required={option_type.unknown_required}'
@pytest.mark.parametrize('action, option_type', test_data)
def test_has_exact_options_detects_exact_options(action: Action, option_type: OptionType):
assert has_exact_options(action) == (
option_type.file or option_type.choice or option_type.unknown_required
)
), f'Action: {action} should have exact options given {option_type}'
@pytest.mark.parametrize('action, option_type', test_data)
def test_produce_exact_options_completion(action: Action, option_type: OptionType):
try:
completion = exact_options_completion(action)
assert (
type(completion) == str
), f'Completion should be a string, got {completion} of type {type(completion)}'
except ValueError as value_error:
assert False, f'exact_options_completion raised ValueError: {value_error}'