dify/api/tests/unit_tests/controllers/openapi
GareArc a07b32274a
feat(api): add /openapi/v1/workspaces reads (Phase E.17)
GET /openapi/v1/workspaces lists tenants the bearer's account is a
member of. GET /openapi/v1/workspaces/<id> returns one workspace
detail, member-gated (404 on non-member, never 403, so workspace IDs
don't leak across tenants).

Bearer-authed via @validate_bearer(accept=ACCEPT_USER_ANY). External
SSO bearers (no account_id) get an empty list / 404 — same posture as
GET /openapi/v1/account.

Cookie-authed /console/api/workspaces stays in console for the
dashboard SPA — different consumer, different auth model. No legacy
/v1/ remount this phase.

Plan: docs/superpowers/plans/2026-04-26-openapi-migration.md (in difyctl repo).
2026-04-27 00:10:16 -07:00
..
__init__.py feat(api): scaffold /openapi/v1 blueprint (Phase A.1) 2026-04-26 23:08:15 -07:00
test_account.py feat(api): add /openapi/v1/account/sessions endpoints (Phase C.11-12) 2026-04-26 23:51:55 -07:00
test_cors.py feat(api): CORS posture for /openapi/v1 (Phase A.5) 2026-04-26 23:30:27 -07:00
test_device_approve_deny.py refactor(api): consolidate openapi/oauth_device into per-domain modules 2026-04-27 00:07:15 -07:00
test_device_code.py refactor(api): consolidate openapi/oauth_device into per-domain modules 2026-04-27 00:07:15 -07:00
test_device_lookup.py refactor(api): consolidate openapi/oauth_device into per-domain modules 2026-04-27 00:07:15 -07:00
test_device_sso.py refactor(api): consolidate openapi/oauth_device into per-domain modules 2026-04-27 00:07:15 -07:00
test_device_token.py refactor(api): consolidate openapi/oauth_device into per-domain modules 2026-04-27 00:07:15 -07:00
test_health.py feat(api): scaffold /openapi/v1 blueprint (Phase A.1) 2026-04-26 23:08:15 -07:00
test_workspaces.py feat(api): add /openapi/v1/workspaces reads (Phase E.17) 2026-04-27 00:10:16 -07:00