@newpeak/barista-cli 0.1.11 → 0.1.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/package.json +7 -3
- package/docs/ARCHITECTURE.md +0 -184
- package/docs/COMMANDS.md +0 -352
- package/docs/COMMAND_DESIGN_SPEC.md +0 -840
- package/docs/INTEGRATION_NOTES.md +0 -270
- package/docs/commands/REFERENCE.md +0 -323
- package/docs/commands/arabica/auth/index.md +0 -296
- package/docs/commands/liberica/auth/index.md +0 -133
- package/docs/commands/liberica/calendar/DESIGN.md +0 -333
- package/docs/commands/liberica/client-contacts/create.md +0 -152
- package/docs/commands/liberica/client-contacts/delete.md +0 -123
- package/docs/commands/liberica/client-contacts/get.md +0 -133
- package/docs/commands/liberica/client-contacts/list.md +0 -143
- package/docs/commands/liberica/client-contacts/update.md +0 -158
- package/docs/commands/liberica/context/index.md +0 -60
- package/docs/commands/liberica/currency/create.md +0 -145
- package/docs/commands/liberica/currency/delete.md +0 -121
- package/docs/commands/liberica/currency/disable.md +0 -119
- package/docs/commands/liberica/currency/enable.md +0 -115
- package/docs/commands/liberica/currency/get.md +0 -118
- package/docs/commands/liberica/currency/list.md +0 -149
- package/docs/commands/liberica/currency/update.md +0 -141
- package/docs/commands/liberica/employees/create.md +0 -185
- package/docs/commands/liberica/employees/disable.md +0 -138
- package/docs/commands/liberica/employees/enable.md +0 -137
- package/docs/commands/liberica/employees/get.md +0 -153
- package/docs/commands/liberica/employees/list.md +0 -168
- package/docs/commands/liberica/employees/update.md +0 -180
- package/docs/commands/liberica/locations/create.md +0 -195
- package/docs/commands/liberica/locations/list.md +0 -171
- package/docs/commands/liberica/materials/create.md +0 -293
- package/docs/commands/liberica/materials/delete.md +0 -240
- package/docs/commands/liberica/materials/disable.md +0 -150
- package/docs/commands/liberica/materials/enable.md +0 -146
- package/docs/commands/liberica/materials/get.md +0 -188
- package/docs/commands/liberica/materials/list.md +0 -198
- package/docs/commands/liberica/materials/update.md +0 -250
- package/docs/commands/liberica/orgs/list.md +0 -62
- package/docs/commands/liberica/positions/list.md +0 -61
- package/docs/commands/liberica/roles/list.md +0 -67
- package/docs/commands/liberica/stock/ledger.md +0 -209
- package/docs/commands/liberica/stock/list.md +0 -165
- package/docs/commands/liberica/supplier-contacts/create.md +0 -152
- package/docs/commands/liberica/supplier-contacts/delete.md +0 -123
- package/docs/commands/liberica/supplier-contacts/get.md +0 -133
- package/docs/commands/liberica/supplier-contacts/list.md +0 -143
- package/docs/commands/liberica/supplier-contacts/update.md +0 -158
- package/docs/commands/liberica/teams/issues/close.md +0 -161
- package/docs/commands/liberica/teams/issues/create.md +0 -212
- package/docs/commands/liberica/teams/issues/delete.md +0 -179
- package/docs/commands/liberica/teams/issues/get.md +0 -167
- package/docs/commands/liberica/teams/issues/list.md +0 -182
- package/docs/commands/liberica/teams/issues/tests-design.md +0 -341
- package/docs/commands/liberica/teams/issues/update.md +0 -202
- package/docs/commands/liberica/teams/projects/create.md +0 -174
- package/docs/commands/liberica/teams/projects/delete.md +0 -180
- package/docs/commands/liberica/teams/projects/get.md +0 -150
- package/docs/commands/liberica/teams/projects/list.md +0 -179
- package/docs/commands/liberica/teams/projects/update.md +0 -175
- package/docs/commands/liberica/teams/tasks/create.md +0 -163
- package/docs/commands/liberica/teams/tasks/delete.md +0 -109
- package/docs/commands/liberica/teams/tasks/get.md +0 -121
- package/docs/commands/liberica/teams/tasks/list.md +0 -148
- package/docs/commands/liberica/teams/tasks/update.md +0 -158
- package/docs/commands/liberica/teams/work-logs/create.md +0 -151
- package/docs/commands/liberica/teams/work-logs/delete.md +0 -130
- package/docs/commands/liberica/teams/work-logs/get.md +0 -131
- package/docs/commands/liberica/teams/work-logs/list.md +0 -153
- package/docs/commands/liberica/teams/work-logs/update.md +0 -150
- package/docs/commands/liberica/transfer-in-forms/batch-delete.md +0 -157
- package/docs/commands/liberica/transfer-in-forms/batch-review.md +0 -157
- package/docs/commands/liberica/transfer-in-forms/batch-unreview.md +0 -157
- package/docs/commands/liberica/transfer-in-forms/create.md +0 -220
- package/docs/commands/liberica/transfer-in-forms/get.md +0 -221
- package/docs/commands/liberica/transfer-in-forms/list.md +0 -242
- package/docs/commands/liberica/transfer-in-forms/update.md +0 -185
- package/docs/commands/liberica/transfer-out-forms/batch-delete.md +0 -187
- package/docs/commands/liberica/transfer-out-forms/batch-review.md +0 -157
- package/docs/commands/liberica/transfer-out-forms/batch-unreview.md +0 -157
- package/docs/commands/liberica/transfer-out-forms/create.md +0 -280
- package/docs/commands/liberica/transfer-out-forms/get.md +0 -211
- package/docs/commands/liberica/transfer-out-forms/list.md +0 -233
- package/docs/commands/liberica/transfer-out-forms/update.md +0 -286
- package/docs/commands/liberica/uoms/create.md +0 -136
- package/docs/commands/liberica/uoms/delete.md +0 -119
- package/docs/commands/liberica/uoms/disable.md +0 -117
- package/docs/commands/liberica/uoms/enable.md +0 -115
- package/docs/commands/liberica/uoms/get.md +0 -119
- package/docs/commands/liberica/uoms/list.md +0 -155
- package/docs/commands/liberica/uoms/update.md +0 -148
- package/docs/commands/liberica/users/create.md +0 -170
- package/docs/commands/liberica/users/get.md +0 -151
- package/docs/commands/liberica/users/list.md +0 -175
- package/docs/commands/liberica/warehouses/create.md +0 -222
- package/docs/commands/liberica/warehouses/list.md +0 -184
- package/src/commands/arabica/auth/index.ts +0 -277
- package/src/commands/arabica/auth/login.ts +0 -5
- package/src/commands/arabica/auth/logout.ts +0 -5
- package/src/commands/arabica/auth/register.ts +0 -5
- package/src/commands/arabica/auth/status.ts +0 -5
- package/src/commands/arabica/index.ts +0 -23
- package/src/commands/auth.ts +0 -107
- package/src/commands/context.ts +0 -60
- package/src/commands/liberica/auth/index.ts +0 -176
- package/src/commands/liberica/calendar/index.ts +0 -13
- package/src/commands/liberica/calendar/list.ts +0 -214
- package/src/commands/liberica/calendar/set.ts +0 -130
- package/src/commands/liberica/client-contacts/create.ts +0 -115
- package/src/commands/liberica/client-contacts/delete.ts +0 -140
- package/src/commands/liberica/client-contacts/get.ts +0 -103
- package/src/commands/liberica/client-contacts/index.ts +0 -19
- package/src/commands/liberica/client-contacts/list.ts +0 -118
- package/src/commands/liberica/client-contacts/update.ts +0 -137
- package/src/commands/liberica/clients/create.ts +0 -122
- package/src/commands/liberica/clients/delete.ts +0 -125
- package/src/commands/liberica/clients/get.ts +0 -88
- package/src/commands/liberica/clients/index.ts +0 -19
- package/src/commands/liberica/clients/list.ts +0 -123
- package/src/commands/liberica/clients/update.ts +0 -103
- package/src/commands/liberica/context/index.ts +0 -43
- package/src/commands/liberica/currency/create.ts +0 -183
- package/src/commands/liberica/currency/delete.ts +0 -124
- package/src/commands/liberica/currency/disable.ts +0 -147
- package/src/commands/liberica/currency/enable.ts +0 -128
- package/src/commands/liberica/currency/get.ts +0 -91
- package/src/commands/liberica/currency/index.ts +0 -23
- package/src/commands/liberica/currency/list.ts +0 -140
- package/src/commands/liberica/currency/update.ts +0 -129
- package/src/commands/liberica/dict-types/get.ts +0 -74
- package/src/commands/liberica/dict-types/index.ts +0 -15
- package/src/commands/liberica/dict-types/list.ts +0 -118
- package/src/commands/liberica/dict-types/update.ts +0 -134
- package/src/commands/liberica/dicts/create.ts +0 -175
- package/src/commands/liberica/dicts/delete.ts +0 -107
- package/src/commands/liberica/dicts/get.ts +0 -80
- package/src/commands/liberica/dicts/index.ts +0 -19
- package/src/commands/liberica/dicts/list.ts +0 -114
- package/src/commands/liberica/dicts/update.ts +0 -116
- package/src/commands/liberica/employees/create.ts +0 -275
- package/src/commands/liberica/employees/delete.ts +0 -122
- package/src/commands/liberica/employees/disable.ts +0 -97
- package/src/commands/liberica/employees/enable.ts +0 -97
- package/src/commands/liberica/employees/get.ts +0 -115
- package/src/commands/liberica/employees/index.ts +0 -23
- package/src/commands/liberica/employees/list.ts +0 -131
- package/src/commands/liberica/employees/update.ts +0 -157
- package/src/commands/liberica/index.ts +0 -81
- package/src/commands/liberica/materials/create.ts +0 -199
- package/src/commands/liberica/materials/delete.ts +0 -105
- package/src/commands/liberica/materials/disable.ts +0 -148
- package/src/commands/liberica/materials/enable.ts +0 -129
- package/src/commands/liberica/materials/get.ts +0 -83
- package/src/commands/liberica/materials/index.ts +0 -23
- package/src/commands/liberica/materials/list.ts +0 -142
- package/src/commands/liberica/materials/update.ts +0 -125
- package/src/commands/liberica/mould/get.ts +0 -111
- package/src/commands/liberica/mould/index.ts +0 -17
- package/src/commands/liberica/mould/list.ts +0 -157
- package/src/commands/liberica/mould/set-status.ts +0 -99
- package/src/commands/liberica/mould/stock-in.ts +0 -165
- package/src/commands/liberica/operations/active.ts +0 -153
- package/src/commands/liberica/operations/batch-delete.ts +0 -131
- package/src/commands/liberica/operations/copy.ts +0 -138
- package/src/commands/liberica/operations/create.ts +0 -223
- package/src/commands/liberica/operations/deactive.ts +0 -152
- package/src/commands/liberica/operations/delete.ts +0 -128
- package/src/commands/liberica/operations/design.md +0 -587
- package/src/commands/liberica/operations/get.ts +0 -112
- package/src/commands/liberica/operations/index.ts +0 -27
- package/src/commands/liberica/operations/list.ts +0 -180
- package/src/commands/liberica/operations/update.ts +0 -218
- package/src/commands/liberica/orgs/index.ts +0 -34
- package/src/commands/liberica/positions/index.ts +0 -30
- package/src/commands/liberica/roles/index.ts +0 -59
- package/src/commands/liberica/stock/index.ts +0 -13
- package/src/commands/liberica/stock/ledger.ts +0 -159
- package/src/commands/liberica/stock/list.ts +0 -128
- package/src/commands/liberica/supplier-contacts/create.ts +0 -120
- package/src/commands/liberica/supplier-contacts/delete.ts +0 -88
- package/src/commands/liberica/supplier-contacts/get.ts +0 -94
- package/src/commands/liberica/supplier-contacts/index.ts +0 -19
- package/src/commands/liberica/supplier-contacts/list.ts +0 -130
- package/src/commands/liberica/supplier-contacts/update.ts +0 -127
- package/src/commands/liberica/suppliers/create.ts +0 -149
- package/src/commands/liberica/suppliers/delete.ts +0 -102
- package/src/commands/liberica/suppliers/disable.ts +0 -145
- package/src/commands/liberica/suppliers/enable.ts +0 -126
- package/src/commands/liberica/suppliers/get.ts +0 -86
- package/src/commands/liberica/suppliers/index.ts +0 -23
- package/src/commands/liberica/suppliers/list.ts +0 -134
- package/src/commands/liberica/suppliers/update.ts +0 -128
- package/src/commands/liberica/teams/index.ts +0 -17
- package/src/commands/liberica/teams/issues/close.ts +0 -104
- package/src/commands/liberica/teams/issues/create.ts +0 -254
- package/src/commands/liberica/teams/issues/delete.ts +0 -58
- package/src/commands/liberica/teams/issues/get.ts +0 -78
- package/src/commands/liberica/teams/issues/index.ts +0 -21
- package/src/commands/liberica/teams/issues/list.ts +0 -144
- package/src/commands/liberica/teams/issues/update.ts +0 -141
- package/src/commands/liberica/teams/projects/create.ts +0 -159
- package/src/commands/liberica/teams/projects/delete.ts +0 -58
- package/src/commands/liberica/teams/projects/get.ts +0 -87
- package/src/commands/liberica/teams/projects/index.ts +0 -19
- package/src/commands/liberica/teams/projects/list.ts +0 -147
- package/src/commands/liberica/teams/projects/update.ts +0 -117
- package/src/commands/liberica/teams/tasks/create.ts +0 -102
- package/src/commands/liberica/teams/tasks/delete.ts +0 -92
- package/src/commands/liberica/teams/tasks/get.ts +0 -64
- package/src/commands/liberica/teams/tasks/index.ts +0 -19
- package/src/commands/liberica/teams/tasks/list.ts +0 -102
- package/src/commands/liberica/teams/tasks/update.ts +0 -122
- package/src/commands/liberica/teams/work-logs/create.ts +0 -204
- package/src/commands/liberica/teams/work-logs/delete.ts +0 -58
- package/src/commands/liberica/teams/work-logs/get.ts +0 -87
- package/src/commands/liberica/teams/work-logs/index.ts +0 -19
- package/src/commands/liberica/teams/work-logs/list.ts +0 -141
- package/src/commands/liberica/teams/work-logs/update.ts +0 -120
- package/src/commands/liberica/transfer-in-forms/batch-delete.ts +0 -152
- package/src/commands/liberica/transfer-in-forms/batch-review.ts +0 -151
- package/src/commands/liberica/transfer-in-forms/batch-unreview.ts +0 -152
- package/src/commands/liberica/transfer-in-forms/create.ts +0 -179
- package/src/commands/liberica/transfer-in-forms/get.ts +0 -107
- package/src/commands/liberica/transfer-in-forms/index.ts +0 -23
- package/src/commands/liberica/transfer-in-forms/list.ts +0 -97
- package/src/commands/liberica/transfer-in-forms/update.ts +0 -213
- package/src/commands/liberica/transfer-out-forms/batch-delete.ts +0 -83
- package/src/commands/liberica/transfer-out-forms/batch-review.ts +0 -148
- package/src/commands/liberica/transfer-out-forms/batch-unreview.ts +0 -56
- package/src/commands/liberica/transfer-out-forms/create.ts +0 -194
- package/src/commands/liberica/transfer-out-forms/get.ts +0 -114
- package/src/commands/liberica/transfer-out-forms/index.ts +0 -23
- package/src/commands/liberica/transfer-out-forms/list.ts +0 -125
- package/src/commands/liberica/transfer-out-forms/update.ts +0 -197
- package/src/commands/liberica/uoms/create.ts +0 -134
- package/src/commands/liberica/uoms/delete.ts +0 -105
- package/src/commands/liberica/uoms/disable.ts +0 -148
- package/src/commands/liberica/uoms/enable.ts +0 -129
- package/src/commands/liberica/uoms/get.ts +0 -83
- package/src/commands/liberica/uoms/index.ts +0 -23
- package/src/commands/liberica/uoms/list.ts +0 -129
- package/src/commands/liberica/uoms/update.ts +0 -124
- package/src/commands/liberica/users/create.ts +0 -133
- package/src/commands/liberica/users/delete.ts +0 -49
- package/src/commands/liberica/users/disable.ts +0 -41
- package/src/commands/liberica/users/enable.ts +0 -30
- package/src/commands/liberica/users/get.ts +0 -46
- package/src/commands/liberica/users/index.ts +0 -27
- package/src/commands/liberica/users/list.ts +0 -68
- package/src/commands/liberica/users/me.ts +0 -42
- package/src/commands/liberica/users/reset-password.ts +0 -42
- package/src/commands/liberica/users/update.ts +0 -48
- package/src/commands/liberica/warehouses/create.ts +0 -204
- package/src/commands/liberica/warehouses/delete.ts +0 -112
- package/src/commands/liberica/warehouses/disable.ts +0 -174
- package/src/commands/liberica/warehouses/enable.ts +0 -174
- package/src/commands/liberica/warehouses/get.ts +0 -101
- package/src/commands/liberica/warehouses/index.ts +0 -25
- package/src/commands/liberica/warehouses/list.ts +0 -136
- package/src/commands/liberica/warehouses/locations/create.ts +0 -209
- package/src/commands/liberica/warehouses/locations/delete.ts +0 -116
- package/src/commands/liberica/warehouses/locations/disable.ts +0 -174
- package/src/commands/liberica/warehouses/locations/enable.ts +0 -174
- package/src/commands/liberica/warehouses/locations/get.ts +0 -84
- package/src/commands/liberica/warehouses/locations/index.ts +0 -23
- package/src/commands/liberica/warehouses/locations/list.ts +0 -140
- package/src/commands/liberica/warehouses/locations/update.ts +0 -135
- package/src/commands/liberica/warehouses/update.ts +0 -142
- package/src/core/api/client.ts +0 -4443
- package/src/core/auth/token-manager.ts +0 -183
- package/src/core/config/manager.ts +0 -164
- package/src/index.ts +0 -35
- package/src/types/calendar.ts +0 -36
- package/src/types/client-contact.ts +0 -78
- package/src/types/client.ts +0 -115
- package/src/types/currency.ts +0 -90
- package/src/types/dict.ts +0 -121
- package/src/types/employee.ts +0 -102
- package/src/types/index.ts +0 -93
- package/src/types/location.ts +0 -66
- package/src/types/material.ts +0 -61
- package/src/types/mould-stock-in.ts +0 -82
- package/src/types/mould.ts +0 -74
- package/src/types/operation.ts +0 -72
- package/src/types/org.ts +0 -25
- package/src/types/position.ts +0 -24
- package/src/types/stock.ts +0 -161
- package/src/types/supplier-contact.ts +0 -78
- package/src/types/supplier.ts +0 -66
- package/src/types/team-issue.ts +0 -94
- package/src/types/team-project.ts +0 -74
- package/src/types/team-task.ts +0 -98
- package/src/types/team-work-log.ts +0 -87
- package/src/types/transfer-in-form.ts +0 -265
- package/src/types/transfer-out-form.ts +0 -290
- package/src/types/uom.ts +0 -60
- package/src/types/user.ts +0 -64
- package/src/types/warehouse.ts +0 -82
|
@@ -1,341 +0,0 @@
|
|
|
1
|
-
# Team Issue Commands - Unit Test Design
|
|
2
|
-
|
|
3
|
-
This document defines the unit test scenarios for all Team Issue commands in `barista liberica teams issues`.
|
|
4
|
-
|
|
5
|
-
**Reference implementations:** `src/commands/liberica/teams/issues/*.ts`
|
|
6
|
-
|
|
7
|
-
**Reference test patterns:** `tests/unit/commands/liberica/warehouses/*.test.ts`
|
|
8
|
-
|
|
9
|
-
**Target test files (Wave 3):**
|
|
10
|
-
- `tests/unit/commands/liberica/teams/issues/list.test.ts`
|
|
11
|
-
- `tests/unit/commands/liberica/teams/issues/get.test.ts`
|
|
12
|
-
- `tests/unit/commands/liberica/teams/issues/create.test.ts`
|
|
13
|
-
- `tests/unit/commands/liberica/teams/issues/update.test.ts`
|
|
14
|
-
- `tests/unit/commands/liberica/teams/issues/delete.test.ts`
|
|
15
|
-
- `tests/unit/commands/liberica/teams/issues/close.test.ts`
|
|
16
|
-
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
## Shared Mock Setup
|
|
20
|
-
|
|
21
|
-
All tests should use the standard Vitest mock pattern from warehouse tests.
|
|
22
|
-
|
|
23
|
-
```typescript
|
|
24
|
-
import { describe, it, expect, beforeEach, vi } from 'vitest';
|
|
25
|
-
|
|
26
|
-
vi.mock('chalk', () => ({
|
|
27
|
-
default: {
|
|
28
|
-
bold: vi.fn((text) => text),
|
|
29
|
-
green: vi.fn((text) => text),
|
|
30
|
-
red: vi.fn((text) => text),
|
|
31
|
-
gray: vi.fn((text) => text),
|
|
32
|
-
cyan: vi.fn((text) => text),
|
|
33
|
-
yellow: vi.fn((text) => text),
|
|
34
|
-
blue: vi.fn((text) => text),
|
|
35
|
-
},
|
|
36
|
-
}));
|
|
37
|
-
|
|
38
|
-
vi.mock('../../../../../../src/core/config/manager.js', () => ({
|
|
39
|
-
configManager: {
|
|
40
|
-
getCurrentContext: vi.fn(() => ({
|
|
41
|
-
environment: 'dev' as const,
|
|
42
|
-
service: 'liberica' as const,
|
|
43
|
-
tenant: 'test-tenant',
|
|
44
|
-
})),
|
|
45
|
-
},
|
|
46
|
-
}));
|
|
47
|
-
|
|
48
|
-
vi.mock('../../../../../../src/core/auth/token-manager.js', () => ({
|
|
49
|
-
tokenManager: {
|
|
50
|
-
getToken: vi.fn(() => Promise.resolve('test-token')),
|
|
51
|
-
},
|
|
52
|
-
}));
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
---
|
|
56
|
-
|
|
57
|
-
## 1. `list` Command
|
|
58
|
-
|
|
59
|
-
**File:** `src/commands/liberica/teams/issues/list.ts`
|
|
60
|
-
|
|
61
|
-
**API method:** `apiClient.listTeamIssues(environment, tenant, params)`
|
|
62
|
-
|
|
63
|
-
### Test Scenarios
|
|
64
|
-
|
|
65
|
-
#### 1.1 Normal flow - valid input returns expected output
|
|
66
|
-
- Mock `apiClient.listTeamIssues` to return a `TeamIssueListResponse` with 2 rows.
|
|
67
|
-
- Parse `['node', 'test', '--page', '2', '--size', '10']`.
|
|
68
|
-
- Assert `apiClient.listTeamIssues` was called with `pageNo: 1`, `pageSize: 10`.
|
|
69
|
-
- Assert console output contains both issue titles and reporter names.
|
|
70
|
-
|
|
71
|
-
#### 1.2 Missing required parameters - shows helpful error
|
|
72
|
-
- No required parameters exist for `list`. This scenario becomes:
|
|
73
|
-
- Parse with no options (`['node', 'test']`).
|
|
74
|
-
- Assert default `pageNo: 0`, `pageSize: 20` is sent.
|
|
75
|
-
- Assert output is still rendered gracefully (no crash).
|
|
76
|
-
|
|
77
|
-
#### 1.3 Invalid parameter values - validates and reports
|
|
78
|
-
- Parse `['node', 'test', '--page', 'abc']`.
|
|
79
|
-
- `parseInt('abc')` yields `NaN`, resulting in `pageNo: NaN`.
|
|
80
|
-
- Assert command handles this without throwing an unhandled exception (current implementation passes raw `NaN` to API).
|
|
81
|
-
- Test passes invalid `--status` value `PENDING`.
|
|
82
|
-
- Assert API is called with the raw string (filter validation is server-side).
|
|
83
|
-
|
|
84
|
-
#### 1.4 Dry-run mode - not applicable
|
|
85
|
-
- `list` is a read-only command and does not support `--dry-run`.
|
|
86
|
-
- This test should verify that `--dry-run` is ignored or treated as unknown option.
|
|
87
|
-
|
|
88
|
-
#### 1.5 Error response handling - API errors displayed correctly
|
|
89
|
-
- Mock `apiClient.listTeamIssues` to return `{ success: false, error: { code: 'QUERY_FAILED', message: '查询失败' } }`.
|
|
90
|
-
- Assert `process.exit(1)` is triggered and `console.error` contains the error message and code.
|
|
91
|
-
|
|
92
|
-
#### 1.6 JSON output mode
|
|
93
|
-
- Mock success response with 1 row.
|
|
94
|
-
- Parse with `--json`.
|
|
95
|
-
- Assert output is valid JSON containing `success: true`, `items`, and `pagination`.
|
|
96
|
-
|
|
97
|
-
#### 1.7 Empty results handling
|
|
98
|
-
- Mock success response with empty `rows` array.
|
|
99
|
-
- Assert human-readable output contains "No team issues found".
|
|
100
|
-
- For `--json`, assert `items: []` and `totalRows: 0`.
|
|
101
|
-
|
|
102
|
-
---
|
|
103
|
-
|
|
104
|
-
## 2. `get` Command
|
|
105
|
-
|
|
106
|
-
**File:** `src/commands/liberica/teams/issues/get.ts`
|
|
107
|
-
|
|
108
|
-
**API method:** `apiClient.getTeamIssue(environment, tenant, issueId)`
|
|
109
|
-
|
|
110
|
-
### Test Scenarios
|
|
111
|
-
|
|
112
|
-
#### 2.1 Normal flow - valid input returns expected output
|
|
113
|
-
- Mock `apiClient.getTeamIssue` to return a full `TeamIssue` object.
|
|
114
|
-
- Parse `['node', 'test', '123456789']`.
|
|
115
|
-
- Assert `apiClient.getTeamIssue` called with issue ID `'123456789'`.
|
|
116
|
-
- Assert console output contains `issueTitle`, `teamIssueStatus`, `priority`, `reporterName`.
|
|
117
|
-
|
|
118
|
-
#### 2.2 Missing required parameters - shows helpful error
|
|
119
|
-
- Parse `['node', 'test', '']` (empty issue ID).
|
|
120
|
-
- Assert `console.error` contains "Issue ID is required" and `process.exit(1)`.
|
|
121
|
-
|
|
122
|
-
#### 2.3 Invalid parameter values - validates and reports
|
|
123
|
-
- Parse `['node', 'test', ' ']` (whitespace-only issue ID).
|
|
124
|
-
- Assert same error as empty ID: "Issue ID is required".
|
|
125
|
-
|
|
126
|
-
#### 2.4 Dry-run mode - not applicable
|
|
127
|
-
- `get` is read-only and does not support `--dry-run`.
|
|
128
|
-
- Verify `--dry-run` is not a recognized option.
|
|
129
|
-
|
|
130
|
-
#### 2.5 Error response handling - API errors displayed correctly
|
|
131
|
-
- Mock `apiClient.getTeamIssue` to return `{ success: false, error: { code: 'TEAM_ISSUE_NOT_EXIST', message: '团队问题不存在' } }`.
|
|
132
|
-
- Assert `console.error` contains the message and code, followed by `process.exit(1)`.
|
|
133
|
-
|
|
134
|
-
#### 2.6 JSON output mode
|
|
135
|
-
- Mock success response.
|
|
136
|
-
- Parse `['node', 'test', '123', '--json']`.
|
|
137
|
-
- Assert output is valid JSON with `success: true` and full `data` object.
|
|
138
|
-
|
|
139
|
-
#### 2.7 Null data handling
|
|
140
|
-
- Mock `{ success: true, data: null }`.
|
|
141
|
-
- Assert output shows "Issue not found" and exits with code 1.
|
|
142
|
-
|
|
143
|
-
---
|
|
144
|
-
|
|
145
|
-
## 3. `create` Command
|
|
146
|
-
|
|
147
|
-
**File:** `src/commands/liberica/teams/issues/create.ts`
|
|
148
|
-
|
|
149
|
-
**API method:** `apiClient.createTeamIssue(environment, tenant, request)`
|
|
150
|
-
|
|
151
|
-
### Test Scenarios
|
|
152
|
-
|
|
153
|
-
#### 3.1 Normal flow - valid input returns expected output
|
|
154
|
-
- Parse with all required fields: `--title`, `--desc`, `--type`, `--project-id`, `--project-code`, `--project-name`.
|
|
155
|
-
- Mock `apiClient.createTeamIssue` to return `{ success: true, data: { teamIssueId: '123', ... } }`.
|
|
156
|
-
- Assert API called with correct payload including `reportDate` as ISO string.
|
|
157
|
-
- Assert success message contains "Team issue created successfully" and the returned issue ID.
|
|
158
|
-
|
|
159
|
-
#### 3.2 Missing required parameters - shows helpful error
|
|
160
|
-
- Parse without `--title`.
|
|
161
|
-
- Assert `console.error` (or `console.log` for JSON) contains "--title is required" and exits with code 1.
|
|
162
|
-
- Repeat individually for `--desc`, `--type`, `--project-id`, `--project-code`, `--project-name`.
|
|
163
|
-
|
|
164
|
-
#### 3.3 Invalid parameter values - validates and reports
|
|
165
|
-
- Parse with `--type INVALID_TYPE`.
|
|
166
|
-
- Assert error message lists valid values: `BUG, REQUIREMENT, QUESTION`.
|
|
167
|
-
- Parse with `--priority INVALID`.
|
|
168
|
-
- Assert error message lists valid values: `LOW, MEDIUM, HIGH, URGENT`.
|
|
169
|
-
- Parse with `--status INVALID`.
|
|
170
|
-
- Assert error message lists valid values: `OPEN, IN_PROGRESS, RESOLVED, CLOSED`.
|
|
171
|
-
|
|
172
|
-
#### 3.4 Dry-run mode - shows preview without executing
|
|
173
|
-
- Parse with all required fields plus `--dry-run`.
|
|
174
|
-
- Assert `apiClient.createTeamIssue` is **not** called.
|
|
175
|
-
- Assert console output contains "Dry-Run Mode" and previews the issue fields.
|
|
176
|
-
- Repeat with `--dry-run --json` and assert JSON output contains `dryRun: true`.
|
|
177
|
-
|
|
178
|
-
#### 3.5 Error response handling - API errors displayed correctly
|
|
179
|
-
- Mock API to return `{ success: false, error: { code: 'CREATE_FAILED', message: '创建失败' } }`.
|
|
180
|
-
- Assert `console.error` contains the message and code, then `process.exit(1)`.
|
|
181
|
-
- Test JSON mode: assert output is `{ success: false, error: { code, message } }`.
|
|
182
|
-
|
|
183
|
-
#### 3.6 Comma-separated array parsing
|
|
184
|
-
- Parse with `--assign-to 'user1,user2'` and `--tags 'bug,critical'`.
|
|
185
|
-
- Assert payload contains `assignTo: ['user1', 'user2']` and `tags: ['bug', 'critical']`.
|
|
186
|
-
|
|
187
|
-
#### 3.7 JSON output on success
|
|
188
|
-
- Mock success response.
|
|
189
|
-
- Parse with `--json`.
|
|
190
|
-
- Assert output JSON contains `success: true` and created issue data.
|
|
191
|
-
|
|
192
|
-
---
|
|
193
|
-
|
|
194
|
-
## 4. `update` Command
|
|
195
|
-
|
|
196
|
-
**File:** `src/commands/liberica/teams/issues/update.ts`
|
|
197
|
-
|
|
198
|
-
**API method:** `apiClient.updateTeamIssue(environment, tenant, request)`
|
|
199
|
-
|
|
200
|
-
### Test Scenarios
|
|
201
|
-
|
|
202
|
-
#### 4.1 Normal flow - valid input returns expected output
|
|
203
|
-
- Parse `['node', 'test', '123', '--title', 'Updated Title']`.
|
|
204
|
-
- Mock `apiClient.updateTeamIssue` to return `{ success: true, data: { ... } }`.
|
|
205
|
-
- Assert API called with `{ teamIssueId: '123', issueTitle: 'Updated Title' }`.
|
|
206
|
-
- Assert success message "Team issue updated successfully".
|
|
207
|
-
|
|
208
|
-
#### 4.2 Missing required parameters - shows helpful error
|
|
209
|
-
- Parse `['node', 'test', '123']` with no update fields.
|
|
210
|
-
- Assert `console.error` contains "No fields to update" and exits with code 1.
|
|
211
|
-
|
|
212
|
-
#### 4.3 Invalid parameter values - validates and reports
|
|
213
|
-
- Parse with `--type INVALID_TYPE`.
|
|
214
|
-
- Assert the command still passes the raw value to the API (current implementation does not validate on update).
|
|
215
|
-
- Note: because the command does not validate enums on update, the test documents this behavior.
|
|
216
|
-
|
|
217
|
-
#### 4.4 Dry-run mode - not applicable
|
|
218
|
-
- `update` does not currently support `--dry-run`.
|
|
219
|
-
- Verify `--dry-run` is not a recognized option.
|
|
220
|
-
|
|
221
|
-
#### 4.5 Error response handling - API errors displayed correctly
|
|
222
|
-
- Mock API to return `{ success: false, error: { code: 'UPDATE_FAILED', message: '更新失败' } }`.
|
|
223
|
-
- Assert `console.error` contains the message in plain mode.
|
|
224
|
-
- Assert JSON mode returns `{ success: false, error: ... }` and exits with code 1.
|
|
225
|
-
|
|
226
|
-
#### 4.6 Comma-separated array parsing
|
|
227
|
-
- Parse with `--assign-to 'user1, user2'` and `--tags 'tag1, tag2'`.
|
|
228
|
-
- Assert API payload contains trimmed arrays.
|
|
229
|
-
|
|
230
|
-
#### 4.7 JSON output on success
|
|
231
|
-
- Mock success response.
|
|
232
|
-
- Parse with `--json`.
|
|
233
|
-
- Assert output is valid JSON with `success: true` and `data`.
|
|
234
|
-
|
|
235
|
-
#### 4.8 Unexpected exception handling
|
|
236
|
-
- Mock `apiClient.updateTeamIssue` to throw `new Error('Network failure')`.
|
|
237
|
-
- Assert `console.error` contains "Network failure" and `process.exit(1)`.
|
|
238
|
-
- Test JSON mode returns `{ success: false, error: { message: 'Network failure' } }`.
|
|
239
|
-
|
|
240
|
-
---
|
|
241
|
-
|
|
242
|
-
## 5. `delete` Command
|
|
243
|
-
|
|
244
|
-
**File:** `src/commands/liberica/teams/issues/delete.ts`
|
|
245
|
-
|
|
246
|
-
**API method:** `apiClient.deleteTeamIssue(environment, tenant, issueId)`
|
|
247
|
-
|
|
248
|
-
### Test Scenarios
|
|
249
|
-
|
|
250
|
-
#### 5.1 Normal flow - valid input returns expected output
|
|
251
|
-
- Parse `['node', 'test', '123', '--force']`.
|
|
252
|
-
- Mock `apiClient.deleteTeamIssue` to return `{ success: true, data: { teamIssueId: '123' } }`.
|
|
253
|
-
- Assert API called with issue ID `'123'`.
|
|
254
|
-
- Assert success message contains "Issue 123 deleted".
|
|
255
|
-
|
|
256
|
-
#### 5.2 Missing required parameters - shows helpful error
|
|
257
|
-
- Parse `['node', 'test', '']` (empty issue ID).
|
|
258
|
-
- Assert `console.error` contains "Issue ID is required" and exits with code 1.
|
|
259
|
-
|
|
260
|
-
#### 5.3 Invalid parameter values - validates and reports
|
|
261
|
-
- Parse `['node', 'test', ' ']` (whitespace-only issue ID).
|
|
262
|
-
- Assert same error: "Issue ID is required".
|
|
263
|
-
|
|
264
|
-
#### 5.4 Dry-run mode - shows preview without executing
|
|
265
|
-
- Parse `['node', 'test', '123', '--dry-run']`.
|
|
266
|
-
- Assert `apiClient.deleteTeamIssue` is **not** called.
|
|
267
|
-
- Assert console output contains "Delete Issue (Dry Run)" and issue ID.
|
|
268
|
-
- Repeat with `--dry-run --json` and assert JSON contains `dryRun: true`.
|
|
269
|
-
|
|
270
|
-
#### 5.5 Error response handling - API errors displayed correctly
|
|
271
|
-
- Mock API to return `{ success: false, error: { code: 'DELETE_FAILED', message: '删除失败' } }`.
|
|
272
|
-
- Assert `console.error` contains the message and exits with code 1.
|
|
273
|
-
|
|
274
|
-
#### 5.6 Missing `--force` handling
|
|
275
|
-
- Parse `['node', 'test', '123']` without `--force`.
|
|
276
|
-
- Assert command prints warning "Add --force to confirm deletion" and exits with code 0 (not 1).
|
|
277
|
-
- Assert `apiClient.deleteTeamIssue` is **not** called.
|
|
278
|
-
|
|
279
|
-
#### 5.7 JSON output on success
|
|
280
|
-
- Parse `['node', 'test', '123', '--force', '--json']`.
|
|
281
|
-
- Mock success response.
|
|
282
|
-
- Assert output JSON contains `success: true` and `issueId`.
|
|
283
|
-
|
|
284
|
-
---
|
|
285
|
-
|
|
286
|
-
## 6. `close` Command
|
|
287
|
-
|
|
288
|
-
**File:** `src/commands/liberica/teams/issues/close.ts`
|
|
289
|
-
|
|
290
|
-
**API method:** `apiClient.updateTeamIssue(environment, tenant, request)`
|
|
291
|
-
|
|
292
|
-
### Test Scenarios
|
|
293
|
-
|
|
294
|
-
#### 6.1 Normal flow - valid input returns expected output
|
|
295
|
-
- Parse `['node', 'test', '123']`.
|
|
296
|
-
- Mock `apiClient.updateTeamIssue` to return `{ success: true, data: { teamIssueId: '123', teamIssueStatus: 'CLOSED' } }`.
|
|
297
|
-
- Assert API called with `{ teamIssueId: '123', teamIssueStatus: 'CLOSED' }`.
|
|
298
|
-
- Assert success message contains "Issue 123 closed successfully".
|
|
299
|
-
|
|
300
|
-
#### 6.2 Missing required parameters - shows helpful error
|
|
301
|
-
- Parse `['node', 'test', '']` (empty issue ID).
|
|
302
|
-
- Assert `console.error` contains "Issue ID is required" and exits with code 1.
|
|
303
|
-
|
|
304
|
-
#### 6.3 Invalid parameter values - validates and reports
|
|
305
|
-
- Parse `['node', 'test', ' ']` (whitespace-only issue ID).
|
|
306
|
-
- Assert same error: "Issue ID is required".
|
|
307
|
-
|
|
308
|
-
#### 6.4 Dry-run mode - not applicable
|
|
309
|
-
- `close` does not currently support `--dry-run`.
|
|
310
|
-
- Verify `--dry-run` is not a recognized option.
|
|
311
|
-
|
|
312
|
-
#### 6.5 Error response handling - API errors displayed correctly
|
|
313
|
-
- Mock API to return `{ success: false, error: { code: 'CLOSE_FAILED', message: '关闭失败' } }`.
|
|
314
|
-
- Assert `console.error` contains the message in plain mode.
|
|
315
|
-
- Assert JSON mode returns `{ success: false, error: ... }` and exits with code 1.
|
|
316
|
-
|
|
317
|
-
#### 6.6 JSON output on success
|
|
318
|
-
- Parse `['node', 'test', '123', '--json']`.
|
|
319
|
-
- Mock success response.
|
|
320
|
-
- Assert output is valid JSON with `success: true` and `data`.
|
|
321
|
-
|
|
322
|
-
#### 6.7 Unexpected exception handling
|
|
323
|
-
- Mock `apiClient.updateTeamIssue` to throw `new Error('Connection timeout')`.
|
|
324
|
-
- Assert `console.error` contains "Connection timeout" and `process.exit(1)`.
|
|
325
|
-
- Test JSON mode returns `{ success: false, error: { message: 'Connection timeout' } }`.
|
|
326
|
-
|
|
327
|
-
---
|
|
328
|
-
|
|
329
|
-
## Summary Table
|
|
330
|
-
|
|
331
|
-
| Command | Normal Flow | Missing Params | Invalid Values | Dry-Run | Error Response | Extra Scenarios |
|
|
332
|
-
|---------|-------------|----------------|----------------|---------|----------------|-----------------|
|
|
333
|
-
| `list` | 1.1 | 1.2 | 1.3 | N/A | 1.5 | JSON, empty results |
|
|
334
|
-
| `get` | 2.1 | 2.2 | 2.3 | N/A | 2.5 | JSON, null data |
|
|
335
|
-
| `create`| 3.1 | 3.2 | 3.3 | 3.4 | 3.5 | Arrays, JSON |
|
|
336
|
-
| `update`| 4.1 | 4.2 | 4.3 | N/A | 4.5 | Arrays, JSON, exceptions |
|
|
337
|
-
| `delete`| 5.1 | 5.2 | 5.3 | 5.4 | 5.5 | Force check, JSON |
|
|
338
|
-
| `close` | 6.1 | 6.2 | 6.3 | N/A | 6.5 | JSON, exceptions |
|
|
339
|
-
|
|
340
|
-
Total minimum scenarios: 30 (5 per command).
|
|
341
|
-
Total documented scenarios: 38 (includes edge cases and output-format tests).
|
|
@@ -1,202 +0,0 @@
|
|
|
1
|
-
# barista liberica teams issues update
|
|
2
|
-
|
|
3
|
-
更新团队问题。
|
|
4
|
-
|
|
5
|
-
## 2.1 命令元数据
|
|
6
|
-
|
|
7
|
-
| 字段 | 值 |
|
|
8
|
-
|------|-----|
|
|
9
|
-
| 完整命令 | `barista liberica teams issues update <issue-id>` |
|
|
10
|
-
| 功能描述 | 更新已有团队问题的字段信息 |
|
|
11
|
-
| HTTP方法 | POST |
|
|
12
|
-
| 是否需要认证 | ✅ 是 |
|
|
13
|
-
| 是否支持dry-run | ✅ 是 |
|
|
14
|
-
|
|
15
|
-
## 2.2 后端接口引用
|
|
16
|
-
|
|
17
|
-
### Controller位置
|
|
18
|
-
```
|
|
19
|
-
coffee-liberica-end/
|
|
20
|
-
└── facade/liberica-facade-enterprise/
|
|
21
|
-
└── src/main/java/com/newpeak/liberica/facade/enterprise/controller/team/
|
|
22
|
-
└── EnterpriseTeamIssueController.java
|
|
23
|
-
└── edit(@PostResource(path = "/edit", requiredPermission = true, requirePermissionCode = TeamIssuePermissionConstants.EDIT_TEAM_ISSUE))
|
|
24
|
-
└── public ResponseData<? extends TeamIssueResponse> edit(
|
|
25
|
-
@RequestHeader("X-TENANT-ID") Long tenantId,
|
|
26
|
-
@RequestBody @Validated(BaseRequest.edit.class) TeamIssueRequest teamIssueRequest
|
|
27
|
-
)
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
### Request DTO位置
|
|
31
|
-
```
|
|
32
|
-
coffee-liberica-end/
|
|
33
|
-
└── business/liberica-business-team/team-api/
|
|
34
|
-
└── src/main/java/com/newpeak/liberica/team/api/pojo/request/
|
|
35
|
-
└── TeamIssueRequest.java
|
|
36
|
-
├── teamIssueId: Long (@NotNull on edit)
|
|
37
|
-
├── teamIssueCode: String (max=255)
|
|
38
|
-
├── issueTitle: String (@NotBlank, max=500)
|
|
39
|
-
├── issueType: String (max=20)
|
|
40
|
-
├── issueDesc: String (@NotNull)
|
|
41
|
-
├── projectId: Long (@NotNull)
|
|
42
|
-
├── projectCode: String (@NotBlank, max=50)
|
|
43
|
-
├── projectName: String (@NotBlank, max=200)
|
|
44
|
-
├── reporterAccount: String (max=255)
|
|
45
|
-
├── reporterName: String (@NotBlank, max=100)
|
|
46
|
-
├── reporterEmail: String (@NotBlank, max=200)
|
|
47
|
-
├── reportDate: Date
|
|
48
|
-
├── assignTo: JSON (@NotNull)
|
|
49
|
-
├── teamIssueStatus: String (@NotBlank, max=20)
|
|
50
|
-
├── priority: String (@NotBlank, max=20)
|
|
51
|
-
├── solution: String
|
|
52
|
-
├── tags: JSON
|
|
53
|
-
└── refId: String (max=255)
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
### Response DTO位置
|
|
57
|
-
```
|
|
58
|
-
coffee-liberica-end/
|
|
59
|
-
└── business/liberica-business-team/team-api/
|
|
60
|
-
└── src/main/java/com/newpeak/liberica/team/api/pojo/response/
|
|
61
|
-
└── TeamIssueResponse.java
|
|
62
|
-
├── teamIssueId: Long
|
|
63
|
-
├── teamIssueCode: String
|
|
64
|
-
├── issueTitle: String
|
|
65
|
-
├── issueType: String
|
|
66
|
-
├── teamIssueStatus: String
|
|
67
|
-
├── priority: String
|
|
68
|
-
├── reporterName: String
|
|
69
|
-
├── projectId: Long
|
|
70
|
-
├── projectCode: String
|
|
71
|
-
├── projectName: String
|
|
72
|
-
└── updateTime: String
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
## 2.3 CLI参数设计
|
|
76
|
-
|
|
77
|
-
### 命令结构
|
|
78
|
-
```
|
|
79
|
-
barista liberica teams issues update <issue-id> [options]
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
### Usage
|
|
83
|
-
```bash
|
|
84
|
-
barista liberica teams issues update 123456789 --title "新标题"
|
|
85
|
-
barista liberica teams issues update 123456789 --status CLOSED
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
### 全局选项
|
|
89
|
-
| 选项 | 类型 | 说明 |
|
|
90
|
-
|------|------|------|
|
|
91
|
-
| `--env` | string | 目标环境(dev\|test\|prod-cn\|prod-jp) |
|
|
92
|
-
| `--tenant` | string | 租户代码 |
|
|
93
|
-
| `--dry-run` | boolean | 预览模式(不实际调用API) |
|
|
94
|
-
| `--json` | boolean | JSON输出 |
|
|
95
|
-
|
|
96
|
-
### 位置参数
|
|
97
|
-
| 参数 | 类型 | 必填 | 说明 |
|
|
98
|
-
|------|------|------|------|
|
|
99
|
-
| issue-id | string | ✅ | 要更新的问题ID |
|
|
100
|
-
|
|
101
|
-
### 命令选项
|
|
102
|
-
| 选项 | 短选项 | 类型 | 必填 | 默认值 | 说明 | 对应DTO字段 |
|
|
103
|
-
|------|--------|------|------|--------|------|-------------|
|
|
104
|
-
| --title | -t | string | ⬜ | - | 问题标题 | issueTitle |
|
|
105
|
-
| --desc | -d | string | ⬜ | - | 问题描述 | issueDesc |
|
|
106
|
-
| --type | -y | string | ⬜ | - | 问题类型(BUG/REQUIREMENT/QUESTION) | issueType |
|
|
107
|
-
| --status | -s | string | ⬜ | - | 问题状态(OPEN/IN_PROGRESS/RESOLVED/CLOSED) | teamIssueStatus |
|
|
108
|
-
| --priority | -p | string | ⬜ | - | 优先级(LOW/MEDIUM/HIGH/URGENT) | priority |
|
|
109
|
-
| --project-id | — | string | ⬜ | - | 所属项目ID | projectId |
|
|
110
|
-
| --project-code | — | string | ⬜ | - | 所属项目代号 | projectCode |
|
|
111
|
-
| --project-name | — | string | ⬜ | - | 所属项目名称 | projectName |
|
|
112
|
-
| --assign-to | -a | string | ⬜ | - | 负责人ID列表,逗号分隔 | assignTo |
|
|
113
|
-
| --tags | — | string | ⬜ | - | 标签列表,逗号分隔 | tags |
|
|
114
|
-
| --json | -j | boolean | ⬜ | false | JSON格式输出 | - |
|
|
115
|
-
|
|
116
|
-
## 2.4 字段映射表
|
|
117
|
-
|
|
118
|
-
| CLI参数 | DTO字段 | 类型转换 | 验证规则 |
|
|
119
|
-
|---------|---------|----------|----------|
|
|
120
|
-
| issue-id (位置参数) | teamIssueId | string→Long | @NotNull |
|
|
121
|
-
| --title / -t | issueTitle | 直接传递 | @NotBlank, max=500 |
|
|
122
|
-
| --desc / -d | issueDesc | 直接传递 | @NotNull |
|
|
123
|
-
| --type / -y | issueType | 直接传递 | BUG, REQUIREMENT, QUESTION |
|
|
124
|
-
| --status / -s | teamIssueStatus | 直接传递 | OPEN, IN_PROGRESS, RESOLVED, CLOSED |
|
|
125
|
-
| --priority / -p | priority | 直接传递 | LOW, MEDIUM, HIGH, URGENT |
|
|
126
|
-
| --project-id | projectId | string→Long | @NotNull |
|
|
127
|
-
| --project-code | projectCode | 直接传递 | @NotBlank, max=50 |
|
|
128
|
-
| --project-name | projectName | 直接传递 | @NotBlank, max=200 |
|
|
129
|
-
| --assign-to / -a | assignTo | string→JSON数组 | @NotNull |
|
|
130
|
-
| --tags | tags | string→JSON数组 | 逗号分隔标签 |
|
|
131
|
-
|
|
132
|
-
## 2.5 错误码引用
|
|
133
|
-
|
|
134
|
-
### ExceptionEnum位置
|
|
135
|
-
```
|
|
136
|
-
coffee-liberica-end/
|
|
137
|
-
└── business/liberica-business-team/team-api/
|
|
138
|
-
└── src/main/java/com/newpeak/liberica/team/api/exception/enums/
|
|
139
|
-
└── TeamIssueExceptionEnum.java
|
|
140
|
-
└── TEAM_ISSUE_NOT_EXIST("01001958001", "团队问题不存在")
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
### Service层业务校验
|
|
144
|
-
```
|
|
145
|
-
coffee-liberica-end/
|
|
146
|
-
└── business/liberica-business-team/team-business/
|
|
147
|
-
└── src/main/java/com/newpeak/liberica/team/modular/business/
|
|
148
|
-
└── TeamIssueBusiness.java
|
|
149
|
-
└── edit(TeamIssueRequest request)
|
|
150
|
-
└── 检查团队问题是否存在
|
|
151
|
-
└── throw new TeamServiceException(TeamIssueExceptionEnum.TEAM_ISSUE_NOT_EXIST)
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
### 已知错误码
|
|
155
|
-
| 错误码 | 错误消息 | 触发条件 |
|
|
156
|
-
|--------|----------|----------|
|
|
157
|
-
| 01001958001 | 团队问题不存在 | 更新的 issue-id 不存在或已被删除 |
|
|
158
|
-
|
|
159
|
-
## 2.6 权限检查
|
|
160
|
-
|
|
161
|
-
| 检查项 | 位置 | 说明 |
|
|
162
|
-
|--------|------|------|
|
|
163
|
-
| PermissionConstants | `TeamIssuePermissionConstants.EDIT_TEAM_ISSUE` | Controller层 `@PostResource(requirePermissionCode = "EDIT_TEAM_ISSUE")` |
|
|
164
|
-
|
|
165
|
-
## 2.7 实现要点
|
|
166
|
-
|
|
167
|
-
1. **必填参数**:`issue-id` 作为位置参数必须提供
|
|
168
|
-
2. **部分更新**:只传入的选项才会被包含在请求体中,未传入的字段保持原值
|
|
169
|
-
3. **assignTo / tags 序列化**:逗号分隔的字符串需要在 CLI 内部转换为 JSON 数组格式
|
|
170
|
-
4. **Dry-run 支持**:使用 `--dry-run` 时构造请求体但不发送,显示预览信息
|
|
171
|
-
5. **状态流转**:不在 CLI 层做状态机校验,直接透传给后端
|
|
172
|
-
6. **ID 类型处理**:`teamIssueId`、`projectId` 后端使用 Long (BigInteger),CLI 使用 string 避免精度丢失
|
|
173
|
-
7. **无 X-TENANT-ID Header**:CLI 不手动添加该 header,租户信息由后端从 JWT 中提取
|
|
174
|
-
|
|
175
|
-
## 2.8 示例用法
|
|
176
|
-
|
|
177
|
-
```bash
|
|
178
|
-
# 更新标题
|
|
179
|
-
barista liberica teams issues update 123456789 --title "修正后的标题"
|
|
180
|
-
|
|
181
|
-
# 更新状态和优先级
|
|
182
|
-
barista liberica teams issues update 123456789 \
|
|
183
|
-
--status IN_PROGRESS \
|
|
184
|
-
--priority HIGH
|
|
185
|
-
|
|
186
|
-
# 更新指派人和标签
|
|
187
|
-
barista liberica teams issues update 123456789 \
|
|
188
|
-
--assign-to "111,222" \
|
|
189
|
-
--tags "前端,紧急"
|
|
190
|
-
|
|
191
|
-
# 更新项目信息
|
|
192
|
-
barista liberica teams issues update 123456789 \
|
|
193
|
-
--project-id 987654321 \
|
|
194
|
-
--project-code "CRM" \
|
|
195
|
-
--project-name "CRM系统"
|
|
196
|
-
|
|
197
|
-
# Dry-run 预览
|
|
198
|
-
barista liberica teams issues update 123456789 --title "测试更新" --dry-run
|
|
199
|
-
|
|
200
|
-
# JSON 输出
|
|
201
|
-
barista liberica teams issues update 123456789 --title "测试更新" --json
|
|
202
|
-
```
|