Files
Dorod-Sky/tests/unit/test_custom_credential_client.py
2026-02-12 20:43:27 -08:00

76 lines
2.7 KiB
Python

import pytest
from skyvern.forge.sdk.api.custom_credential_client import CustomCredentialAPIClient
from skyvern.forge.sdk.schemas.credentials import CredentialType, SecretCredential
@pytest.fixture
def client() -> CustomCredentialAPIClient:
return CustomCredentialAPIClient(api_base_url="https://custom.example.com", api_token="token-123")
def test_credential_to_api_payload_with_label(client: CustomCredentialAPIClient) -> None:
credential = SecretCredential(secret_value="sk-secret", secret_label="api-key")
payload = client._credential_to_api_payload(credential)
assert payload == {
"type": "secret",
"secret_value": "sk-secret",
"secret_label": "api-key",
}
def test_credential_to_api_payload_without_label(client: CustomCredentialAPIClient) -> None:
credential = SecretCredential(secret_value="sk-secret-no-label")
payload = client._credential_to_api_payload(credential)
assert payload == {
"type": "secret",
"secret_value": "sk-secret-no-label",
}
def test_api_response_to_credential_secret_with_label(client: CustomCredentialAPIClient) -> None:
response = {
"type": "secret",
"secret_value": "shhh",
"secret_label": "prod-api",
}
credential_item = client._api_response_to_credential(response, name="Prod API", item_id="cred_123")
assert credential_item.item_id == "cred_123"
assert credential_item.name == "Prod API"
assert credential_item.credential_type == CredentialType.SECRET
assert isinstance(credential_item.credential, SecretCredential)
assert credential_item.credential.secret_value == "shhh"
assert credential_item.credential.secret_label == "prod-api"
def test_api_response_to_credential_secret_without_label(client: CustomCredentialAPIClient) -> None:
response = {
"type": "secret",
"secret_value": "token-only",
}
credential_item = client._api_response_to_credential(response, name="Token", item_id="cred_456")
assert credential_item.item_id == "cred_456"
assert credential_item.name == "Token"
assert credential_item.credential_type == CredentialType.SECRET
assert isinstance(credential_item.credential, SecretCredential)
assert credential_item.credential.secret_value == "token-only"
assert credential_item.credential.secret_label is None
def test_api_response_to_credential_secret_missing_required_field(client: CustomCredentialAPIClient) -> None:
response = {
"type": "secret",
"secret_label": "no-secret-value",
}
with pytest.raises(ValueError, match="Missing required secret fields from API"):
client._api_response_to_credential(response, name="Broken Secret", item_id="cred_789")