刘光辉
3 小时以前 cf11e63b659afcc9792ab3e395f1b45d844431a8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import { beforeEach, describe, expect, it, vi } from 'vitest';
 
const requestMocks = vi.hoisted(() => ({
  delete: vi.fn(),
  post: vi.fn(),
  put: vi.fn(),
}));
 
vi.mock('#/api/request', () => ({
  defHttp: {
    delete: requestMocks.delete,
    get: vi.fn(),
    post: requestMocks.post,
    put: requestMocks.put,
  },
}));
 
vi.mock('@vben/stores', () => ({
  useUserStore: () => ({ getUserInfo: {} }),
}));
 
// eslint-disable-next-line import/first -- request modules must be mocked before loading the API wrapper.
import { audit, create, delFlowLaunch, saveAudit, update } from './task';
 
describe('workflow form submit API audit header', () => {
  beforeEach(() => vi.clearAllMocks());
 
  it.each([
    ['create', () => create({ formData: { biz_sign: '839875756384423365' } }), requestMocks.post],
    ['update', () => update({ id: 'task-1', formData: { biz_sign: '839875756384423365' } }), requestMocks.put],
    ['audit', () => audit('operator-1', { formData: { biz_sign: '839875756384423365' } }), requestMocks.post],
    ['saveAudit', () => saveAudit('operator-1', { formData: { biz_sign: '839875756384423365' } }), requestMocks.post],
  ])('%s sends X-Audit-Biz-Sign', (_name, submit, request) => {
    submit();
 
    expect(request).toHaveBeenCalledTimes(1);
    expect(request.mock.calls[0]?.[0]).toEqual(expect.objectContaining({ headers: { 'X-Audit-Biz-Sign': '839875756384423365' } }));
  });
 
  it.each([
    ['create', create, requestMocks.post],
    ['update', update, requestMocks.put],
  ])('%s preserves the audit signature with a custom error duration', (_name, submit, request) => {
    const data = { id: 'task-1', formData: { biz_sign: '839875756384423365' } };
    submit(data, 5);
 
    expect(request).toHaveBeenCalledWith(expect.objectContaining({ data, headers: { 'X-Audit-Biz-Sign': '839875756384423365' } }), { errorMessageDuration: 5 });
  });
 
  it('sends the current delete signature in the audit header', () => {
    delFlowLaunch('task-1', { biz_sign: 'delete-sign' });
    expect(requestMocks.delete).toHaveBeenCalledWith({ url: '/api/workflow/task/task-1', headers: { 'X-Audit-Biz-Sign': 'delete-sign' } });
  });
 
  it('keeps unsigned deletes compatible without a signature header', () => {
    delFlowLaunch('task-1');
    expect(requestMocks.delete).toHaveBeenCalledWith({ url: '/api/workflow/task/task-1', headers: {} });
  });
});