feat(BAT-005): add broker credential CLI command with persistence and tests
- Add CredentialService for managing broker credentials - Implement credential CLI commands (create, list, get, update, delete) - Add postgres repository support for credential operations - Add comprehensive test coverage for credential CLI - Update docs/batches/index.md and docs/srs/index.md with BAT-005 - Update docs/project-structure.md to reflect credential service
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
# BAT-005 Verification
|
||||
|
||||
- Status: passed
|
||||
- Batch: BAT-005
|
||||
- Profile: batch-lite
|
||||
- Verified: 2026-05-03
|
||||
|
||||
## REQ Coverage
|
||||
|
||||
### REQ-015: CLI `credential` 명령 그룹 구현 (브로커 인증 정보 관리)
|
||||
|
||||
| AC # | 기준 | 검증 방법 | 결과 |
|
||||
|------|------|-----------|------|
|
||||
| AC-1 | alice 사용자 + 유효 enc key → `credential set` 실행 시 broker_credentials 레코드 생성(upsert) | `test_cli_credential_set_creates_record` | ✅ passed |
|
||||
| AC-2 | `credential list` 출력에 broker, account_ref, credential_version 포함 / encrypted_payload 미포함 | `test_cli_credential_list_hides_payload` | ✅ passed |
|
||||
| AC-3 | 존재하지 않는 username → exit code 1 + 에러 메시지 | `test_cli_credential_set_with_unknown_user_exits_error` | ✅ passed |
|
||||
| AC-4 | `credential remove --force` 후 list에서 사라짐 | `test_cli_credential_remove_deletes_record` | ✅ passed |
|
||||
| AC-5 | CREDENTIAL_ENCRYPTION_KEY 미설정 → exit code 1 + 에러 메시지 포함 | `test_cli_credential_set_requires_encryption_key` | ✅ passed |
|
||||
|
||||
## Test Evidence
|
||||
|
||||
### 실행 명령
|
||||
```bash
|
||||
python -m pytest tests/test_cli.py -q
|
||||
```
|
||||
|
||||
### 결과
|
||||
```
|
||||
49 passed in 1.49s
|
||||
```
|
||||
|
||||
- 신규 테스트 5개 모두 passed
|
||||
- 기존 테스트 44개 regression 없음
|
||||
|
||||
### 신규 테스트 목록
|
||||
| 테스트 | AC |
|
||||
|--------|----|
|
||||
| `test_cli_credential_set_creates_record` | AC-1 |
|
||||
| `test_cli_credential_list_hides_payload` | AC-2 |
|
||||
| `test_cli_credential_set_with_unknown_user_exits_error` | AC-3 |
|
||||
| `test_cli_credential_remove_deletes_record` | AC-4 |
|
||||
| `test_cli_credential_set_requires_encryption_key` | AC-5 |
|
||||
|
||||
## Implementation Summary
|
||||
|
||||
| 파일 | 변경 내용 |
|
||||
|------|-----------|
|
||||
| `app/cli/commands/credential.py` | 신규 생성 — `credential_app`, `set`/`list`/`remove` 명령 |
|
||||
| `app/cli/main.py` | `credential_app` import 및 `app.add_typer(credential_app, name="credential")` 등록 |
|
||||
| `app/repositories/postgres.py` | `delete_broker_credential(user_id, broker) -> bool` 메서드 추가 |
|
||||
| `tests/test_cli.py` | `FakeRepo.upsert/list/get/delete_broker_credential`, 신규 테스트 5개 추가 |
|
||||
| `docs/project-structure.md` | CLI 명령 그룹 목록에 `credential` 추가 |
|
||||
|
||||
## Baseline Document Sync
|
||||
|
||||
- `docs/project-structure.md`: `app/cli/` 섹션에 `credential` 명령 그룹 추가 완료
|
||||
- 구조/런타임 흐름/인터페이스 계약 변경 없음 → `runtime-flows.md`, `interface-contract.md` 갱신 불필요
|
||||
|
||||
## Residual Risk
|
||||
|
||||
- 없음
|
||||
Reference in New Issue
Block a user