def test_given_analyzer_result_with_an_incorrect_text_positions_then_we_fail(
        original_text, start, end):
    engine = AnonymizerEngine()
    analyzer_result = AnalyzerResult("type", start, end, 0.5)
    err_msg = f"Invalid analyzer result, start: {start} and end: " \
              f"{end}, while text length is only 11."
    with pytest.raises(InvalidParamException, match=err_msg):
        engine.anonymize(original_text, [analyzer_result], {})
def test_given_default_anonymizer_then_we_use_it():
    engine = AnonymizerEngine()
    text = "please REPLACE ME."
    analyzer_result = AnalyzerResult("SSN", 7, 17, 0.8)
    anonymizer_config = AnonymizerConfig("replace",
                                         {"new_value": "and thank you"})
    result = engine.anonymize(text, [analyzer_result],
                              {"DEFAULT": anonymizer_config})
    assert result == "please and thank you."
def test_given_none_as_anonymziers_list_then_we_fall_to_default():
    engine = AnonymizerEngine()
    text = "please REPLACE ME."
    analyzer_result = AnalyzerResult("SSN", 7, 17, 0.8)
    result = engine.anonymize(text, [analyzer_result])
    assert result == "please <SSN>."
def test_given_empty_text_to_engine_then_we_fail():
    engine = AnonymizerEngine()
    analyzer_result = AnalyzerResult("SSN", 0, 1, 0.5)
    with pytest.raises(InvalidParamException,
                       match="Invalid input, text can not be empty"):
        engine.anonymize("", [analyzer_result], {})