@steedos-labs/content-compliance 0.8.32 → 0.8.34

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 (25) hide show
  1. package/dist/index.js +1 -1
  2. package/lib/index.js +50 -3
  3. package/lib/index.js.map +1 -1
  4. package/lib/methods/__tests__/approvalReviewerTrigger.test.js +92 -2
  5. package/lib/methods/__tests__/approvalReviewerTrigger.test.js.map +1 -1
  6. package/lib/methods/__tests__/plsDuplicateUpload.test.d.ts +1 -0
  7. package/lib/methods/__tests__/plsDuplicateUpload.test.js +342 -0
  8. package/lib/methods/__tests__/plsDuplicateUpload.test.js.map +1 -0
  9. package/lib/methods/approval_engine.js +3 -1
  10. package/lib/methods/approval_engine.js.map +1 -1
  11. package/lib/methods/pls.d.ts +8 -1
  12. package/lib/methods/pls.js +363 -79
  13. package/lib/methods/pls.js.map +1 -1
  14. package/lib/pages/__tests__/plsReviewPage.test.js +22 -5
  15. package/lib/pages/__tests__/plsReviewPage.test.js.map +1 -1
  16. package/main/default/objects/pepsico_ai_review/fields/pls_material_content.field.yml +7 -0
  17. package/main/default/objects/pepsico_ai_review/fields/pls_reason.field.yml +7 -0
  18. package/main/default/objects/pepsico_ai_review/fields/pls_rule_content.field.yml +7 -0
  19. package/main/default/objects/pepsico_material/fields/ai_approval_status.field.yml +1 -1
  20. package/main/default/objects/pepsico_material/listviews/all.listview.yml +1 -0
  21. package/main/default/objects/pepsico_material_approval/fields/pls_upload_files.field.yml +50 -0
  22. package/main/default/pages/pepsico_material_detail.page.amis.json +8 -8
  23. package/main/default/pages/pepsico_material_detail_mobile.page.amis.json +4 -4
  24. package/main/default/triggers/pepsico_material_approval_change.trigger.yml +32 -3
  25. package/package.json +1 -1
@@ -0,0 +1,342 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var tslib_1 = require("tslib");
4
+ var crypto_1 = require("crypto");
5
+ var pls_1 = require("../pls");
6
+ var md5 = function (content) { return (0, crypto_1.createHash)('md5').update(Buffer.from(content)).digest('hex'); };
7
+ var buildCtx = function (_a) {
8
+ var _b = _a.files, files = _b === void 0 ? [] : _b, _c = _a.plsRecords, plsRecords = _c === void 0 ? [] : _c, _d = _a.blobs, blobs = _d === void 0 ? {} : _d;
9
+ var call = jest.fn(function (action, params) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
10
+ var content;
11
+ return tslib_1.__generator(this, function (_a) {
12
+ if (action !== '~packages-@steedos/service-files.getFileById') {
13
+ throw new Error("Unexpected action ".concat(action));
14
+ }
15
+ content = blobs[params.fileId];
16
+ return [2, content ? Buffer.from(content) : null];
17
+ });
18
+ }); });
19
+ var fileFind = jest.fn(function (_a) {
20
+ var filters = _a.filters;
21
+ return tslib_1.__awaiter(void 0, void 0, void 0, function () {
22
+ var ids;
23
+ return tslib_1.__generator(this, function (_b) {
24
+ ids = filters[0][2];
25
+ return [2, files.filter(function (file) { return ids.indexOf(file._id) > -1; })];
26
+ });
27
+ });
28
+ });
29
+ var plsFind = jest.fn(function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
30
+ return [2, plsRecords];
31
+ }); }); });
32
+ return {
33
+ call: call,
34
+ fileFind: fileFind,
35
+ plsFind: plsFind,
36
+ ctx: {
37
+ broker: { call: call },
38
+ meta: { user: { userId: 'owner-1', spaceId: 'space-1' } },
39
+ getObject: function (name) {
40
+ if (name === 'cfs_files_filerecord') {
41
+ return { directFind: fileFind };
42
+ }
43
+ if (name === 'pepsico_km_pls_file') {
44
+ return { directFind: plsFind, directInsert: jest.fn(), directUpdate: jest.fn() };
45
+ }
46
+ throw new Error("Unexpected object ".concat(name));
47
+ }
48
+ }
49
+ };
50
+ };
51
+ var buildDuplicateCtx = function (directInsert) { return ({
52
+ broker: { call: jest.fn() },
53
+ meta: { user: { userId: 'owner-1', spaceId: 'space-1' } },
54
+ getObject: function (name) {
55
+ if (name === 'cfs_files_filerecord') {
56
+ return {
57
+ directFind: jest.fn(function (_a) {
58
+ var filters = _a.filters;
59
+ return tslib_1.__awaiter(void 0, void 0, void 0, function () {
60
+ var ids;
61
+ return tslib_1.__generator(this, function (_b) {
62
+ ids = filters[0][2];
63
+ return [2, [
64
+ { _id: 'up-1', original: { name: 'PLS-A.pdf', size: 111, type: 'application/pdf' } },
65
+ { _id: 'km-file-1', original: { name: 'PLS-A.pdf', size: 111 } }
66
+ ].filter(function (file) { return ids.indexOf(file._id) > -1; })];
67
+ });
68
+ });
69
+ })
70
+ };
71
+ }
72
+ if (name === 'pepsico_km_pls_file') {
73
+ return {
74
+ directFind: jest.fn(function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
75
+ return [2, [{ _id: 'km-1', name: 'PLS-A', pls_file: 'km-file-1' }]];
76
+ }); }); }),
77
+ directInsert: directInsert,
78
+ directUpdate: jest.fn()
79
+ };
80
+ }
81
+ throw new Error("Unexpected object ".concat(name));
82
+ }
83
+ }); };
84
+ describe('本地上传PLS文件查重', function () {
85
+ it('文件名去掉后缀、大小写与多余空白后命中知识库标题即为重复', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
86
+ var ctx, duplicates;
87
+ return tslib_1.__generator(this, function (_a) {
88
+ switch (_a.label) {
89
+ case 0:
90
+ ctx = buildCtx({
91
+ files: [
92
+ { _id: 'up-1', original: { name: "PLS-Lay's 乐事 V2.PDF", size: 111 } },
93
+ { _id: 'km-file-1', original: { name: "PLS-Lay's 乐事 V2.pdf", size: 999 } }
94
+ ],
95
+ plsRecords: [{ _id: 'km-1', name: "PLS-Lay's 乐事 V2", pls_file: 'km-file-1' }]
96
+ }).ctx;
97
+ return [4, (0, pls_1.findDuplicatePLSFiles)(ctx, ['up-1'])];
98
+ case 1:
99
+ duplicates = _a.sent();
100
+ expect(duplicates).toEqual([
101
+ { fileId: 'up-1', fileName: "PLS-Lay's 乐事 V2.PDF", reason: 'name', matchedId: 'km-1', matchedName: "PLS-Lay's 乐事 V2" }
102
+ ]);
103
+ return [2];
104
+ }
105
+ });
106
+ }); });
107
+ it('标题被改过时仍按知识库文件的原始文件名判重', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
108
+ var ctx, duplicates;
109
+ return tslib_1.__generator(this, function (_a) {
110
+ switch (_a.label) {
111
+ case 0:
112
+ ctx = buildCtx({
113
+ files: [
114
+ { _id: 'up-1', original: { name: 'PLS-Quaker V1.pdf', size: 111 } },
115
+ { _id: 'km-file-1', original: { name: 'PLS-Quaker V1.pdf', size: 999 } }
116
+ ],
117
+ plsRecords: [{ _id: 'km-1', name: '改过的标题', pls_file: 'km-file-1' }]
118
+ }).ctx;
119
+ return [4, (0, pls_1.findDuplicatePLSFiles)(ctx, ['up-1'])];
120
+ case 1:
121
+ duplicates = _a.sent();
122
+ expect(duplicates).toHaveLength(1);
123
+ expect(duplicates[0].reason).toBe('name');
124
+ return [2];
125
+ }
126
+ });
127
+ }); });
128
+ it('文件名不同但内容相同时按 md5 判重, 且只读字节数相同的候选', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
129
+ var _a, ctx, call, duplicates;
130
+ return tslib_1.__generator(this, function (_b) {
131
+ switch (_b.label) {
132
+ case 0:
133
+ _a = buildCtx({
134
+ files: [
135
+ { _id: 'up-1', original: { name: '换个名字.pdf', size: 111 } },
136
+ { _id: 'km-file-1', original: { name: 'PLS-A.pdf', size: 111 } },
137
+ { _id: 'km-file-2', original: { name: 'PLS-B.pdf', size: 222 } }
138
+ ],
139
+ plsRecords: [
140
+ { _id: 'km-1', name: 'PLS-A', pls_file: 'km-file-1' },
141
+ { _id: 'km-2', name: 'PLS-B', pls_file: 'km-file-2' }
142
+ ],
143
+ blobs: { 'up-1': 'same-bytes', 'km-file-1': 'same-bytes', 'km-file-2': 'other' }
144
+ }), ctx = _a.ctx, call = _a.call;
145
+ return [4, (0, pls_1.findDuplicatePLSFiles)(ctx, ['up-1'])];
146
+ case 1:
147
+ duplicates = _b.sent();
148
+ expect(duplicates).toEqual([
149
+ { fileId: 'up-1', fileName: '换个名字.pdf', reason: 'content', matchedId: 'km-1', matchedName: 'PLS-A' }
150
+ ]);
151
+ expect(call).toHaveBeenCalledTimes(2);
152
+ expect(call).not.toHaveBeenCalledWith(expect.anything(), expect.objectContaining({ fileId: 'km-file-2' }));
153
+ return [2];
154
+ }
155
+ });
156
+ }); });
157
+ it('库里已有 md5 时直接用, 不再读文件', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
158
+ var _a, ctx, call, duplicates;
159
+ return tslib_1.__generator(this, function (_b) {
160
+ switch (_b.label) {
161
+ case 0:
162
+ _a = buildCtx({
163
+ files: [
164
+ { _id: 'up-1', original: { name: '换个名字.pdf', size: 111, md5: md5('same-bytes') } },
165
+ { _id: 'km-file-1', original: { name: 'PLS-A.pdf', size: 111, md5: md5('same-bytes') } }
166
+ ],
167
+ plsRecords: [{ _id: 'km-1', name: 'PLS-A', pls_file: 'km-file-1' }]
168
+ }), ctx = _a.ctx, call = _a.call;
169
+ return [4, (0, pls_1.findDuplicatePLSFiles)(ctx, ['up-1'])];
170
+ case 1:
171
+ duplicates = _b.sent();
172
+ expect(duplicates).toHaveLength(1);
173
+ expect(call).not.toHaveBeenCalled();
174
+ return [2];
175
+ }
176
+ });
177
+ }); });
178
+ it('文件名与内容都对不上时不算重复', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
179
+ var ctx;
180
+ return tslib_1.__generator(this, function (_a) {
181
+ switch (_a.label) {
182
+ case 0:
183
+ ctx = buildCtx({
184
+ files: [
185
+ { _id: 'up-1', original: { name: '全新的PLS.pdf', size: 111 } },
186
+ { _id: 'km-file-1', original: { name: 'PLS-A.pdf', size: 222 } }
187
+ ],
188
+ plsRecords: [{ _id: 'km-1', name: 'PLS-A', pls_file: 'km-file-1' }]
189
+ }).ctx;
190
+ return [4, expect((0, pls_1.findDuplicatePLSFiles)(ctx, ['up-1'])).resolves.toEqual([])];
191
+ case 1:
192
+ _a.sent();
193
+ return [2];
194
+ }
195
+ });
196
+ }); });
197
+ it('已失效的知识库记录不参与判重', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
198
+ var ctx;
199
+ return tslib_1.__generator(this, function (_a) {
200
+ switch (_a.label) {
201
+ case 0:
202
+ ctx = buildCtx({
203
+ files: [
204
+ { _id: 'up-1', original: { name: 'PLS-A.pdf', size: 111 } },
205
+ { _id: 'km-file-1', original: { name: 'PLS-A.pdf', size: 111 } }
206
+ ],
207
+ plsRecords: [{ _id: 'km-1', name: 'PLS-A', pls_file: 'km-file-1', is_active: false }]
208
+ }).ctx;
209
+ return [4, expect((0, pls_1.findDuplicatePLSFiles)(ctx, ['up-1'])).resolves.toEqual([])];
210
+ case 1:
211
+ _a.sent();
212
+ return [2];
213
+ }
214
+ });
215
+ }); });
216
+ it('同一个物理文件已经建过知识库记录时不算重复', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
217
+ var ctx;
218
+ return tslib_1.__generator(this, function (_a) {
219
+ switch (_a.label) {
220
+ case 0:
221
+ ctx = buildCtx({
222
+ files: [{ _id: 'up-1', original: { name: 'PLS-A.pdf', size: 111 } }],
223
+ plsRecords: [{ _id: 'km-1', name: 'PLS-A', pls_file: 'up-1' }]
224
+ }).ctx;
225
+ return [4, expect((0, pls_1.findDuplicatePLSFiles)(ctx, ['up-1'])).resolves.toEqual([])];
226
+ case 1:
227
+ _a.sent();
228
+ return [2];
229
+ }
230
+ });
231
+ }); });
232
+ it('读不到文件内容时不猜, 按不重复放行', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
233
+ var ctx;
234
+ return tslib_1.__generator(this, function (_a) {
235
+ switch (_a.label) {
236
+ case 0:
237
+ ctx = buildCtx({
238
+ files: [
239
+ { _id: 'up-1', original: { name: '换个名字.pdf', size: 111 } },
240
+ { _id: 'km-file-1', original: { name: 'PLS-A.pdf', size: 111 } }
241
+ ],
242
+ plsRecords: [{ _id: 'km-1', name: 'PLS-A', pls_file: 'km-file-1' }],
243
+ blobs: {}
244
+ }).ctx;
245
+ return [4, expect((0, pls_1.findDuplicatePLSFiles)(ctx, ['up-1'])).resolves.toEqual([])];
246
+ case 1:
247
+ _a.sent();
248
+ return [2];
249
+ }
250
+ });
251
+ }); });
252
+ it('提示语点名重复的文件', function () {
253
+ expect((0, pls_1.buildDuplicatePLSMessage)([
254
+ { fileName: 'A.pdf' },
255
+ { fileName: 'B.pdf' }
256
+ ])).toBe("\u300CA.pdf\u300D\u300CB.pdf\u300D".concat(pls_1.DUPLICATE_PLS_MESSAGE));
257
+ });
258
+ it('转知识库记录前再拦一道, 重复就不建记录', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
259
+ var directInsert, ctx;
260
+ return tslib_1.__generator(this, function (_a) {
261
+ switch (_a.label) {
262
+ case 0:
263
+ directInsert = jest.fn();
264
+ ctx = buildDuplicateCtx(directInsert);
265
+ return [4, expect((0, pls_1.createApplicationPLSFiles)(ctx, ['up-1'], { _id: 'approval-1', form_version: 'v2' }))
266
+ .rejects.toThrow(pls_1.DUPLICATE_PLS_MESSAGE)];
267
+ case 1:
268
+ _a.sent();
269
+ expect(directInsert).not.toHaveBeenCalled();
270
+ return [2];
271
+ }
272
+ });
273
+ }); });
274
+ it.each([
275
+ ['v1', true],
276
+ ['v2', true],
277
+ ['v3', true],
278
+ [undefined, false],
279
+ ['', false],
280
+ [' ', false]
281
+ ])('form_version=%s 时是否拦截: %s', function (formVersion, shouldBlock) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
282
+ var directInsert, ctx, run;
283
+ return tslib_1.__generator(this, function (_a) {
284
+ switch (_a.label) {
285
+ case 0:
286
+ directInsert = jest.fn().mockResolvedValue({ _id: 'pls-new', name: 'PLS-A' });
287
+ ctx = buildDuplicateCtx(directInsert);
288
+ run = (0, pls_1.createApplicationPLSFiles)(ctx, ['up-1'], { _id: 'approval-1', form_version: formVersion });
289
+ if (!shouldBlock) return [3, 2];
290
+ return [4, expect(run).rejects.toThrow(pls_1.DUPLICATE_PLS_MESSAGE)];
291
+ case 1:
292
+ _a.sent();
293
+ expect(directInsert).not.toHaveBeenCalled();
294
+ return [3, 4];
295
+ case 2: return [4, expect(run).resolves.toBeTruthy()];
296
+ case 3:
297
+ _a.sent();
298
+ expect(directInsert).toHaveBeenCalled();
299
+ _a.label = 4;
300
+ case 4: return [2];
301
+ }
302
+ });
303
+ }); });
304
+ it('checkDuplicate 为 false 时即使重复也照常建记录', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
305
+ var directInsert, ctx, result;
306
+ return tslib_1.__generator(this, function (_a) {
307
+ switch (_a.label) {
308
+ case 0:
309
+ directInsert = jest.fn().mockResolvedValue({ _id: 'pls-new', name: 'PLS-A' });
310
+ ctx = buildDuplicateCtx(directInsert);
311
+ return [4, (0, pls_1.createApplicationPLSFiles)(ctx, ['up-1'], { _id: 'approval-1', form_version: 'v2' }, undefined, { checkDuplicate: false })];
312
+ case 1:
313
+ result = _a.sent();
314
+ expect(result.created).toBe(1);
315
+ expect(directInsert).toHaveBeenCalled();
316
+ return [2];
317
+ }
318
+ });
319
+ }); });
320
+ it('查重自身报错时放行, 并记一条系统日志', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
321
+ var warn, ctx;
322
+ return tslib_1.__generator(this, function (_a) {
323
+ switch (_a.label) {
324
+ case 0:
325
+ warn = jest.fn();
326
+ ctx = {
327
+ meta: { user: { userId: 'owner-1', spaceId: 'space-1' } },
328
+ logger: { warn: warn },
329
+ getObject: function () { return ({
330
+ directFind: jest.fn().mockRejectedValue(new Error('mongo down'))
331
+ }); }
332
+ };
333
+ return [4, expect((0, pls_1.findDuplicatePLSFilesSafely)(ctx, ['up-1'])).resolves.toEqual([])];
334
+ case 1:
335
+ _a.sent();
336
+ expect(warn).toHaveBeenCalledWith(expect.stringContaining('PLS查重失败'), expect.objectContaining({ objectName: 'pepsico_km_pls_file' }));
337
+ return [2];
338
+ }
339
+ });
340
+ }); });
341
+ });
342
+ //# sourceMappingURL=plsDuplicateUpload.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plsDuplicateUpload.test.js","sourceRoot":"","sources":["../../../src/methods/__tests__/plsDuplicateUpload.test.ts"],"names":[],"mappings":"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"}
@@ -2110,7 +2110,9 @@ var submitContent = function (ctx, recordId, currentStepApprovalStatus, skip) {
2110
2110
  : fileItem;
2111
2111
  }));
2112
2112
  if (!(uploadedFileIds.length > 0)) return [3, 18];
2113
- return [4, (0, pls_1.createApplicationPLSFiles)(ctx, uploadedFileIds, approvalNew)];
2113
+ return [4, (0, pls_1.createApplicationPLSFiles)(ctx, uploadedFileIds, approvalNew, undefined, {
2114
+ checkDuplicate: approvalNew.current_step === consts_1.Step.draft
2115
+ })];
2114
2116
  case 15:
2115
2117
  uploaded = _b.sent();
2116
2118
  plsIds = _.uniq(_.compact(plsIdsBefore.concat(uploaded.records.map(function (item) { return item.id; }))));