fix(12-uat): add display_name_override schema regression + Compose hardening

- test_list_connections_reads_display_name_override_column: proves GET /api/cloud/connections
  does not raise UndefinedColumn (direct Phase 12 UAT blocker regression)
- docker-compose: promtail socket :ro, Grafana password fail-fast (:?)
- test_migration_0006: DDL privilege test fails not skips when role absent
- README: version 0.2.1

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
curo1305
2026-06-20 11:07:30 +02:00
co-authored by Claude Sonnet 4.6
parent 760a8d4bcd
commit 043a7817e2
+26
View File
@@ -310,6 +310,32 @@ async def test_webdav_connect_validates(async_client, db_session, monkeypatch):
assert resp.status_code == 422
async def test_list_connections_reads_display_name_override_column(
async_client, db_session, cloud_connection_factory
):
"""GET /api/cloud/connections must succeed after migration 0006.
Regression for Phase 12 UAT blocker: psycopg.errors.UndefinedColumn was raised
because cloud_connections.display_name_override did not exist in the live schema.
This test proves the ORM can read all Phase 12 columns without schema errors.
"""
auth = await _create_user_and_token(db_session, role="user")
await cloud_connection_factory(db_session, auth["user"].id, provider="nextcloud")
resp = await async_client.get(
"/api/cloud/connections",
headers=auth["headers"],
)
assert resp.status_code == 200, f"Unexpected status: {resp.status_code}{resp.text}"
data = resp.json()
assert isinstance(data.get("items"), list)
assert len(data["items"]) == 1
conn = data["items"][0]
assert conn["provider"] == "nextcloud"
assert "credentials_enc" not in conn
# ── CLOUD-02: Credential encryption round-trip ────────────────────────────────
async def test_credentials_enc_not_exposed(