刘光辉
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
import { describe, expect, it, vi } from 'vitest';
 
import { buildAfterSubmitParameter, getBatchSubmitRecordIds } from './afterSubmit';
 
describe('afterSubmit record ID', () => {
  it('passes the saved ID while preserving the live form and existing script functions', () => {
    const parameter = { formData: { id: '', name: 'new' }, setFormData: vi.fn(), onlineUtils: {} };
    const result = buildAfterSubmitParameter(parameter, 'created-id');
    expect(result.id).toBe('created-id');
    expect(result.formData).toBe(parameter.formData);
    expect(result.setFormData).toBe(parameter.setFormData);
    expect(result.onlineUtils).toBe(parameter.onlineUtils);
    expect(parameter.formData.id).toBe('');
    expect(parameter).not.toHaveProperty('id');
  });
 
  it('falls back to the existing record ID when an edit response omits it', () => {
    expect(buildAfterSubmitParameter({ formData: { id: 'existing-id' } }).id).toBe('existing-id');
  });
 
  it('keeps each submit ID independent across reset and consecutive creates', () => {
    const parameter = { formData: { id: '' } };
    const first = buildAfterSubmitParameter(parameter, 'first-id');
    const second = buildAfterSubmitParameter(parameter, 'second-id');
    expect(first.id).toBe('first-id');
    expect(second.id).toBe('second-id');
    expect(buildAfterSubmitParameter(parameter).id).toBe('');
  });
 
  it('supports numeric IDs and leaves an unknown ID empty', () => {
    expect(buildAfterSubmitParameter({ formData: { id: 'old' } }, 0).id).toBe(0);
    expect(buildAfterSubmitParameter({}).id).toBe('');
    expect(buildAfterSubmitParameter({ formData: { id: 'old' } }, '').id).toBe('');
  });
});
 
describe('batch afterSubmit IDs', () => {
  it('matches responses by clientRowId even when response order differs', () => {
    const rows = [{ __batchRowId: 'client-a' }, { __batchRowId: 'client-b' }];
    expect(
      getBatchSubmitRecordIds(rows, [
        { clientRowId: 'client-b', id: 'saved-b' },
        { clientRowId: 'client-a', id: 'saved-a' },
      ]),
    ).toEqual(['saved-a', 'saved-b']);
    expect(rows[0]).not.toHaveProperty('id');
  });
 
  it('supports native temporary row keys without exposing them as saved IDs', () => {
    expect(getBatchSubmitRecordIds([{ jnpfId: 'temp' }], [{ clientRowId: 'temp', id: 'saved' }])).toEqual(['saved']);
    expect(getBatchSubmitRecordIds([{ jnpfId: 'temp', id: 'copied-id' }])).toEqual(['']);
  });
 
  it('uses existing IDs only in edit mode when a matching response is missing', () => {
    expect(getBatchSubmitRecordIds([{ __batchRowId: 'client-a', id: 'existing' }], undefined, true)).toEqual(['existing']);
    expect(getBatchSubmitRecordIds([{ __batchRowId: 'client-a' }], [{ clientRowId: 'unrelated', id: 'wrong-id' }])).toEqual(['']);
  });
});