Files
stack/tests/api/test_zotero.py
kert 5261032a9b
All checks were successful
ci/woodpecker/push/infra-ci Pipeline was successful
ci/woodpecker/push/deploy Pipeline was successful
ci/woodpecker/push/ci Pipeline was successful
add tests for 100% line coverage across all packages
Cover remaining uncovered lines in bcda (client, store, log, pipe/cclf,
flatten), bib (sync, spider, translate, ingest, item, store, format, ui),
cms (express wrappers, log edge cases), api (base, gitea, rustfs,
woodpecker, zotero), bls (table import), and pfs (pragma on race guard).

37,687 statements, 0 missed — 11,061 tests passing.
2026-02-28 22:03:23 -05:00

88 lines
3.2 KiB
Python

"""Tests for ZoteroClient."""
from __future__ import annotations
from api.clients.zotero import ZoteroClient
class TestZoteroAuth:
def test_api_key_and_version_headers(self, capture_transport):
cap = capture_transport
c = ZoteroClient("zk", "12345", _transport=cap.transport([]))
c.list_items()
h = cap.requests[0].headers
assert h["zotero-api-key"] == "zk"
assert h["zotero-api-version"] == "3"
class TestZoteroRoutes:
def test_list_items(self, capture_transport):
cap = capture_transport
c = ZoteroClient("k", "99", _transport=cap.transport([]))
c.list_items()
req = cap.requests[0]
assert req.method == "GET"
assert req.url.path == "/users/99/items"
def test_get_item(self, capture_transport):
cap = capture_transport
c = ZoteroClient("k", "99", _transport=cap.transport({}))
c.get_item("ABC123")
assert cap.requests[0].url.path == "/users/99/items/ABC123"
def test_create_item(self, capture_transport):
cap = capture_transport
c = ZoteroClient("k", "99", _transport=cap.transport({}))
c.create_item({"itemType": "book"})
req = cap.requests[0]
assert req.method == "POST"
assert req.url.path == "/users/99/items"
def test_list_collections(self, capture_transport):
cap = capture_transport
c = ZoteroClient("k", "99", _transport=cap.transport([]))
c.list_collections()
assert cap.requests[0].url.path == "/users/99/collections"
def test_collection_items(self, capture_transport):
cap = capture_transport
c = ZoteroClient("k", "99", _transport=cap.transport([]))
c.collection_items("COL1")
assert cap.requests[0].url.path == "/users/99/collections/COL1/items"
def test_search(self, capture_transport):
cap = capture_transport
c = ZoteroClient("k", "99", _transport=cap.transport([]))
c.search("machine learning")
req = cap.requests[0]
assert req.url.path == "/users/99/items"
assert "q=machine" in str(req.url)
def test_delete_item_version_header(self, capture_transport):
cap = capture_transport
c = ZoteroClient("k", "99", _transport=cap.transport())
c.delete_item("XYZ", last_version=5)
req = cap.requests[0]
assert req.method == "DELETE"
assert req.headers["if-unmodified-since-version"] == "5"
def test_update_item(self, capture_transport):
cap = capture_transport
c = ZoteroClient("k", "99", _transport=cap.transport({}))
c.update_item("ABC", {"title": "New"})
req = cap.requests[0]
assert req.method == "PUT"
assert req.url.path == "/users/99/items/ABC"
def test_get_collection(self, capture_transport):
cap = capture_transport
c = ZoteroClient("k", "99", _transport=cap.transport({}))
c.get_collection("COL1")
assert cap.requests[0].url.path == "/users/99/collections/COL1"
def test_list_tags(self, capture_transport):
cap = capture_transport
c = ZoteroClient("k", "99", _transport=cap.transport([]))
c.list_tags()
assert cap.requests[0].url.path == "/users/99/tags"