import json import unittest from unittest import mock import sys from pathlib import Path code_path = Path(__file__).parents[1] / "ca_core" sys.path.insert(0, str(code_path)) from crypto.zenroom_service_client import ZenroomServiceClient class _FakeHTTPResponse: def __init__(self, body: bytes): self._body = body def read(self): return self._body def __enter__(self): return self def __exit__(self, exc_type, exc, tb): return False class TestZenroomServiceClient(unittest.TestCase): @mock.patch("crypto.zenroom_service_client.urllib.request.urlopen") def test_generate_keypair_unpacks_private_key(self, m_urlopen): payload = { "IntegrationUser": { "keyring": {"ecdh": "PRIVKEY"}, } } m_urlopen.return_value = _FakeHTTPResponse(json.dumps(payload).encode("utf-8")) client = ZenroomServiceClient(base_url="http://localhost:3300") res = client.generate_keypair("IntegrationUser") self.assertEqual(res["private_key"], "PRIVKEY") self.assertNotIn("public_key", res) req = m_urlopen.call_args[0][0] self.assertEqual(req.method, "POST") self.assertTrue(req.full_url.endswith("/api/Generate-a-keypair,-reading-identity-from-data")) sent = json.loads(req.data.decode("utf-8")) self.assertEqual(sent, {"data": {"myName": "IntegrationUser"}}) @mock.patch("crypto.zenroom_service_client.urllib.request.urlopen") def test_generate_keypair_includes_public_key_if_present(self, m_urlopen): payload = { "IntegrationUser": { "ecdh_public_key": "PUBKEY", "keyring": {"ecdh": "PRIVKEY"}, } } m_urlopen.return_value = _FakeHTTPResponse(json.dumps(payload).encode("utf-8")) client = ZenroomServiceClient(base_url="http://localhost:3300") res = client.generate_keypair("IntegrationUser") self.assertEqual(res["private_key"], "PRIVKEY") self.assertEqual(res["public_key"], "PUBKEY")