Connector calls, semantic rules, and DuckDB memory keep long runs stable, and stream retry stops chats from stalling. Co-authored-by: Cursor <cursoragent@cursor.com>
75 lines
2.7 KiB
Python
75 lines
2.7 KiB
Python
"""Product-facing connector payloads stay free of secrets."""
|
|
|
|
from kamidso.contracts.user import CurrentUser
|
|
from kamidso.engine.serve.connector.service.service import ConnectorResponse
|
|
from kamidso.native_connectors.ux import connector_test_message, public_connector
|
|
|
|
|
|
def test_probe_messages_are_persian_and_drop_the_remote_body():
|
|
ok = connector_test_message({"success": True, "message": "Connection successful"})
|
|
assert ok == {"success": True, "message": "اتصال برقرار شد."}
|
|
|
|
denied = connector_test_message(
|
|
{
|
|
"success": False,
|
|
"status_code": 401,
|
|
"error_type": "authentication_error",
|
|
"message": "apikey=super-secret",
|
|
}
|
|
)
|
|
assert denied["success"] is False
|
|
assert denied["status_code"] == 401
|
|
assert "super-secret" not in denied["message"]
|
|
assert "کلید API" in denied["message"]
|
|
|
|
limited = connector_test_message({"success": False, "status_code": 429})
|
|
assert "محدودیت" in limited["message"]
|
|
|
|
remote = connector_test_message({"success": False, "status_code": 503})
|
|
assert "سرویس دیدار" in remote["message"]
|
|
|
|
offline = connector_test_message({"success": False, "error_type": "transport_error"})
|
|
assert offline["message"] == "ارتباط با دیدار برقرار نشد."
|
|
assert "status_code" not in offline
|
|
|
|
|
|
def test_public_connector_hides_config_secrets():
|
|
row = ConnectorResponse(
|
|
connector_id="conn_1",
|
|
connector_type="didar",
|
|
display_name="دیدار فروش",
|
|
status="active",
|
|
config={"api_key": "super-secret", "last_tested_at": "2026-10-12T09:00:00Z", "last_test_success": True},
|
|
)
|
|
public = public_connector(row)
|
|
assert public["has_credentials"] is True
|
|
assert public["connector_kind"] == "native"
|
|
assert public["last_tested_at"] == "2026-10-12T09:00:00Z"
|
|
assert "super-secret" not in str(public)
|
|
assert "api_key" not in public
|
|
assert "config" not in public
|
|
|
|
|
|
def test_authorize_connector_rejects_another_workspace(monkeypatch):
|
|
from kamidso.resources.registry import _authorize_connector
|
|
|
|
monkeypatch.setattr(
|
|
"kamidso.native_connectors.resolve.load_public_instance",
|
|
lambda connector_id: {
|
|
"connector_id": connector_id,
|
|
"connector_type": "didar",
|
|
"display_name": "دیدار فروش",
|
|
"status": "active",
|
|
"user_name": "usr_1",
|
|
"sys_code": "ws_a",
|
|
},
|
|
)
|
|
user = CurrentUser(
|
|
id="usr_1",
|
|
email="a@kamidso.test",
|
|
name="A",
|
|
role="user",
|
|
workspace_id="ws_b",
|
|
)
|
|
assert _authorize_connector(user, "conn_1") is None
|