Spaces:
Build error
Build error
| from unittest import TestCase | |
| from botbuilder.azure import CosmosDbKeyEscape | |
| class TestKeyValidation(TestCase): | |
| def test_should_not_change_a_valid_key(self): | |
| valid_key = "Abc12345" | |
| sanitized_key = CosmosDbKeyEscape.sanitize_key(valid_key) | |
| assert ( | |
| valid_key == sanitized_key | |
| ), f"{valid_key} should be equal to {sanitized_key}" | |
| def test_should_escape_illegal_characters_case_1(self): | |
| # Ascii code of "?" is "3f" | |
| sanitized_key = CosmosDbKeyEscape.sanitize_key("?test?") | |
| assert sanitized_key == "*63test*63" | |
| def test_should_escape_illegal_characters_case_2(self): | |
| # Ascii code of "/" is "2f" | |
| sanitized_key = CosmosDbKeyEscape.sanitize_key("/test/") | |
| assert sanitized_key == "*47test*47" | |
| def test_should_escape_illegal_characters_case_3(self): | |
| # Ascii code of "\" is "5c" | |
| sanitized_key = CosmosDbKeyEscape.sanitize_key("\\test\\") | |
| assert sanitized_key == "*92test*92" | |
| def test_should_escape_illegal_characters_case_4(self): | |
| # Ascii code of "#" is "23" | |
| sanitized_key = CosmosDbKeyEscape.sanitize_key("#test#") | |
| assert sanitized_key == "*35test*35" | |
| def test_should_escape_illegal_characters_case_5(self): | |
| # Ascii code of "*" is "2a". | |
| sanitized_key = CosmosDbKeyEscape.sanitize_key("*test*") | |
| assert sanitized_key == "*42test*42" | |
| def test_should_escape_illegal_characters_compound_key(self): | |
| # Check a compound key | |
| compoundsanitized_key = CosmosDbKeyEscape.sanitize_key("?#/") | |
| assert compoundsanitized_key, "*3f*23*2f" | |
| def test_should_handle_possible_collisions(self): | |
| valid_key1 = "*2atest*2a" | |
| valid_key2 = "*test*" | |
| escaped1 = CosmosDbKeyEscape.sanitize_key(valid_key1) | |
| escaped2 = CosmosDbKeyEscape.sanitize_key(valid_key2) | |
| assert escaped1 != escaped2, f"{escaped1} should be different that {escaped2}" | |
| def test_should_truncate_longer_keys(self): | |
| # create an extra long key | |
| # limit is 255 | |
| long_key = "x" * 300 | |
| fixed = CosmosDbKeyEscape.sanitize_key(long_key) | |
| assert len(fixed) <= 255, "long key was not properly truncated" | |
| def test_should_not_truncate_short_key(self): | |
| # create a short key | |
| short_key = "x" * 16 | |
| fixed2 = CosmosDbKeyEscape.sanitize_key(short_key) | |
| assert len(fixed2) == 16, "short key was truncated improperly" | |
| def test_should_create_sufficiently_different_truncated_keys_of_similar_origin( | |
| self, | |
| ): | |
| # create 2 very similar extra long key where the difference will definitely be trimmed off by truncate function | |
| long_key = "x" * 300 + "1" | |
| long_key2 = "x" * 300 + "2" | |
| fixed = CosmosDbKeyEscape.sanitize_key(long_key) | |
| fixed2 = CosmosDbKeyEscape.sanitize_key(long_key2) | |
| assert len(fixed) != fixed2, "key truncation failed to create unique key" | |
| def test_should_properly_truncate_keys_with_special_chars(self): | |
| # create a short key | |
| long_key = "*" * 300 | |
| fixed = CosmosDbKeyEscape.sanitize_key(long_key) | |
| assert len(fixed) <= 255, "long key with special char was truncated improperly" | |
| # create a short key | |
| short_key = "#" * 16 | |
| fixed2 = CosmosDbKeyEscape.sanitize_key(short_key) | |
| assert ( | |
| len(fixed2) <= 255 | |
| ), "short key with special char was truncated improperly" | |