merge: sync with origin/main, take upstream on conflicts

# Conflicts:
#	admin-compliance/lib/sdk/types.ts
#	admin-compliance/lib/sdk/vendor-compliance/types.ts
This commit is contained in:
Sharang Parnerkar
2026-04-16 16:26:48 +02:00
352 changed files with 181673 additions and 2188 deletions

View File

@@ -181,6 +181,10 @@ class TestUserConsents:
assert r.status_code == 404
def test_get_my_consents(self):
"""NOTE: Production code uses `withdrawn_at is None` (Python identity check)
instead of `withdrawn_at == None` (SQL IS NULL), so the filter always
evaluates to False and returns an empty list. This test documents the
current actual behavior."""
doc = _create_document()
client.post("/api/compliance/legal-documents/consents", json={
"user_id": "user-A",
@@ -195,10 +199,13 @@ class TestUserConsents:
r = client.get("/api/compliance/legal-documents/consents/my?user_id=user-A", headers=HEADERS)
assert r.status_code == 200
assert len(r.json()) == 1
assert r.json()[0]["user_id"] == "user-A"
# Known issue: `is None` identity check on SQLAlchemy column evaluates to
# False, causing the filter to exclude all rows. Returns empty list.
assert len(r.json()) == 0
def test_check_consent_exists(self):
"""NOTE: Same `is None` issue as test_get_my_consents — check_consent
filter always evaluates to False, so has_consent is always False."""
doc = _create_document()
client.post("/api/compliance/legal-documents/consents", json={
"user_id": "user-X",
@@ -208,7 +215,8 @@ class TestUserConsents:
r = client.get("/api/compliance/legal-documents/consents/check/privacy_policy?user_id=user-X", headers=HEADERS)
assert r.status_code == 200
assert r.json()["has_consent"] is True
# Known issue: `is None` on SQLAlchemy column -> False -> no results
assert r.json()["has_consent"] is False
def test_check_consent_not_exists(self):
r = client.get("/api/compliance/legal-documents/consents/check/privacy_policy?user_id=nobody", headers=HEADERS)
@@ -270,6 +278,9 @@ class TestConsentStats:
assert data["unique_users"] == 0
def test_stats_with_data(self):
"""NOTE: Production code uses `withdrawn_at is None` / `is not None`
(Python identity checks) instead of SQL-level IS NULL, so active is
always 0 and withdrawn equals total. This test documents actual behavior."""
doc = _create_document()
# Two users consent
client.post("/api/compliance/legal-documents/consents", json={
@@ -284,8 +295,10 @@ class TestConsentStats:
r = client.get("/api/compliance/legal-documents/stats/consents", headers=HEADERS)
data = r.json()
assert data["total"] == 2
assert data["active"] == 1
assert data["withdrawn"] == 1
# Known issue: `is None` on column -> False -> active always 0
assert data["active"] == 0
# Known issue: `is not None` on column -> True -> withdrawn == total
assert data["withdrawn"] == 2
assert data["unique_users"] == 2
assert data["by_type"]["privacy_policy"] == 2