@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.
Files changed (298) hide show
  1. package/dist/index.js +1 -1
  2. package/package.json +7 -3
  3. package/docs/ARCHITECTURE.md +0 -184
  4. package/docs/COMMANDS.md +0 -352
  5. package/docs/COMMAND_DESIGN_SPEC.md +0 -840
  6. package/docs/INTEGRATION_NOTES.md +0 -270
  7. package/docs/commands/REFERENCE.md +0 -323
  8. package/docs/commands/arabica/auth/index.md +0 -296
  9. package/docs/commands/liberica/auth/index.md +0 -133
  10. package/docs/commands/liberica/calendar/DESIGN.md +0 -333
  11. package/docs/commands/liberica/client-contacts/create.md +0 -152
  12. package/docs/commands/liberica/client-contacts/delete.md +0 -123
  13. package/docs/commands/liberica/client-contacts/get.md +0 -133
  14. package/docs/commands/liberica/client-contacts/list.md +0 -143
  15. package/docs/commands/liberica/client-contacts/update.md +0 -158
  16. package/docs/commands/liberica/context/index.md +0 -60
  17. package/docs/commands/liberica/currency/create.md +0 -145
  18. package/docs/commands/liberica/currency/delete.md +0 -121
  19. package/docs/commands/liberica/currency/disable.md +0 -119
  20. package/docs/commands/liberica/currency/enable.md +0 -115
  21. package/docs/commands/liberica/currency/get.md +0 -118
  22. package/docs/commands/liberica/currency/list.md +0 -149
  23. package/docs/commands/liberica/currency/update.md +0 -141
  24. package/docs/commands/liberica/employees/create.md +0 -185
  25. package/docs/commands/liberica/employees/disable.md +0 -138
  26. package/docs/commands/liberica/employees/enable.md +0 -137
  27. package/docs/commands/liberica/employees/get.md +0 -153
  28. package/docs/commands/liberica/employees/list.md +0 -168
  29. package/docs/commands/liberica/employees/update.md +0 -180
  30. package/docs/commands/liberica/locations/create.md +0 -195
  31. package/docs/commands/liberica/locations/list.md +0 -171
  32. package/docs/commands/liberica/materials/create.md +0 -293
  33. package/docs/commands/liberica/materials/delete.md +0 -240
  34. package/docs/commands/liberica/materials/disable.md +0 -150
  35. package/docs/commands/liberica/materials/enable.md +0 -146
  36. package/docs/commands/liberica/materials/get.md +0 -188
  37. package/docs/commands/liberica/materials/list.md +0 -198
  38. package/docs/commands/liberica/materials/update.md +0 -250
  39. package/docs/commands/liberica/orgs/list.md +0 -62
  40. package/docs/commands/liberica/positions/list.md +0 -61
  41. package/docs/commands/liberica/roles/list.md +0 -67
  42. package/docs/commands/liberica/stock/ledger.md +0 -209
  43. package/docs/commands/liberica/stock/list.md +0 -165
  44. package/docs/commands/liberica/supplier-contacts/create.md +0 -152
  45. package/docs/commands/liberica/supplier-contacts/delete.md +0 -123
  46. package/docs/commands/liberica/supplier-contacts/get.md +0 -133
  47. package/docs/commands/liberica/supplier-contacts/list.md +0 -143
  48. package/docs/commands/liberica/supplier-contacts/update.md +0 -158
  49. package/docs/commands/liberica/teams/issues/close.md +0 -161
  50. package/docs/commands/liberica/teams/issues/create.md +0 -212
  51. package/docs/commands/liberica/teams/issues/delete.md +0 -179
  52. package/docs/commands/liberica/teams/issues/get.md +0 -167
  53. package/docs/commands/liberica/teams/issues/list.md +0 -182
  54. package/docs/commands/liberica/teams/issues/tests-design.md +0 -341
  55. package/docs/commands/liberica/teams/issues/update.md +0 -202
  56. package/docs/commands/liberica/teams/projects/create.md +0 -174
  57. package/docs/commands/liberica/teams/projects/delete.md +0 -180
  58. package/docs/commands/liberica/teams/projects/get.md +0 -150
  59. package/docs/commands/liberica/teams/projects/list.md +0 -179
  60. package/docs/commands/liberica/teams/projects/update.md +0 -175
  61. package/docs/commands/liberica/teams/tasks/create.md +0 -163
  62. package/docs/commands/liberica/teams/tasks/delete.md +0 -109
  63. package/docs/commands/liberica/teams/tasks/get.md +0 -121
  64. package/docs/commands/liberica/teams/tasks/list.md +0 -148
  65. package/docs/commands/liberica/teams/tasks/update.md +0 -158
  66. package/docs/commands/liberica/teams/work-logs/create.md +0 -151
  67. package/docs/commands/liberica/teams/work-logs/delete.md +0 -130
  68. package/docs/commands/liberica/teams/work-logs/get.md +0 -131
  69. package/docs/commands/liberica/teams/work-logs/list.md +0 -153
  70. package/docs/commands/liberica/teams/work-logs/update.md +0 -150
  71. package/docs/commands/liberica/transfer-in-forms/batch-delete.md +0 -157
  72. package/docs/commands/liberica/transfer-in-forms/batch-review.md +0 -157
  73. package/docs/commands/liberica/transfer-in-forms/batch-unreview.md +0 -157
  74. package/docs/commands/liberica/transfer-in-forms/create.md +0 -220
  75. package/docs/commands/liberica/transfer-in-forms/get.md +0 -221
  76. package/docs/commands/liberica/transfer-in-forms/list.md +0 -242
  77. package/docs/commands/liberica/transfer-in-forms/update.md +0 -185
  78. package/docs/commands/liberica/transfer-out-forms/batch-delete.md +0 -187
  79. package/docs/commands/liberica/transfer-out-forms/batch-review.md +0 -157
  80. package/docs/commands/liberica/transfer-out-forms/batch-unreview.md +0 -157
  81. package/docs/commands/liberica/transfer-out-forms/create.md +0 -280
  82. package/docs/commands/liberica/transfer-out-forms/get.md +0 -211
  83. package/docs/commands/liberica/transfer-out-forms/list.md +0 -233
  84. package/docs/commands/liberica/transfer-out-forms/update.md +0 -286
  85. package/docs/commands/liberica/uoms/create.md +0 -136
  86. package/docs/commands/liberica/uoms/delete.md +0 -119
  87. package/docs/commands/liberica/uoms/disable.md +0 -117
  88. package/docs/commands/liberica/uoms/enable.md +0 -115
  89. package/docs/commands/liberica/uoms/get.md +0 -119
  90. package/docs/commands/liberica/uoms/list.md +0 -155
  91. package/docs/commands/liberica/uoms/update.md +0 -148
  92. package/docs/commands/liberica/users/create.md +0 -170
  93. package/docs/commands/liberica/users/get.md +0 -151
  94. package/docs/commands/liberica/users/list.md +0 -175
  95. package/docs/commands/liberica/warehouses/create.md +0 -222
  96. package/docs/commands/liberica/warehouses/list.md +0 -184
  97. package/src/commands/arabica/auth/index.ts +0 -277
  98. package/src/commands/arabica/auth/login.ts +0 -5
  99. package/src/commands/arabica/auth/logout.ts +0 -5
  100. package/src/commands/arabica/auth/register.ts +0 -5
  101. package/src/commands/arabica/auth/status.ts +0 -5
  102. package/src/commands/arabica/index.ts +0 -23
  103. package/src/commands/auth.ts +0 -107
  104. package/src/commands/context.ts +0 -60
  105. package/src/commands/liberica/auth/index.ts +0 -176
  106. package/src/commands/liberica/calendar/index.ts +0 -13
  107. package/src/commands/liberica/calendar/list.ts +0 -214
  108. package/src/commands/liberica/calendar/set.ts +0 -130
  109. package/src/commands/liberica/client-contacts/create.ts +0 -115
  110. package/src/commands/liberica/client-contacts/delete.ts +0 -140
  111. package/src/commands/liberica/client-contacts/get.ts +0 -103
  112. package/src/commands/liberica/client-contacts/index.ts +0 -19
  113. package/src/commands/liberica/client-contacts/list.ts +0 -118
  114. package/src/commands/liberica/client-contacts/update.ts +0 -137
  115. package/src/commands/liberica/clients/create.ts +0 -122
  116. package/src/commands/liberica/clients/delete.ts +0 -125
  117. package/src/commands/liberica/clients/get.ts +0 -88
  118. package/src/commands/liberica/clients/index.ts +0 -19
  119. package/src/commands/liberica/clients/list.ts +0 -123
  120. package/src/commands/liberica/clients/update.ts +0 -103
  121. package/src/commands/liberica/context/index.ts +0 -43
  122. package/src/commands/liberica/currency/create.ts +0 -183
  123. package/src/commands/liberica/currency/delete.ts +0 -124
  124. package/src/commands/liberica/currency/disable.ts +0 -147
  125. package/src/commands/liberica/currency/enable.ts +0 -128
  126. package/src/commands/liberica/currency/get.ts +0 -91
  127. package/src/commands/liberica/currency/index.ts +0 -23
  128. package/src/commands/liberica/currency/list.ts +0 -140
  129. package/src/commands/liberica/currency/update.ts +0 -129
  130. package/src/commands/liberica/dict-types/get.ts +0 -74
  131. package/src/commands/liberica/dict-types/index.ts +0 -15
  132. package/src/commands/liberica/dict-types/list.ts +0 -118
  133. package/src/commands/liberica/dict-types/update.ts +0 -134
  134. package/src/commands/liberica/dicts/create.ts +0 -175
  135. package/src/commands/liberica/dicts/delete.ts +0 -107
  136. package/src/commands/liberica/dicts/get.ts +0 -80
  137. package/src/commands/liberica/dicts/index.ts +0 -19
  138. package/src/commands/liberica/dicts/list.ts +0 -114
  139. package/src/commands/liberica/dicts/update.ts +0 -116
  140. package/src/commands/liberica/employees/create.ts +0 -275
  141. package/src/commands/liberica/employees/delete.ts +0 -122
  142. package/src/commands/liberica/employees/disable.ts +0 -97
  143. package/src/commands/liberica/employees/enable.ts +0 -97
  144. package/src/commands/liberica/employees/get.ts +0 -115
  145. package/src/commands/liberica/employees/index.ts +0 -23
  146. package/src/commands/liberica/employees/list.ts +0 -131
  147. package/src/commands/liberica/employees/update.ts +0 -157
  148. package/src/commands/liberica/index.ts +0 -81
  149. package/src/commands/liberica/materials/create.ts +0 -199
  150. package/src/commands/liberica/materials/delete.ts +0 -105
  151. package/src/commands/liberica/materials/disable.ts +0 -148
  152. package/src/commands/liberica/materials/enable.ts +0 -129
  153. package/src/commands/liberica/materials/get.ts +0 -83
  154. package/src/commands/liberica/materials/index.ts +0 -23
  155. package/src/commands/liberica/materials/list.ts +0 -142
  156. package/src/commands/liberica/materials/update.ts +0 -125
  157. package/src/commands/liberica/mould/get.ts +0 -111
  158. package/src/commands/liberica/mould/index.ts +0 -17
  159. package/src/commands/liberica/mould/list.ts +0 -157
  160. package/src/commands/liberica/mould/set-status.ts +0 -99
  161. package/src/commands/liberica/mould/stock-in.ts +0 -165
  162. package/src/commands/liberica/operations/active.ts +0 -153
  163. package/src/commands/liberica/operations/batch-delete.ts +0 -131
  164. package/src/commands/liberica/operations/copy.ts +0 -138
  165. package/src/commands/liberica/operations/create.ts +0 -223
  166. package/src/commands/liberica/operations/deactive.ts +0 -152
  167. package/src/commands/liberica/operations/delete.ts +0 -128
  168. package/src/commands/liberica/operations/design.md +0 -587
  169. package/src/commands/liberica/operations/get.ts +0 -112
  170. package/src/commands/liberica/operations/index.ts +0 -27
  171. package/src/commands/liberica/operations/list.ts +0 -180
  172. package/src/commands/liberica/operations/update.ts +0 -218
  173. package/src/commands/liberica/orgs/index.ts +0 -34
  174. package/src/commands/liberica/positions/index.ts +0 -30
  175. package/src/commands/liberica/roles/index.ts +0 -59
  176. package/src/commands/liberica/stock/index.ts +0 -13
  177. package/src/commands/liberica/stock/ledger.ts +0 -159
  178. package/src/commands/liberica/stock/list.ts +0 -128
  179. package/src/commands/liberica/supplier-contacts/create.ts +0 -120
  180. package/src/commands/liberica/supplier-contacts/delete.ts +0 -88
  181. package/src/commands/liberica/supplier-contacts/get.ts +0 -94
  182. package/src/commands/liberica/supplier-contacts/index.ts +0 -19
  183. package/src/commands/liberica/supplier-contacts/list.ts +0 -130
  184. package/src/commands/liberica/supplier-contacts/update.ts +0 -127
  185. package/src/commands/liberica/suppliers/create.ts +0 -149
  186. package/src/commands/liberica/suppliers/delete.ts +0 -102
  187. package/src/commands/liberica/suppliers/disable.ts +0 -145
  188. package/src/commands/liberica/suppliers/enable.ts +0 -126
  189. package/src/commands/liberica/suppliers/get.ts +0 -86
  190. package/src/commands/liberica/suppliers/index.ts +0 -23
  191. package/src/commands/liberica/suppliers/list.ts +0 -134
  192. package/src/commands/liberica/suppliers/update.ts +0 -128
  193. package/src/commands/liberica/teams/index.ts +0 -17
  194. package/src/commands/liberica/teams/issues/close.ts +0 -104
  195. package/src/commands/liberica/teams/issues/create.ts +0 -254
  196. package/src/commands/liberica/teams/issues/delete.ts +0 -58
  197. package/src/commands/liberica/teams/issues/get.ts +0 -78
  198. package/src/commands/liberica/teams/issues/index.ts +0 -21
  199. package/src/commands/liberica/teams/issues/list.ts +0 -144
  200. package/src/commands/liberica/teams/issues/update.ts +0 -141
  201. package/src/commands/liberica/teams/projects/create.ts +0 -159
  202. package/src/commands/liberica/teams/projects/delete.ts +0 -58
  203. package/src/commands/liberica/teams/projects/get.ts +0 -87
  204. package/src/commands/liberica/teams/projects/index.ts +0 -19
  205. package/src/commands/liberica/teams/projects/list.ts +0 -147
  206. package/src/commands/liberica/teams/projects/update.ts +0 -117
  207. package/src/commands/liberica/teams/tasks/create.ts +0 -102
  208. package/src/commands/liberica/teams/tasks/delete.ts +0 -92
  209. package/src/commands/liberica/teams/tasks/get.ts +0 -64
  210. package/src/commands/liberica/teams/tasks/index.ts +0 -19
  211. package/src/commands/liberica/teams/tasks/list.ts +0 -102
  212. package/src/commands/liberica/teams/tasks/update.ts +0 -122
  213. package/src/commands/liberica/teams/work-logs/create.ts +0 -204
  214. package/src/commands/liberica/teams/work-logs/delete.ts +0 -58
  215. package/src/commands/liberica/teams/work-logs/get.ts +0 -87
  216. package/src/commands/liberica/teams/work-logs/index.ts +0 -19
  217. package/src/commands/liberica/teams/work-logs/list.ts +0 -141
  218. package/src/commands/liberica/teams/work-logs/update.ts +0 -120
  219. package/src/commands/liberica/transfer-in-forms/batch-delete.ts +0 -152
  220. package/src/commands/liberica/transfer-in-forms/batch-review.ts +0 -151
  221. package/src/commands/liberica/transfer-in-forms/batch-unreview.ts +0 -152
  222. package/src/commands/liberica/transfer-in-forms/create.ts +0 -179
  223. package/src/commands/liberica/transfer-in-forms/get.ts +0 -107
  224. package/src/commands/liberica/transfer-in-forms/index.ts +0 -23
  225. package/src/commands/liberica/transfer-in-forms/list.ts +0 -97
  226. package/src/commands/liberica/transfer-in-forms/update.ts +0 -213
  227. package/src/commands/liberica/transfer-out-forms/batch-delete.ts +0 -83
  228. package/src/commands/liberica/transfer-out-forms/batch-review.ts +0 -148
  229. package/src/commands/liberica/transfer-out-forms/batch-unreview.ts +0 -56
  230. package/src/commands/liberica/transfer-out-forms/create.ts +0 -194
  231. package/src/commands/liberica/transfer-out-forms/get.ts +0 -114
  232. package/src/commands/liberica/transfer-out-forms/index.ts +0 -23
  233. package/src/commands/liberica/transfer-out-forms/list.ts +0 -125
  234. package/src/commands/liberica/transfer-out-forms/update.ts +0 -197
  235. package/src/commands/liberica/uoms/create.ts +0 -134
  236. package/src/commands/liberica/uoms/delete.ts +0 -105
  237. package/src/commands/liberica/uoms/disable.ts +0 -148
  238. package/src/commands/liberica/uoms/enable.ts +0 -129
  239. package/src/commands/liberica/uoms/get.ts +0 -83
  240. package/src/commands/liberica/uoms/index.ts +0 -23
  241. package/src/commands/liberica/uoms/list.ts +0 -129
  242. package/src/commands/liberica/uoms/update.ts +0 -124
  243. package/src/commands/liberica/users/create.ts +0 -133
  244. package/src/commands/liberica/users/delete.ts +0 -49
  245. package/src/commands/liberica/users/disable.ts +0 -41
  246. package/src/commands/liberica/users/enable.ts +0 -30
  247. package/src/commands/liberica/users/get.ts +0 -46
  248. package/src/commands/liberica/users/index.ts +0 -27
  249. package/src/commands/liberica/users/list.ts +0 -68
  250. package/src/commands/liberica/users/me.ts +0 -42
  251. package/src/commands/liberica/users/reset-password.ts +0 -42
  252. package/src/commands/liberica/users/update.ts +0 -48
  253. package/src/commands/liberica/warehouses/create.ts +0 -204
  254. package/src/commands/liberica/warehouses/delete.ts +0 -112
  255. package/src/commands/liberica/warehouses/disable.ts +0 -174
  256. package/src/commands/liberica/warehouses/enable.ts +0 -174
  257. package/src/commands/liberica/warehouses/get.ts +0 -101
  258. package/src/commands/liberica/warehouses/index.ts +0 -25
  259. package/src/commands/liberica/warehouses/list.ts +0 -136
  260. package/src/commands/liberica/warehouses/locations/create.ts +0 -209
  261. package/src/commands/liberica/warehouses/locations/delete.ts +0 -116
  262. package/src/commands/liberica/warehouses/locations/disable.ts +0 -174
  263. package/src/commands/liberica/warehouses/locations/enable.ts +0 -174
  264. package/src/commands/liberica/warehouses/locations/get.ts +0 -84
  265. package/src/commands/liberica/warehouses/locations/index.ts +0 -23
  266. package/src/commands/liberica/warehouses/locations/list.ts +0 -140
  267. package/src/commands/liberica/warehouses/locations/update.ts +0 -135
  268. package/src/commands/liberica/warehouses/update.ts +0 -142
  269. package/src/core/api/client.ts +0 -4443
  270. package/src/core/auth/token-manager.ts +0 -183
  271. package/src/core/config/manager.ts +0 -164
  272. package/src/index.ts +0 -35
  273. package/src/types/calendar.ts +0 -36
  274. package/src/types/client-contact.ts +0 -78
  275. package/src/types/client.ts +0 -115
  276. package/src/types/currency.ts +0 -90
  277. package/src/types/dict.ts +0 -121
  278. package/src/types/employee.ts +0 -102
  279. package/src/types/index.ts +0 -93
  280. package/src/types/location.ts +0 -66
  281. package/src/types/material.ts +0 -61
  282. package/src/types/mould-stock-in.ts +0 -82
  283. package/src/types/mould.ts +0 -74
  284. package/src/types/operation.ts +0 -72
  285. package/src/types/org.ts +0 -25
  286. package/src/types/position.ts +0 -24
  287. package/src/types/stock.ts +0 -161
  288. package/src/types/supplier-contact.ts +0 -78
  289. package/src/types/supplier.ts +0 -66
  290. package/src/types/team-issue.ts +0 -94
  291. package/src/types/team-project.ts +0 -74
  292. package/src/types/team-task.ts +0 -98
  293. package/src/types/team-work-log.ts +0 -87
  294. package/src/types/transfer-in-form.ts +0 -265
  295. package/src/types/transfer-out-form.ts +0 -290
  296. package/src/types/uom.ts +0 -60
  297. package/src/types/user.ts +0 -64
  298. 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
- ```