import pytest from keyserver_bot.vcard import construct_vcard, parse_vcard EXAMPLE_PROTON_KEY = "xjMEZ+/HahYJKwYBBAHaRw8BAQdAzRZOcQEkaPGwUYBVHsKTVX+4nP05ZwLQ3wYUod1IQyjNNXNkamlmMm1saWpAcHJvdG9ubWFpbC5jb20gPHNkamlmMm1saWpAcHJvdG9ubWFpbC5jb20+wsARBBMWCgCDBYJn78dqAwsJBwmQ9od3MCAJzKNFFAAAAAAAHAAgc2FsdEBub3RhdGlvbnMub3BlbnBncGpzLm9yZ3e7fGtn2OkXwNFoBOAEgwoRygRlwr41fcO4LsJ/1HcyAxUKCAQWAAIBAhkBApsDAh4BFiEERU5l1enHSVCTOUnc9od3MCAJzKMAAAuPAQCQ0PFlbngJRtJ36yloWfHwTY168TDlMGeL+nAxJ1GUQAEA31H+NukIwEzCwQWh7aoFeY9eJHXVoaeh0swfvJA5yQ/CwB4EEBYIAJAFgmfvx6cFgwDtTgAJENgGwa9ZeOjHNRQAAAAAABwAEHNhbHRAbm90YXRpb25zLm9wZW5wZ3Bqcy5vcmfU5CAfgrGEZMQfk/lTyXT2LBxvcGVucGdwLWNhQHByb3Rvbi5tZSA8b3BlbnBncC1jYUBwcm90b24ubWU+FiEECoZS/l1TOGBXiZ/p2AbBr1l46McAAJCrAP4tMWMSLKAykI/JnR+94aE2+E4dCTslkW/svb1o7zGLbwEAg/fo6sOxa3wHr9xnCbUUrxZ0Dnh/21zJ3atL6zMpYQHOOARn78dqEgorBgEEAZdVAQUBAQdATm5zMhEn2/S+UB3qKfeV424+iyvIr2p3FEzxuzUQKQEDAQgHwr4EGBYKAHAFgmfvx2oJkPaHdzAgCcyjRRQAAAAAABwAIHNhbHRAbm90YXRpb25zLm9wZW5wZ3Bqcy5vcmf94HNvbCT5aX/ifcaDK2bIjzmS69JdQo1AcOt3X8AwFQKbDBYhBEVOZdXpx0lQkzlJ3PaHdzAgCcyjAACVUgEA8Agw7R9+a72WsKOq691JIYPGDfNYCKNHFllsQAfHHHYA/3x+rG9YQTbdAuuFi1ciGvgo9DAWVv8Bt7ibBqEVAuQN" EXAMPLE_PROTON_VCARD = "BEGIN:VCARD\nVERSION:4.0\nEMAIL:sdjif2mlij@protonmail.com\nKEY:data:application/pgp-keys;base64,xjMEZ+/HahYJKwYBBAHaRw8BAQdAzRZOcQEkaPGwUYBVHsKTVX+4nP05ZwLQ3wYUod1IQyjNNXNkamlmMm1saWpAcHJvdG9ubWFpbC5jb20gPHNkamlmMm1saWpAcHJvdG9ubWFpbC5jb20+wsARBBMWCgCDBYJn78dqAwsJBwmQ9od3MCAJzKNFFAAAAAAAHAAgc2FsdEBub3RhdGlvbnMub3BlbnBncGpzLm9yZ3e7fGtn2OkXwNFoBOAEgwoRygRlwr41fcO4LsJ/1HcyAxUKCAQWAAIBAhkBApsDAh4BFiEERU5l1enHSVCTOUnc9od3MCAJzKMAAAuPAQCQ0PFlbngJRtJ36yloWfHwTY168TDlMGeL+nAxJ1GUQAEA31H+NukIwEzCwQWh7aoFeY9eJHXVoaeh0swfvJA5yQ/CwB4EEBYIAJAFgmfvx6cFgwDtTgAJENgGwa9ZeOjHNRQAAAAAABwAEHNhbHRAbm90YXRpb25zLm9wZW5wZ3Bqcy5vcmfU5CAfgrGEZMQfk/lTyXT2LBxvcGVucGdwLWNhQHByb3Rvbi5tZSA8b3BlbnBncC1jYUBwcm90b24ubWU+FiEECoZS/l1TOGBXiZ/p2AbBr1l46McAAJCrAP4tMWMSLKAykI/JnR+94aE2+E4dCTslkW/svb1o7zGLbwEAg/fo6sOxa3wHr9xnCbUUrxZ0Dnh/21zJ3atL6zMpYQHOOARn78dqEgorBgEEAZdVAQUBAQdATm5zMhEn2/S+UB3qKfeV424+iyvIr2p3FEzxuzUQKQEDAQgHwr4EGBYKAHAFgmfvx2oJkPaHdzAgCcyjRRQAAAAAABwAIHNhbHRAbm90YXRpb25zLm9wZW5wZ3Bqcy5vcmf94HNvbCT5aX/ifcaDK2bIjzmS69JdQo1AcOt3X8AwFQKbDBYhBEVOZdXpx0lQkzlJ3PaHdzAgCcyjAACVUgEA8Agw7R9+a72WsKOq691JIYPGDfNYCKNHFllsQAfHHHYA/3x+rG9YQTbdAuuFi1ciGvgo9DAWVv8Bt7ibBqEVAuQN\nEND:VCARD" EXAMPLE_DELTA_KEY = "xjMEXcLIEBYJKwYBBAHaRw8BAQdAmlYU7TEgGL3eq2WXC95tQtZYHjpJOCjb7qq3vJd1lG7NIm1pc3N5dGFrZSA8bWlzc3l0YWtlQHN5c3RlbWxpLm9yZz7CkAQTFggAOAIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgBYhBEX/6kI9pCw7MYVUWQTMZlgyBRjfBQJnDuTLAAoJEATMZlgyBRjfeUUA/0P0E/quL71dn5Zjc4ewsnykT1GODazGmk+xprSwAvEyAPwJy+uJgJz5pSFdmi2lGRrOERmKUu8AdQ/M7dSm6kt3AMKQBBMWCAA4AhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAFiEERf/qQj2kLDsxhVRZBMxmWDIFGN8FAmcO5FkACgkQBMxmWDIFGN+0EAD+PVALMtR4PDB4aaxpJ5L1p6mGmq1lb8wqZtdAyHK9+7EA/jPU12/e368B6OHknY1YzGxQxyPETcL8hUS26CU6wnUEzRZtaXNzeXRha2VAc3lzdGVtbGkub3JnwpAEExYIADgCGwMFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AWIQRF/+pCPaQsOzGFVFkEzGZYMgUY3wUCZw7kywAKCRAEzGZYMgUY37s7AP4uOSeC9cwDKnPnov7L6Sp0axUNncX+n5sjepkPpwgVIQD/Zt85kzYrodvsx4QdolweWDFrH9DFxTsTSw2GWIIE6Q3CkAQTFggAOAIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgBYhBEX/6kI9pCw7MYVUWQTMZlgyBRjfBQJnDuRZAAoJEATMZlgyBRjf3lkBAPdeXSQY9oPO4wHv+pYE5d6+4ij8plA6tSReaqhneOKtAQCJguCnqcH8A9KKZ97n1gIBFnJ7xhdNTPLPoAbYE1BAB8KWBBMWCAA+FiEERf/qQj2kLDsxhVRZBMxmWDIFGN8FAl3CyBACGwMFCQlmAYAFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQBMxmWDIFGN9eHAD/SR+CRWWJ5km4pfeU48Y88+6nKA/T6egmav9NIZTjw9cBAIEk6yInsxZj/2Ot9AW8vr+cyuiG9FtZOuWvbNh4oYUJzjMEXcLKyhYJKwYBBAHaRw8BAQdAtUIjrOUmkTbVVkwIXeAkC/s3Z1wrW2/+KIgkQbbi38XCeAQYFggAIAIbIBYhBEX/6kI9pCw7MYVUWQTMZlgyBRjfBQJnDuULAAoJEATMZlgyBRjf19ABALR4jIhWK/5e87V3+xuX9R0MAyBDztZjb8nfXJ3HWK65AQC6S7JybxebS+jHSavTIF0nuaaqBXZx3me1edqwVVBAD8J+BBgWCAAmFiEERf/qQj2kLDsxhVRZBMxmWDIFGN8FAl3CysoCGyAFCQlmAYAACgkQBMxmWDIFGN/IQgEA8WwKDEEtbyIiCr5pLD/eqJ2m1xIsKKP/0sH0ADPMwjEA/jvMjOjbrh5WZuUnf+ddcVB7GStu3SZtenkB/rK1+s0EzjgEXcLIEBIKKwYBBAGXVQEFAQEHQGTy3kLa+rSeHhK35fDN/k46zZFh+LDZQ0a2552FuPJ6AwEIB8J4BBgWCAAgAhsMFiEERf/qQj2kLDsxhVRZBMxmWDIFGN8FAmcO5P8ACgkQBMxmWDIFGN/jJgEA5+ESV8PtiUcwxml7GpTGwbIv8GoDA1YlPcUeku/S20QA/iVvzlf8Oj5Wvhet8VMzU37wWsFJ2n6aAyM2WmOrPVoPwn4EGBYIACYWIQRF/+pCPaQsOzGFVFkEzGZYMgUY3wUCXcLIEAIbDAUJCWYBgAAKCRAEzGZYMgUY3zZnAP9JMp+PI+1H4x3D62Qg4udjL6zypFKTrcrUnyWNcoWzoQD/W3uJ7M2sbOdAdHcj246koYP32BrR/7Wtc0/7yJPfqQk==oePr" EXAMPLE_DELTA_VCARD = "BEGIN:VCARD\nVERSION:4.0\nEMAIL:missytake@systemli.org\nKEY:data:application/pgp-keys;base64,xjMEXcLIEBYJKwYBBAHaRw8BAQdAmlYU7TEgGL3eq2WXC95tQtZYHjpJOCjb7qq3vJd1lG7NIm1pc3N5dGFrZSA8bWlzc3l0YWtlQHN5c3RlbWxpLm9yZz7CkAQTFggAOAIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgBYhBEX/6kI9pCw7MYVUWQTMZlgyBRjfBQJnDuTLAAoJEATMZlgyBRjfeUUA/0P0E/quL71dn5Zjc4ewsnykT1GODazGmk+xprSwAvEyAPwJy+uJgJz5pSFdmi2lGRrOERmKUu8AdQ/M7dSm6kt3AMKQBBMWCAA4AhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAFiEERf/qQj2kLDsxhVRZBMxmWDIFGN8FAmcO5FkACgkQBMxmWDIFGN+0EAD+PVALMtR4PDB4aaxpJ5L1p6mGmq1lb8wqZtdAyHK9+7EA/jPU12/e368B6OHknY1YzGxQxyPETcL8hUS26CU6wnUEzRZtaXNzeXRha2VAc3lzdGVtbGkub3JnwpAEExYIADgCGwMFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AWIQRF/+pCPaQsOzGFVFkEzGZYMgUY3wUCZw7kywAKCRAEzGZYMgUY37s7AP4uOSeC9cwDKnPnov7L6Sp0axUNncX+n5sjepkPpwgVIQD/Zt85kzYrodvsx4QdolweWDFrH9DFxTsTSw2GWIIE6Q3CkAQTFggAOAIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgBYhBEX/6kI9pCw7MYVUWQTMZlgyBRjfBQJnDuRZAAoJEATMZlgyBRjf3lkBAPdeXSQY9oPO4wHv+pYE5d6+4ij8plA6tSReaqhneOKtAQCJguCnqcH8A9KKZ97n1gIBFnJ7xhdNTPLPoAbYE1BAB8KWBBMWCAA+FiEERf/qQj2kLDsxhVRZBMxmWDIFGN8FAl3CyBACGwMFCQlmAYAFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQBMxmWDIFGN9eHAD/SR+CRWWJ5km4pfeU48Y88+6nKA/T6egmav9NIZTjw9cBAIEk6yInsxZj/2Ot9AW8vr+cyuiG9FtZOuWvbNh4oYUJzjMEXcLKyhYJKwYBBAHaRw8BAQdAtUIjrOUmkTbVVkwIXeAkC/s3Z1wrW2/+KIgkQbbi38XCeAQYFggAIAIbIBYhBEX/6kI9pCw7MYVUWQTMZlgyBRjfBQJnDuULAAoJEATMZlgyBRjf19ABALR4jIhWK/5e87V3+xuX9R0MAyBDztZjb8nfXJ3HWK65AQC6S7JybxebS+jHSavTIF0nuaaqBXZx3me1edqwVVBAD8J+BBgWCAAmFiEERf/qQj2kLDsxhVRZBMxmWDIFGN8FAl3CysoCGyAFCQlmAYAACgkQBMxmWDIFGN/IQgEA8WwKDEEtbyIiCr5pLD/eqJ2m1xIsKKP/0sH0ADPMwjEA/jvMjOjbrh5WZuUnf+ddcVB7GStu3SZtenkB/rK1+s0EzjgEXcLIEBIKKwYBBAGXVQEFAQEHQGTy3kLa+rSeHhK35fDN/k46zZFh+LDZQ0a2552FuPJ6AwEIB8J4BBgWCAAgAhsMFiEERf/qQj2kLDsxhVRZBMxmWDIFGN8FAmcO5P8ACgkQBMxmWDIFGN/jJgEA5+ESV8PtiUcwxml7GpTGwbIv8GoDA1YlPcUeku/S20QA/iVvzlf8Oj5Wvhet8VMzU37wWsFJ2n6aAyM2WmOrPVoPwn4EGBYIACYWIQRF/+pCPaQsOzGFVFkEzGZYMgUY3wUCXcLIEAIbDAUJCWYBgAAKCRAEzGZYMgUY3zZnAP9JMp+PI+1H4x3D62Qg4udjL6zypFKTrcrUnyWNcoWzoQD/W3uJ7M2sbOdAdHcj246koYP32BrR/7Wtc0/7yJPfqQk==oePr\nFN:missytake\nEND:VCARD" EXAMPLE_DELTA_KEY_2 = "xjMEaAVqNxYJKwYBBAHaRw8BAQdAnQ1KcTZYpcfbGyXkgPHJsCJQn/mn2a4F5SH7tccFNF/NHDxhcDNtNWNzNjNAbmluZS50ZXN0cnVuLm9yZz7CjQQQFggANQIZAQUCaAVqNwIbAwQLCQgHBhUICQoLAgMWAgEBJxYhBJCKqRpWzC6rZWWG76Wa27/U0TWBAAoJEKWa27/U0TWBKV8A/RoUFaB7YYc0zLkZWkJr9xTy5jN8T3VsGNJRi2IN1wQTAQDAsLwZkTf4pax2Hu/S0P11e+hsK+7TqF8/YP/toT5zAc44BGgFajcSCisGAQQBl1UBBQEBB0Dw5cbj6CDXHYKJDHvqfCPE1oDcO0194OYjXPf3foYTGAMBCAfCeAQYFggAIAUCaAVqNwIbDBYhBJCKqRpWzC6rZWWG76Wa27/U0TWBAAoJEKWa27/U0TWB2c8BAON7SIbWGpzhCoLP/pKsVycxdH3lc4bAAKwLP2X/cnFyAQCO43AeusNcRYetQJfvtmI9avQkEKWw54QBfFWIiabpDg==" EXAMPLE_DELTA_VCARD_2 = "BEGIN:VCARD\nVERSION:4.0\nEMAIL:ap3m5cs63@nine.testrun.org\nFN:test\nKEY:data:application/pgp-keys;base64,xjMEaAVqNxYJKwYBBAHaRw8BAQdAnQ1KcTZYpcfbGyXkgPHJsCJQn/mn2a4F5SH7tccFNF/NHDxhcDNtNWNzNjNAbmluZS50ZXN0cnVuLm9yZz7CjQQQFggANQIZAQUCaAVqNwIbAwQLCQgHBhUICQoLAgMWAgEBJxYhBJCKqRpWzC6rZWWG76Wa27/U0TWBAAoJEKWa27/U0TWBKV8A/RoUFaB7YYc0zLkZWkJr9xTy5jN8T3VsGNJRi2IN1wQTAQDAsLwZkTf4pax2Hu/S0P11e+hsK+7TqF8/YP/toT5zAc44BGgFajcSCisGAQQBl1UBBQEBB0Dw5cbj6CDXHYKJDHvqfCPE1oDcO0194OYjXPf3foYTGAMBCAfCeAQYFggAIAUCaAVqNwIbDBYhBJCKqRpWzC6rZWWG76Wa27/U0TWBAAoJEKWa27/U0TWB2c8BAON7SIbWGpzhCoLP/pKsVycxdH3lc4bAAKwLP2X/cnFyAQCO43AeusNcRYetQJfvtmI9avQkEKWw54QBfFWIiabpDg==\nREV:20250420T214624Z\nEND:VCARD" @pytest.mark.parametrize( ("email", "public_key", "display_name", "vcard"), [ ( "sdjif2mlij@protonmail.com", EXAMPLE_PROTON_KEY, "", EXAMPLE_PROTON_VCARD, ), ( "missytake@systemli.org", EXAMPLE_DELTA_KEY, "missytake", EXAMPLE_DELTA_VCARD, ), ], ) def test_construct_vcard(email, public_key, display_name, vcard): assert vcard == construct_vcard(email, public_key, display_name) @pytest.mark.parametrize( ("email", "public_key", "display_name", "vcard"), [ ( "sdjif2mlij@protonmail.com", EXAMPLE_PROTON_KEY, "", EXAMPLE_PROTON_VCARD, ), ( "missytake@systemli.org", EXAMPLE_DELTA_KEY, "missytake", EXAMPLE_DELTA_VCARD, ), ( "ap3m5cs63@nine.testrun.org", EXAMPLE_DELTA_KEY_2, "test", EXAMPLE_DELTA_VCARD_2, ), ], ) def test_parse_vcard(email, public_key, display_name, vcard): assert (email, public_key, display_name) == parse_vcard(vcard)