def test_boolean_processor_exception():
    processor = BooleanProcessor(true_values=['Yes'], false_values=['No'])

    with pytest.raises(ColumnError) as exc_info:
        processor('I do not know.')
    assert exc_info.value.messages == [
        "It is expected one of values: ['Yes', 'No']"
    ]
def test_boolean_processor(value, expected_value):
    processor = BooleanProcessor()

    assert processor(value) is expected_value
def test_boolean_processor_custom_values(value, expected_value):
    processor = BooleanProcessor(true_values=['True'], false_values=['False'])

    assert processor(value) is expected_value
            1: 'First',
            2: 'Second'
        }, IntegerProcessor(), 'Second'),
        (
            ' 31.12.2020 ',
            {
                datetime.date(2020, 12, 31): 'New Year',
                datetime.date(2020, 11, 11): 'typical day',
            },
            DateProcessor(formats=['%d.%m.%Y']),
            'New Year',
        ),
        ('True', {
            True: 'ok',
            False: 'fail'
        }, BooleanProcessor(), 'ok'),
    ),
)
def test_choice_processor(value, choices, raw_value_processor, expected_value):
    processor = ChoiceProcessor(choices=choices,
                                raw_value_processor=raw_value_processor)

    assert processor(value) == expected_value


@pytest.mark.parametrize(
    'value, choices, raw_value_processor, expected_error_message',
    (
        ('3', {
            '1': 'First',
            '2': 'Second'