Files
stack/tests/api/test_gitea.py
kert 2c0a69a4d8 add HKDF credential derivation and auto-rotation
Single root key derives all 18 service credentials via HKDF-SHA256.
Bootstrap/service tiers rotate on key change vs every commit.
Provisioners update PostgreSQL roles and Gitea tokens automatically.
CI pipeline runs `api.auth provision` after each deploy.
2026-02-28 22:45:14 -05:00

110 lines
3.9 KiB
Python

"""Tests for GiteaClient."""
from __future__ import annotations
from api.clients.gitea import GiteaClient
class TestGiteaAuth:
def test_token_header(self, capture_transport):
cap = capture_transport
c = GiteaClient("my-token", _transport=cap.transport())
c.list_repos()
assert cap.requests[0].headers["authorization"] == "token my-token"
class TestGiteaRoutes:
def test_list_repos(self, capture_transport):
cap = capture_transport
c = GiteaClient("t", _transport=cap.transport([]))
c.list_repos()
req = cap.requests[0]
assert req.method == "GET"
assert req.url.path == "/api/v1/repos/search"
def test_get_repo(self, capture_transport):
cap = capture_transport
c = GiteaClient("t", _transport=cap.transport({}))
c.get_repo("owner", "repo")
req = cap.requests[0]
assert req.method == "GET"
assert req.url.path == "/api/v1/repos/owner/repo"
def test_create_repo(self, capture_transport):
cap = capture_transport
c = GiteaClient("t", _transport=cap.transport({}))
c.create_repo({"name": "new"})
req = cap.requests[0]
assert req.method == "POST"
assert req.url.path == "/api/v1/user/repos"
def test_list_orgs(self, capture_transport):
cap = capture_transport
c = GiteaClient("t", _transport=cap.transport([]))
c.list_orgs()
assert cap.requests[0].url.path == "/api/v1/user/orgs"
def test_create_webhook(self, capture_transport):
cap = capture_transport
c = GiteaClient("t", _transport=cap.transport({}))
c.create_webhook("o", "r", {"type": "gitea"})
req = cap.requests[0]
assert req.method == "POST"
assert req.url.path == "/api/v1/repos/o/r/hooks"
def test_get_org(self, capture_transport):
cap = capture_transport
c = GiteaClient("t", _transport=cap.transport({}))
c.get_org("myorg")
req = cap.requests[0]
assert req.method == "GET"
assert req.url.path == "/api/v1/orgs/myorg"
def test_list_packages(self, capture_transport):
cap = capture_transport
c = GiteaClient("t", _transport=cap.transport([]))
c.list_packages("owner1")
req = cap.requests[0]
assert req.method == "GET"
assert req.url.path == "/api/v1/packages/owner1"
def test_list_webhooks(self, capture_transport):
cap = capture_transport
c = GiteaClient("t", _transport=cap.transport([]))
c.list_webhooks("o", "r")
req = cap.requests[0]
assert req.method == "GET"
assert req.url.path == "/api/v1/repos/o/r/hooks"
def test_change_admin_password(self, capture_transport):
cap = capture_transport
c = GiteaClient("t", _transport=cap.transport({}))
c.change_admin_password("kert", "newpw")
req = cap.requests[0]
assert req.method == "PATCH"
assert req.url.path == "/api/v1/admin/users/kert"
def test_list_tokens(self, capture_transport):
cap = capture_transport
c = GiteaClient("t", _transport=cap.transport([]))
c.list_tokens("kert")
req = cap.requests[0]
assert req.method == "GET"
assert req.url.path == "/api/v1/users/kert/tokens"
def test_create_token(self, capture_transport):
cap = capture_transport
c = GiteaClient("t", _transport=cap.transport({"sha1": "abc"}))
c.create_token("kert", "deploy", scopes=["all"])
req = cap.requests[0]
assert req.method == "POST"
assert req.url.path == "/api/v1/users/kert/tokens"
def test_delete_token(self, capture_transport):
cap = capture_transport
c = GiteaClient("t", _transport=cap.transport(None, status=204))
c.delete_token("kert", 42)
req = cap.requests[0]
assert req.method == "DELETE"
assert req.url.path == "/api/v1/users/kert/tokens/42"