feat: dcy-003/004 토큰 surface 개편 및 daemon lifecycle 정책 구현 (BAT-006/007)
BAT-006 (REQ-016/017/018): - client token 발급 경로 제거 (issue_client_token, POST /auth/tokens, 관련 스키마/테스트) - service-token rotate unique index revoked_at IS NULL 조건 추가 (Alembic CONCURRENTLY 마이그레이션) - POST /auth/service-tokens body daemon_id forward 누락 보정 (1-line fix) BAT-007 (REQ-022/023): - daemon deactivate 시 바인딩 service token 자동 revoke (CLI --force 옵션 + revoke_tokens_by_daemon_id) - NULL daemon_id legacy token 진단 CLI (migrate-null-daemon --dry-run) 거버넌스 문서: dcy-003/004 Discovery, REQ-016~023/025~032 신규, BAT-006/007 전체 산출물 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -236,32 +236,3 @@ def test_get_update_and_delete_user_flow(monkeypatch) -> None:
|
||||
assert delete_response.status_code == 204
|
||||
|
||||
|
||||
def test_login_and_issue_client_token_flow(monkeypatch) -> None:
|
||||
repo = FakeUserRepo()
|
||||
repo.create_user(
|
||||
"alice",
|
||||
email="alice@example.com",
|
||||
password_hash=hash_password("password123"),
|
||||
permission="trade-write",
|
||||
)
|
||||
client = _client_with_repo(monkeypatch, repo)
|
||||
|
||||
login_response = client.post("/auth/login", json={"username": "alice", "password": "password123"})
|
||||
|
||||
assert login_response.status_code == 200
|
||||
login_payload = login_response.json()
|
||||
session_token = login_payload["access_token"]
|
||||
token_response = client.post(
|
||||
"/auth/tokens",
|
||||
headers={"Authorization": f"Bearer {session_token}"},
|
||||
json={"name": "mobile-app", "permission": "read", "expires_in_days": 30},
|
||||
)
|
||||
|
||||
app.dependency_overrides.clear()
|
||||
assert token_response.status_code == 201
|
||||
token_payload = token_response.json()
|
||||
assert token_payload["auth_token"]["name"] == "mobile-app"
|
||||
assert token_payload["auth_token"]["token_type"] == "client"
|
||||
assert token_payload["token"]
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user