76 lines
2.7 KiB
Python
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")
|