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.
110 lines
3.9 KiB
Python
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"
|