opencode-agent
Upgrade to v1.8.0 from upstream basketikun/chatgpt2api (restore HF Space frontmatter + .gitattributes)
602efe1 Download test/test_database_storage.py from cjovs/IMAGE: direct link, hf CLI and curl.
- Browser
- Download file 5.1 kB
-
https://huggingface.co/spaces/cjovs/IMAGE/resolve/main/test/test_database_storage.py
- Command line
-
hf download hf://spaces/cjovs/IMAGE/test/test_database_storage.py
-
curl -L -o test_database_storage.py https://huggingface.co/spaces/cjovs/IMAGE/resolve/main/test/test_database_storage.py
5.1 kB
| import json | |
| import pytest | |
| from services.storage.database_storage import ( | |
| AccountModel, | |
| AuthKeyModel, | |
| DatabaseStorageBackend, | |
| ) | |
| def _account_rows(backend: DatabaseStorageBackend) -> dict[str, AccountModel]: | |
| session = backend.Session() | |
| try: | |
| return { | |
| row.access_token: row | |
| for row in session.query(AccountModel).order_by(AccountModel.id).all() | |
| } | |
| finally: | |
| session.close() | |
| def test_save_accounts_preserves_existing_rows_and_updates_only_changed_data(tmp_path): | |
| backend = DatabaseStorageBackend(f"sqlite:///{tmp_path / 'accounts.db'}") | |
| backend.save_accounts( | |
| [ | |
| {"access_token": "token-a", "name": "A"}, | |
| {"access_token": "token-b", "name": "B"}, | |
| ] | |
| ) | |
| before = _account_rows(backend) | |
| before_ids = {token: row.id for token, row in before.items()} | |
| before_b_data = before["token-b"].data | |
| backend.save_accounts( | |
| [ | |
| {"access_token": "token-b", "name": "B"}, | |
| {"access_token": "token-a", "name": "A updated"}, | |
| {"access_token": "token-c", "name": "C"}, | |
| ] | |
| ) | |
| after = _account_rows(backend) | |
| assert set(after) == {"token-a", "token-b", "token-c"} | |
| assert after["token-a"].id == before_ids["token-a"] | |
| assert after["token-b"].id == before_ids["token-b"] | |
| assert after["token-b"].data == before_b_data | |
| assert json.loads(after["token-a"].data)["name"] == "A updated" | |
| def test_save_accounts_deletes_only_rows_missing_from_new_snapshot(tmp_path): | |
| backend = DatabaseStorageBackend(f"sqlite:///{tmp_path / 'accounts.db'}") | |
| backend.save_accounts( | |
| [ | |
| {"access_token": "token-a", "name": "A"}, | |
| {"access_token": "token-b", "name": "B"}, | |
| ] | |
| ) | |
| before = _account_rows(backend) | |
| token_b_id = before["token-b"].id | |
| backend.save_accounts([{"access_token": "token-b", "name": "B"}]) | |
| after = _account_rows(backend) | |
| assert set(after) == {"token-b"} | |
| assert after["token-b"].id == token_b_id | |
| def test_save_accounts_rejects_duplicate_tokens_and_rolls_back(tmp_path): | |
| backend = DatabaseStorageBackend(f"sqlite:///{tmp_path / 'accounts.db'}") | |
| original = {"access_token": "token-a", "name": "A"} | |
| backend.save_accounts([original]) | |
| with pytest.raises(ValueError, match="Duplicate access_token") as exc_info: | |
| backend.save_accounts( | |
| [ | |
| {"access_token": "token-a", "name": "first update"}, | |
| {"access_token": "token-a", "name": "second update"}, | |
| ] | |
| ) | |
| assert "token-a" not in str(exc_info.value) | |
| assert backend.load_accounts() == [original] | |
| def test_save_accounts_rejects_duplicate_new_tokens_and_rolls_back(tmp_path): | |
| backend = DatabaseStorageBackend(f"sqlite:///{tmp_path / 'accounts.db'}") | |
| original = {"access_token": "token-a", "name": "A"} | |
| backend.save_accounts([original]) | |
| with pytest.raises(ValueError, match="Duplicate access_token") as exc_info: | |
| backend.save_accounts( | |
| [ | |
| original, | |
| {"access_token": "token-b", "name": "first new"}, | |
| {"access_token": "token-b", "name": "second new"}, | |
| ] | |
| ) | |
| assert "token-b" not in str(exc_info.value) | |
| assert backend.load_accounts() == [original] | |
| def test_save_auth_keys_preserves_ids_with_target_key_mapping(tmp_path): | |
| backend = DatabaseStorageBackend(f"sqlite:///{tmp_path / 'auth-keys.db'}") | |
| backend.save_auth_keys( | |
| [ | |
| {"id": "key-a", "name": "A"}, | |
| {"id": "key-b", "name": "B"}, | |
| ] | |
| ) | |
| session = backend.Session() | |
| try: | |
| before_ids = { | |
| row.key_id: row.id | |
| for row in session.query(AuthKeyModel).order_by(AuthKeyModel.id).all() | |
| } | |
| finally: | |
| session.close() | |
| backend.save_auth_keys( | |
| [ | |
| {"id": "key-b", "name": "B"}, | |
| {"id": "key-a", "name": "A updated"}, | |
| {"id": "key-c", "name": "C"}, | |
| ] | |
| ) | |
| session = backend.Session() | |
| try: | |
| after = { | |
| row.key_id: row | |
| for row in session.query(AuthKeyModel).order_by(AuthKeyModel.id).all() | |
| } | |
| assert set(after) == {"key-a", "key-b", "key-c"} | |
| assert after["key-a"].id == before_ids["key-a"] | |
| assert after["key-b"].id == before_ids["key-b"] | |
| assert json.loads(after["key-a"].data)["name"] == "A updated" | |
| finally: | |
| session.close() | |
| def test_save_auth_keys_rejects_duplicate_ids_and_rolls_back(tmp_path): | |
| backend = DatabaseStorageBackend(f"sqlite:///{tmp_path / 'auth-keys.db'}") | |
| original = {"id": "key-a", "name": "A"} | |
| backend.save_auth_keys([original]) | |
| with pytest.raises(ValueError, match="Duplicate id") as exc_info: | |
| backend.save_auth_keys( | |
| [ | |
| {"id": "key-a", "name": "first update"}, | |
| {"id": "key-a", "name": "second update"}, | |
| ] | |
| ) | |
| assert "key-a" not in str(exc_info.value) | |
| assert backend.load_auth_keys() == [original] | |