mirror of
https://github.com/Skyvern-AI/skyvern.git
synced 2026-05-01 05:00:20 +00:00
This commit is contained in:
parent
c4251ff70c
commit
dbe252d128
6 changed files with 226 additions and 11 deletions
114
tests/unit/test_credential_update_params.py
Normal file
114
tests/unit/test_credential_update_params.py
Normal file
|
|
@ -0,0 +1,114 @@
|
|||
"""Tests that update_credential() accepts user_context and save_browser_session_intent
|
||||
on both CredentialRepository and CredentialsMixin."""
|
||||
|
||||
from unittest.mock import MagicMock, patch
|
||||
|
||||
import pytest
|
||||
|
||||
from skyvern.forge.sdk.db.mixins.credentials import CredentialsMixin
|
||||
from skyvern.forge.sdk.db.repositories.credentials import CredentialRepository
|
||||
from tests.unit.conftest import MockAsyncSessionCtx, make_mock_session
|
||||
|
||||
|
||||
def _make_credential_repo(mock_credential: MagicMock) -> CredentialRepository:
|
||||
mock_session = make_mock_session(mock_credential)
|
||||
return CredentialRepository(session_factory=lambda: MockAsyncSessionCtx(mock_session))
|
||||
|
||||
|
||||
def _make_credential_mixin(mock_credential: MagicMock) -> CredentialsMixin:
|
||||
mock_session = make_mock_session(mock_credential)
|
||||
mixin = CredentialsMixin.__new__(CredentialsMixin)
|
||||
mixin.Session = lambda: MockAsyncSessionCtx(mock_session) # type: ignore[assignment]
|
||||
return mixin
|
||||
|
||||
|
||||
# --- CredentialRepository tests ---
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_repo_update_credential_accepts_user_context() -> None:
|
||||
mock_credential = MagicMock()
|
||||
mock_credential.name = "test"
|
||||
mock_credential.user_context = None
|
||||
repo = _make_credential_repo(mock_credential)
|
||||
|
||||
with patch("skyvern.forge.sdk.schemas.credentials.Credential.model_validate", return_value=MagicMock()):
|
||||
await repo.update_credential(
|
||||
credential_id="cred_123",
|
||||
organization_id="org_123",
|
||||
user_context="Click SSO button first",
|
||||
)
|
||||
|
||||
assert mock_credential.user_context == "Click SSO button first"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_repo_update_credential_accepts_save_browser_session_intent() -> None:
|
||||
mock_credential = MagicMock()
|
||||
mock_credential.name = "test"
|
||||
mock_credential.save_browser_session_intent = False
|
||||
repo = _make_credential_repo(mock_credential)
|
||||
|
||||
with patch("skyvern.forge.sdk.schemas.credentials.Credential.model_validate", return_value=MagicMock()):
|
||||
await repo.update_credential(
|
||||
credential_id="cred_123",
|
||||
organization_id="org_123",
|
||||
save_browser_session_intent=True,
|
||||
)
|
||||
|
||||
assert mock_credential.save_browser_session_intent is True
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_repo_update_credential_unset_params_not_applied() -> None:
|
||||
mock_credential = MagicMock()
|
||||
mock_credential.name = "test"
|
||||
mock_credential.user_context = "existing"
|
||||
mock_credential.save_browser_session_intent = True
|
||||
repo = _make_credential_repo(mock_credential)
|
||||
|
||||
with patch("skyvern.forge.sdk.schemas.credentials.Credential.model_validate", return_value=MagicMock()):
|
||||
await repo.update_credential(
|
||||
credential_id="cred_123",
|
||||
organization_id="org_123",
|
||||
)
|
||||
|
||||
assert mock_credential.user_context == "existing"
|
||||
assert mock_credential.save_browser_session_intent is True
|
||||
|
||||
|
||||
# --- CredentialsMixin tests ---
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_mixin_update_credential_accepts_user_context() -> None:
|
||||
mock_credential = MagicMock()
|
||||
mock_credential.name = "test"
|
||||
mock_credential.user_context = None
|
||||
mixin = _make_credential_mixin(mock_credential)
|
||||
|
||||
with patch("skyvern.forge.sdk.schemas.credentials.Credential.model_validate", return_value=MagicMock()):
|
||||
await mixin.update_credential(
|
||||
credential_id="cred_123",
|
||||
organization_id="org_123",
|
||||
user_context="Click SSO button first",
|
||||
)
|
||||
|
||||
assert mock_credential.user_context == "Click SSO button first"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_mixin_update_credential_accepts_save_browser_session_intent() -> None:
|
||||
mock_credential = MagicMock()
|
||||
mock_credential.name = "test"
|
||||
mock_credential.save_browser_session_intent = False
|
||||
mixin = _make_credential_mixin(mock_credential)
|
||||
|
||||
with patch("skyvern.forge.sdk.schemas.credentials.Credential.model_validate", return_value=MagicMock()):
|
||||
await mixin.update_credential(
|
||||
credential_id="cred_123",
|
||||
organization_id="org_123",
|
||||
save_browser_session_intent=True,
|
||||
)
|
||||
|
||||
assert mock_credential.save_browser_session_intent is True
|
||||
Loading…
Add table
Add a link
Reference in a new issue