@steedos-labs/content-compliance 0.8.25 → 0.8.27

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.
@@ -0,0 +1,389 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var tslib_1 = require("tslib");
4
+ var fs = require("fs");
5
+ var path = require("path");
6
+ var yaml = require("js-yaml");
7
+ var lodash = require("lodash");
8
+ var triggerPath = path.resolve(__dirname, '../../..', 'main/default/triggers/pepsico_material_approval_change.trigger.yml');
9
+ var AsyncFunction = Object.getPrototypeOf(function () {
10
+ return tslib_1.__awaiter(this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
11
+ return [2];
12
+ }); });
13
+ }).constructor;
14
+ var loadHandler = function () {
15
+ var meta = yaml.safeLoad(fs.readFileSync(triggerPath, 'utf8'));
16
+ return new AsyncFunction('ctx', 'global', 'process', 'console', meta.handler);
17
+ };
18
+ var MATRIX_ROW = {
19
+ _id: 'matrix-1',
20
+ ns_reviewer: ['ns-u'],
21
+ ns_assistance: ['ns-a'],
22
+ legal_reviewer: ['legal-u'],
23
+ sra_reviewer: ['sra-u'],
24
+ ca_reviewer: ['ca-u'],
25
+ qc_reviewer: ['qc-u'],
26
+ can_pass_users: ['skip-u'],
27
+ pre_ns_reviewer: 'pre-ns-u',
28
+ reviewer: ['fixed-u']
29
+ };
30
+ var buildCtx = function (_a) {
31
+ var doc = _a.doc, _b = _a.previousDoc, previousDoc = _b === void 0 ? null : _b, _c = _a.isInsert, isInsert = _c === void 0 ? true : _c, _d = _a.matrixRows, matrixRows = _d === void 0 ? [] : _d;
32
+ var logsStub = { directInsert: jest.fn().mockResolvedValue({}) };
33
+ var reviewerStub = { directFind: jest.fn().mockResolvedValue(matrixRows) };
34
+ var fallback = { directFind: jest.fn().mockResolvedValue([]), directInsert: jest.fn().mockResolvedValue({}) };
35
+ var ctx = {
36
+ params: { doc: doc, previousDoc: previousDoc, isInsert: isInsert, userId: 'submitter-u', spaceId: 'space-1', id: doc._id },
37
+ getObject: jest.fn(function (name) {
38
+ if (name === 'pepsico_reviewer')
39
+ return reviewerStub;
40
+ if (name === 'logs')
41
+ return logsStub;
42
+ return fallback;
43
+ })
44
+ };
45
+ return { ctx: ctx, logsStub: logsStub, reviewerStub: reviewerStub };
46
+ };
47
+ var run = function (ctx, env) {
48
+ if (env === void 0) { env = {}; }
49
+ return loadHandler()(ctx, { _: lodash }, { env: env }, { error: jest.fn(), log: jest.fn() });
50
+ };
51
+ var baseDoc = function (overrides) {
52
+ if (overrides === void 0) { overrides = {}; }
53
+ return (tslib_1.__assign({ _id: 'approval-1', name: '2609095607', space: 'space-1', classification: 'MD-SC1-SC16', product: '16541517620103133', owner_department: 'org-1' }, overrides));
54
+ };
55
+ describe('pepsico_material_approval_change 保存时校验审核人 (#450)', function () {
56
+ it('新建时审核人全空 -> 按角色矩阵补齐, 放行', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
57
+ var doc, _a, ctx, reviewerStub, filters;
58
+ return tslib_1.__generator(this, function (_b) {
59
+ switch (_b.label) {
60
+ case 0:
61
+ doc = baseDoc({ approval_type: 'departmental_review' });
62
+ _a = buildCtx({ doc: doc, matrixRows: [MATRIX_ROW] }), ctx = _a.ctx, reviewerStub = _a.reviewerStub;
63
+ return [4, run(ctx)];
64
+ case 1:
65
+ _b.sent();
66
+ expect(doc).toMatchObject({
67
+ ns_reviewer: ['ns-u'],
68
+ legal_reviewer: ['legal-u'],
69
+ sra_reviewer: ['sra-u'],
70
+ ca_reviewer: ['ca-u'],
71
+ ns_assistance: ['ns-a'],
72
+ pre_ns_reviewer: 'pre-ns-u',
73
+ can_pass_users: ['skip-u']
74
+ });
75
+ filters = reviewerStub.directFind.mock.calls[0][0].filters;
76
+ expect(filters).toEqual(expect.arrayContaining([
77
+ ['classification', '=', 'MD-SC1-SC16'],
78
+ ['product', '=', '16541517620103133'],
79
+ ['org', '=', 'org-1']
80
+ ]));
81
+ return [2];
82
+ }
83
+ });
84
+ }); });
85
+ it('approval_type 为空也要校验 —— 旧逻辑正是在这里整体跳过的', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
86
+ var doc, ctx;
87
+ return tslib_1.__generator(this, function (_a) {
88
+ switch (_a.label) {
89
+ case 0:
90
+ doc = baseDoc();
91
+ ctx = buildCtx({ doc: doc, matrixRows: [] }).ctx;
92
+ return [4, expect(run(ctx)).rejects.toThrow(/缺少NS、Legal、SRA、CA审核人/)];
93
+ case 1:
94
+ _a.sent();
95
+ return [2];
96
+ }
97
+ });
98
+ }); });
99
+ it('approval_type 为空但四部门齐全 -> 放行', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
100
+ var doc, ctx;
101
+ return tslib_1.__generator(this, function (_a) {
102
+ switch (_a.label) {
103
+ case 0:
104
+ doc = baseDoc({
105
+ ns_reviewer: ['a'], legal_reviewer: ['b'], sra_reviewer: ['c'], ca_reviewer: ['d']
106
+ });
107
+ ctx = buildCtx({ doc: doc, matrixRows: [] }).ctx;
108
+ return [4, expect(run(ctx)).resolves.toBeUndefined()];
109
+ case 1:
110
+ _a.sent();
111
+ return [2];
112
+ }
113
+ });
114
+ }); });
115
+ it('approval_type 为空但已有固定审核人 -> 放行(走固定人员分支)', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
116
+ var doc, ctx;
117
+ return tslib_1.__generator(this, function (_a) {
118
+ switch (_a.label) {
119
+ case 0:
120
+ doc = baseDoc({ reviewer: ['fixed-u'] });
121
+ ctx = buildCtx({ doc: doc, matrixRows: [] }).ctx;
122
+ return [4, expect(run(ctx)).resolves.toBeUndefined()];
123
+ case 1:
124
+ _a.sent();
125
+ return [2];
126
+ }
127
+ });
128
+ }); });
129
+ it('草稿更新时只校验合并后的记录, 不碰审核人的编辑不会被误拦', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
130
+ var doc, previousDoc, _a, ctx, reviewerStub;
131
+ return tslib_1.__generator(this, function (_b) {
132
+ switch (_b.label) {
133
+ case 0:
134
+ doc = { remark: '改个备注' };
135
+ previousDoc = baseDoc({
136
+ current_step: 'draft',
137
+ approval_type: 'departmental_review',
138
+ ns_reviewer: ['a'], legal_reviewer: ['b'], sra_reviewer: ['c'], ca_reviewer: ['d']
139
+ });
140
+ _a = buildCtx({ doc: doc, previousDoc: previousDoc, isInsert: false, matrixRows: [MATRIX_ROW] }), ctx = _a.ctx, reviewerStub = _a.reviewerStub;
141
+ return [4, expect(run(ctx)).resolves.toBeUndefined()];
142
+ case 1:
143
+ _b.sent();
144
+ expect(doc.ns_reviewer).toBeUndefined();
145
+ expect(reviewerStub.directFind).toHaveBeenCalled();
146
+ return [2];
147
+ }
148
+ });
149
+ }); });
150
+ it('草稿更新时把审核人清空 -> 拦下(旧逻辑 update 完全不校验)', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
151
+ var doc, previousDoc, ctx;
152
+ return tslib_1.__generator(this, function (_a) {
153
+ switch (_a.label) {
154
+ case 0:
155
+ doc = { ns_reviewer: [], legal_reviewer: [], sra_reviewer: [], ca_reviewer: [] };
156
+ previousDoc = baseDoc({
157
+ current_step: 'draft',
158
+ approval_type: 'departmental_review',
159
+ ns_reviewer: ['a'], legal_reviewer: ['b'], sra_reviewer: ['c'], ca_reviewer: ['d']
160
+ });
161
+ ctx = buildCtx({ doc: doc, previousDoc: previousDoc, isInsert: false, matrixRows: [] }).ctx;
162
+ return [4, expect(run(ctx)).rejects.toThrow(/缺少NS、Legal、SRA、CA审核人/)];
163
+ case 1:
164
+ _a.sent();
165
+ return [2];
166
+ }
167
+ });
168
+ }); });
169
+ it('只补空, 不覆盖已有值', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
170
+ var doc, ctx;
171
+ return tslib_1.__generator(this, function (_a) {
172
+ switch (_a.label) {
173
+ case 0:
174
+ doc = baseDoc({ approval_type: 'departmental_review', ns_reviewer: ['manual-ns'] });
175
+ ctx = buildCtx({ doc: doc, matrixRows: [MATRIX_ROW] }).ctx;
176
+ return [4, run(ctx)];
177
+ case 1:
178
+ _a.sent();
179
+ expect(doc.ns_reviewer).toEqual(['manual-ns']);
180
+ expect(doc.ca_reviewer).toEqual(['ca-u']);
181
+ return [2];
182
+ }
183
+ });
184
+ }); });
185
+ it('矩阵命中但该格没配全 -> 指明缺哪几个部门', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
186
+ var doc, ctx;
187
+ return tslib_1.__generator(this, function (_a) {
188
+ switch (_a.label) {
189
+ case 0:
190
+ doc = baseDoc({ approval_type: 'departmental_review' });
191
+ ctx = buildCtx({ doc: doc, matrixRows: [{ _id: 'matrix-2', ns_reviewer: ['ns-u'] }] }).ctx;
192
+ return [4, expect(run(ctx)).rejects.toThrow(/缺少Legal、SRA、CA审核人/)];
193
+ case 1:
194
+ _a.sent();
195
+ return [2];
196
+ }
197
+ });
198
+ }); });
199
+ it('ec_has_detail_page=yes 时 QC 也必填', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
200
+ var doc, ctx;
201
+ return tslib_1.__generator(this, function (_a) {
202
+ switch (_a.label) {
203
+ case 0:
204
+ doc = baseDoc({ approval_type: 'departmental_review', ec_has_detail_page: 'yes' });
205
+ ctx = buildCtx({ doc: doc, matrixRows: [tslib_1.__assign(tslib_1.__assign({}, MATRIX_ROW), { qc_reviewer: null })] }).ctx;
206
+ return [4, expect(run(ctx)).rejects.toThrow(/缺少QC审核人/)];
207
+ case 1:
208
+ _a.sent();
209
+ return [2];
210
+ }
211
+ });
212
+ }); });
213
+ it('固定人员审核只要求 reviewer', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
214
+ var doc, ctx;
215
+ return tslib_1.__generator(this, function (_a) {
216
+ switch (_a.label) {
217
+ case 0:
218
+ doc = baseDoc({ approval_type: 'personnel_review' });
219
+ ctx = buildCtx({ doc: doc, matrixRows: [{ _id: 'matrix-3', reviewer: ['fixed-u'] }] }).ctx;
220
+ return [4, run(ctx)];
221
+ case 1:
222
+ _a.sent();
223
+ expect(doc.reviewer).toEqual(['fixed-u']);
224
+ return [2];
225
+ }
226
+ });
227
+ }); });
228
+ it('固定人员审核缺 reviewer -> 拦下', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
229
+ var doc, ctx;
230
+ return tslib_1.__generator(this, function (_a) {
231
+ switch (_a.label) {
232
+ case 0:
233
+ doc = baseDoc({ approval_type: 'personnel_review' });
234
+ ctx = buildCtx({ doc: doc, matrixRows: [] }).ctx;
235
+ return [4, expect(run(ctx)).rejects.toThrow(/缺少固定审核人/)];
236
+ case 1:
237
+ _a.sent();
238
+ return [2];
239
+ }
240
+ });
241
+ }); });
242
+ it('DCO 分类跳过校验, 不查矩阵', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
243
+ var doc, _a, ctx, reviewerStub;
244
+ return tslib_1.__generator(this, function (_b) {
245
+ switch (_b.label) {
246
+ case 0:
247
+ doc = baseDoc({ classification: 'MD-PO1-PO18' });
248
+ _a = buildCtx({ doc: doc, matrixRows: [] }), ctx = _a.ctx, reviewerStub = _a.reviewerStub;
249
+ return [4, expect(run(ctx)).resolves.toBeUndefined()];
250
+ case 1:
251
+ _b.sent();
252
+ expect(reviewerStub.directFind).not.toHaveBeenCalled();
253
+ return [2];
254
+ }
255
+ });
256
+ }); });
257
+ it('DCO 分类可由 CONTENT_DCO_TYPES 覆盖', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
258
+ var doc, _a, ctx, reviewerStub;
259
+ return tslib_1.__generator(this, function (_b) {
260
+ switch (_b.label) {
261
+ case 0:
262
+ doc = baseDoc({ classification: 'X-1' });
263
+ _a = buildCtx({ doc: doc, matrixRows: [] }), ctx = _a.ctx, reviewerStub = _a.reviewerStub;
264
+ return [4, expect(run(ctx, { CONTENT_DCO_TYPES: 'X-1,Y-2' })).resolves.toBeUndefined()];
265
+ case 1:
266
+ _b.sent();
267
+ expect(reviewerStub.directFind).not.toHaveBeenCalled();
268
+ return [2];
269
+ }
270
+ });
271
+ }); });
272
+ it('只管草稿: 已进入流程的单保存时不校验', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
273
+ var inFlight, inFlight_1, inFlight_1_1, step, doc, previousDoc, _a, ctx, reviewerStub, e_1_1;
274
+ var e_1, _b;
275
+ return tslib_1.__generator(this, function (_c) {
276
+ switch (_c.label) {
277
+ case 0:
278
+ inFlight = ['ai_review', 'departmental_review', 'personnel_review', 'submitter_revisions', 'awaiting_deployment', 'conclusion'];
279
+ _c.label = 1;
280
+ case 1:
281
+ _c.trys.push([1, 6, 7, 8]);
282
+ inFlight_1 = tslib_1.__values(inFlight), inFlight_1_1 = inFlight_1.next();
283
+ _c.label = 2;
284
+ case 2:
285
+ if (!!inFlight_1_1.done) return [3, 5];
286
+ step = inFlight_1_1.value;
287
+ doc = { remark: '流程中改点东西' };
288
+ previousDoc = baseDoc({ current_step: step });
289
+ _a = buildCtx({ doc: doc, previousDoc: previousDoc, isInsert: false, matrixRows: [] }), ctx = _a.ctx, reviewerStub = _a.reviewerStub;
290
+ return [4, expect(run(ctx)).resolves.toBeUndefined()];
291
+ case 3:
292
+ _c.sent();
293
+ expect(reviewerStub.directFind).not.toHaveBeenCalled();
294
+ _c.label = 4;
295
+ case 4:
296
+ inFlight_1_1 = inFlight_1.next();
297
+ return [3, 2];
298
+ case 5: return [3, 8];
299
+ case 6:
300
+ e_1_1 = _c.sent();
301
+ e_1 = { error: e_1_1 };
302
+ return [3, 8];
303
+ case 7:
304
+ try {
305
+ if (inFlight_1_1 && !inFlight_1_1.done && (_b = inFlight_1.return)) _b.call(inFlight_1);
306
+ }
307
+ finally { if (e_1) throw e_1.error; }
308
+ return [7];
309
+ case 8: return [2];
310
+ }
311
+ });
312
+ }); });
313
+ it('已中止的草稿不再校验, 避免挡住收尾操作', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
314
+ var doc, previousDoc, _a, ctx, reviewerStub;
315
+ return tslib_1.__generator(this, function (_b) {
316
+ switch (_b.label) {
317
+ case 0:
318
+ doc = { remark: 'x' };
319
+ previousDoc = baseDoc({ current_step: 'draft', review_status: 'terminated' });
320
+ _a = buildCtx({ doc: doc, previousDoc: previousDoc, isInsert: false, matrixRows: [] }), ctx = _a.ctx, reviewerStub = _a.reviewerStub;
321
+ return [4, expect(run(ctx)).resolves.toBeUndefined()];
322
+ case 1:
323
+ _b.sent();
324
+ expect(reviewerStub.directFind).not.toHaveBeenCalled();
325
+ return [2];
326
+ }
327
+ });
328
+ }); });
329
+ it('被拦下时把原始ID写进系统日志供管理员定位', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
330
+ var doc, _a, ctx, logsStub, logged;
331
+ return tslib_1.__generator(this, function (_b) {
332
+ switch (_b.label) {
333
+ case 0:
334
+ doc = baseDoc({ approval_type: 'departmental_review' });
335
+ _a = buildCtx({ doc: doc, matrixRows: [] }), ctx = _a.ctx, logsStub = _a.logsStub;
336
+ return [4, run(ctx).catch(function () { return null; })];
337
+ case 1:
338
+ _b.sent();
339
+ expect(logsStub.directInsert).toHaveBeenCalled();
340
+ logged = JSON.parse(logsStub.directInsert.mock.calls[0][0].data);
341
+ expect(logged.action).toBe('save-blocked-reviewer-missing');
342
+ expect(logged.approval_name).toBe('2609095607');
343
+ expect(logged.owner_department).toBe('org-1');
344
+ expect(logged.classification).toBe('MD-SC1-SC16');
345
+ expect(logged.missing).toEqual(['NS', 'Legal', 'SRA', 'CA']);
346
+ return [2];
347
+ }
348
+ });
349
+ }); });
350
+ it('写日志失败不能把校验本身搞崩, 仍要正常抛出业务错误', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
351
+ var doc, ctx;
352
+ return tslib_1.__generator(this, function (_a) {
353
+ switch (_a.label) {
354
+ case 0:
355
+ doc = baseDoc({ approval_type: 'departmental_review' });
356
+ ctx = buildCtx({ doc: doc, matrixRows: [] }).ctx;
357
+ ctx.getObject = jest.fn(function (name) {
358
+ if (name === 'pepsico_reviewer')
359
+ return { directFind: jest.fn().mockResolvedValue([]) };
360
+ return { directInsert: jest.fn().mockRejectedValue(new Error('日志写入失败')) };
361
+ });
362
+ return [4, expect(run(ctx)).rejects.toThrow(/缺少NS、Legal、SRA、CA审核人/)];
363
+ case 1:
364
+ _a.sent();
365
+ return [2];
366
+ }
367
+ });
368
+ }); });
369
+ it('保留原有的内部协作者同步行为', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
370
+ var doc, ctx, result;
371
+ return tslib_1.__generator(this, function (_a) {
372
+ switch (_a.label) {
373
+ case 0:
374
+ doc = baseDoc({
375
+ approval_type: 'departmental_review',
376
+ ns_reviewer: ['a'], legal_reviewer: ['b'], sra_reviewer: ['c'], ca_reviewer: ['d'],
377
+ internal_collaborator_edit: 'collab-u'
378
+ });
379
+ ctx = buildCtx({ doc: doc, matrixRows: [] }).ctx;
380
+ return [4, run(ctx)];
381
+ case 1:
382
+ result = _a.sent();
383
+ expect(result).toEqual({ doc: { internal_collaborator: 'collab-u' } });
384
+ return [2];
385
+ }
386
+ });
387
+ }); });
388
+ });
389
+ //# sourceMappingURL=approvalReviewerTrigger.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approvalReviewerTrigger.test.js","sourceRoot":"","sources":["../../../src/methods/__tests__/approvalReviewerTrigger.test.ts"],"names":[],"mappings":"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"}