Ejemplo n.º 1
0
def test_given_encrypt_called_then_decrypt_returns_the_original_encrypted_text(
):
    text_for_encryption = "text_for_encryption"
    key = "1111111111111111"
    anonymize_request = {
        "text":
        text_for_encryption,
        "anonymizers": {
            "DEFAULT": {
                "type": "encrypt",
                "key": key
            }
        },
        "analyzer_results": [{
            "start": 0,
            "end": len(text_for_encryption),
            "score": 0.8,
            "entity_type": "NAME",
        }],
    }
    _, anonymize_response_content = anonymize(json.dumps(anonymize_request))
    encrypted_text = json.loads(anonymize_response_content)["text"]
    decrypt_request = {"text": encrypted_text, "key": key}

    _, decrypt_response_content = decrypt(json.dumps(decrypt_request))

    decrypted_text = json.loads(decrypt_response_content)["result"]
    assert encrypted_text != text_for_encryption
    assert decrypted_text == text_for_encryption
Ejemplo n.º 2
0
def test_given_anonymize_called_with_valid_request_then_expected_valid_response_returned(
):
    request_body = """
    {
        "text": "hello world, my name is Jane Doe. My number is: 034453334",
        "anonymizers": {
            "DEFAULT": { "type": "replace", "new_value": "ANONYMIZED" },
            "PHONE_NUMBER": { "type": "mask", "masking_char": "*", "chars_to_mask": 4, "from_end": true }
        },
        "analyzer_results": [
            { "start": 24, "end": 32, "score": 0.8, "entity_type": "NAME" },
            { "start": 24, "end": 28, "score": 0.8, "entity_type": "FIRST_NAME" },
            { "start": 29, "end": 32, "score": 0.6, "entity_type": "LAST_NAME" },
            { "start": 48, "end": 57,  "score": 0.95,
                "entity_type": "PHONE_NUMBER" }
        ]
    }
    """

    response_status, response_content = anonymize(request_body)

    expected_response = (
        """{"text": "hello world, my name is ANONYMIZED. My number is: 03445****", "items": [{"anonymizer": "mask", "entity_type": "PHONE_NUMBER", "start": 50, "end": 59, "anonymized_text": "03445****"}, {"anonymizer": "replace", "entity_type": "NAME", "start": 24, "end": 34, "anonymized_text": "ANONYMIZED"}]}"""
    )
    assert response_status == 200
    assert equal_json_strings(expected_response, response_content)
Ejemplo n.º 3
0
def test_given_encrypt_called_then_decrypt_returns_the_original_encrypted_text(
):
    text_for_encryption = "Lorem Ipsum is a Software Engineer"
    key = "1111111111111111"
    anonymize_request = {
        "text":
        text_for_encryption,
        "anonymizers": {
            "DEFAULT": {
                "type": "encrypt",
                "key": key
            },
            "TITLE": {
                "type": "encrypt",
                "key": "2222222222222222"
            }
        },
        "analyzer_results": [{
            "start": 0,
            "end": 12,
            "score": 0.8,
            "entity_type": "NAME",
        }, {
            "start": 18,
            "end": len(text_for_encryption),
            "score": 0.8,
            "entity_type": "TITLE",
        }],
    }
    _, anonymize_response_content = anonymize(json.dumps(anonymize_request))
    encrypted_text = json.loads(anonymize_response_content)["text"]

    decrypt_request = {
        "text":
        encrypted_text,
        "deanonymizers": {
            "DEFAULT": {
                "type": "decrypt",
                "key": "1111111111111111"
            },
            "TITLE": {
                "type": "decrypt",
                "key": "2222222222222222"
            }
        },
        "anonymizer_results": [{
            "start": 0,
            "end": 44,
            "entity_type": "NAME",
        }, {
            "start": 50,
            "end": 114,
            "entity_type": "TITLE",
        }],
    }

    _, decrypted_text_response = deanonymize(json.dumps(decrypt_request))

    decrypted_text = json.loads(decrypted_text_response)["text"]
    assert decrypted_text == text_for_encryption
Ejemplo n.º 4
0
def test_demo_website_text_returns_correct_anonymized_version():
    # Analyzer request info

    dir_path = Path(__file__).resolve().parent.parent
    with open(Path(dir_path, "resources", "demo.txt"), encoding="utf-8") as f:
        text_into_rows = f.read().split("\n")

    text_into_rows = [txt.strip() for txt in text_into_rows]
    text = " ".join(text_into_rows)
    language = "en"
    score_threshold = 0.35

    analyzer_request = {
        "text": text,
        "language": language,
        "score_threshold": score_threshold,
    }

    # Call analyzer

    analyzer_status_code, analyzer_content = analyze(json.dumps(analyzer_request))

    analyzer_data = json.loads(analyzer_content)

    # Anonymizer request info

    anonymizer_request = {
        "text": analyzer_request["text"],
        "analyzer_results": analyzer_data,
    }

    # Call anonymizer

    anonymizer_status_code, anonymizer_response = anonymize(
        json.dumps(anonymizer_request)
    )

    anonymizer_response_dict = json.loads(anonymizer_response)
    actual_anonymized_text = anonymizer_response_dict["text"]

    # Expected output:

    with open(
            Path(dir_path, "resources", "demo_anonymized.txt"), encoding="utf-8"
    ) as f_exp:
        text_into_rows = f_exp.read().split("\n")

    text_into_rows = [txt.strip() for txt in text_into_rows]
    expected_anonymized_text = " ".join(text_into_rows)

    # Assert equal

    assert expected_anonymized_text == actual_anonymized_text
Ejemplo n.º 5
0
def test_given_anonymize_called_with_custom_then_bad_request_error_returned():
    request_body = """
    {
        "text": "The user has the following two emails: [email protected] and [email protected]",
        "anonymizers": {
            "DEFAULT": { "type": "custom", "new_value": "lambda x:  x[::-1]" }            
        },
        "analyzer_results": [
            { "start": 39, "end": 55, "score": 1.0, "entity_type": "EMAIL_ADDRESS" },
            { "start": 60, "end": 76, "score": 1.0, "entity_type": "EMAIL_ADDRESS" }
        ]
    }
    """
    response_status, response_content = anonymize(request_body)

    expected_response = '{"error": "Custom type anonymizer is not supported"}'
    assert response_status == 400
    assert equal_json_strings(expected_response, response_content)
Ejemplo n.º 6
0
def test_given_anonymize_called_with_deformed_body_then_internal_server_error_returned(
):
    request_body = """
    {
        "text": "hello world, my name is Jane Doe. My number is: 034453334",
        "anonymizers": {
            "DEFAULT": {"type": "replace", "new_value": "ANONYMIZED"},
        },
        "analyzer_results": [
            {"start": 24, "end": 32, "score": 0.8, "entity_type": "NAME"},
            {"start": 24, "end": 28, "score": 0.8, "entity_type": "FIRST_NAME"},
        ]
    }
    """
    response_status, response_content = anonymize(request_body)

    expected_response = '{"error": "Internal server error"}'
    assert response_status == 500
    assert equal_json_strings(expected_response, response_content)
Ejemplo n.º 7
0
def test_given_anonymize_called_with_empty_analyzer_results_then_unchanged_text_is_returned(
):
    request_body = """
    {
        "text": "hello world! nice to meet you!",
        "anonymizers": {
            "DEFAULT": { "type": "replace", "new_value": "ANONYMIZED" },
            "PHONE_NUMBER": { "type": "mask", "masking_char": "*", "chars_to_mask": 4, "from_end": true }
        },
        "analyzer_results": [

        ]
    }
    """
    response_status, response_content = anonymize(request_body)

    expected_response = """{"text": "hello world! nice to meet you!", "items": []}"""
    assert response_status == 200
    assert equal_json_strings(expected_response, response_content)
Ejemplo n.º 8
0
def test_given_anonymize_called_with_empty_text_then_invalid_input_message_returned(
):
    request_body = """
    {
        "text": "",
        "anonymizers": {
            "DEFAULT": { "type": "replace", "new_value": "ANONYMIZED" }
        },
        "analyzer_results": [
            { "start": 24, "end": 32, "score": 0.8, "entity_type": "NAME" }
        ]
    }
    """

    response_status, response_content = anonymize(request_body)

    expected_response = '{"error": "Invalid input, text can not be empty"}'
    assert response_status == 422
    assert equal_json_strings(expected_response, response_content)
def anonymize_and_assert(anonymizer_request, expected_response):
    response_status, response_content = anonymize(json.dumps(anonymizer_request))
    assert response_status == 200
    assert equal_json_strings(expected_response, response_content)