78 lines
2.3 KiB
Python
78 lines
2.3 KiB
Python
import os
|
|
import uuid
|
|
from typing import List, Optional, Tuple
|
|
from urllib.parse import urlparse
|
|
|
|
import pytest
|
|
|
|
from specklepy.core.api.credentials import Account, UserInfo, get_accounts_for_server
|
|
from specklepy.core.api.models import ServerInfo, ServerMigration
|
|
from specklepy.core.helpers import speckle_path_provider
|
|
|
|
|
|
def _create_account(
|
|
id: str, url: str, movedFrom: Optional[str], movedTo: Optional[str]
|
|
) -> Account:
|
|
return Account(
|
|
id=uuid.uuid4().hex[:6].lower(),
|
|
token="myToken",
|
|
serverInfo=ServerInfo(
|
|
url=url,
|
|
name="myServer",
|
|
migration=ServerMigration(movedTo=movedTo, movedFrom=movedFrom),
|
|
),
|
|
userInfo=UserInfo(id=id),
|
|
)
|
|
|
|
|
|
def _test_cases() -> List[Tuple[List[Account], str, List[Account]]]:
|
|
user_id_1 = uuid.uuid4().hex[:6].lower()
|
|
user_id_2 = uuid.uuid4().hex[:6].lower()
|
|
old = _create_account(
|
|
user_id_1, "https://old.example.com", None, "https://new.example.com"
|
|
)
|
|
new = _create_account(
|
|
user_id_1, "https://new.example.com", "https://old.example.com", None
|
|
)
|
|
other = _create_account(user_id_2, "https://other.example.com", None, None)
|
|
|
|
given_accounts = [old, new, other]
|
|
reversed = [other, new, old]
|
|
|
|
return [
|
|
(given_accounts, "https://old.example.com", [new]),
|
|
(given_accounts, "https://new.example.com", [new]),
|
|
(reversed, "https://old.example.com", [new]),
|
|
]
|
|
|
|
|
|
def _clean_accounts(accounts: List[Account]) -> None:
|
|
json_accounts = speckle_path_provider.accounts_folder_path()
|
|
|
|
for acc in accounts:
|
|
# deleting acc json file in json_accounts path
|
|
os.remove(os.path.join(json_accounts, f"{acc.id}.json"))
|
|
pass
|
|
|
|
|
|
def _add_accounts(accounts: List[Account]) -> None:
|
|
json_accounts = speckle_path_provider.accounts_folder_path()
|
|
|
|
for acc in accounts:
|
|
data = Account.model_dump_json(acc)
|
|
with open(os.path.join(json_accounts, f"{acc.id}.json"), "w") as f:
|
|
f.write(data)
|
|
|
|
|
|
@pytest.mark.parametrize("accounts, requested_url, expected", _test_cases())
|
|
def test_server_migration(
|
|
accounts: List[Account], requested_url: str, expected: List[Account]
|
|
) -> None:
|
|
_add_accounts(accounts)
|
|
try:
|
|
res = get_accounts_for_server(urlparse(requested_url).netloc)
|
|
assert res == expected
|
|
|
|
finally:
|
|
_clean_accounts(accounts)
|