刘光辉
117 分钟以前 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
60
61
62
63
64
65
66
67
68
69
import { describe, expect, it } from 'vitest';
 
import { refreshFlowEditTime } from './flowEditTime';
 
const now = new Date(2026, 8, 28, 14, 35, 47);
const dateField = (name: string, updateOnFlowEdit = true, format = 'yyyy-MM-dd') => ({
  __vModel__: name,
  __config__: { jnpfKey: 'datePicker', updateOnFlowEdit },
  format,
});
const timeField = (name: string, updateOnFlowEdit = true, format = 'HH:mm:ss') => ({
  __vModel__: name,
  __config__: { jnpfKey: 'timePicker', updateOnFlowEdit },
  format,
});
const editConfig = { opType: '-1', id: 'task-1' };
 
describe('refreshFlowEditTime', () => {
  it('updates enabled date and time fields using their configured formats', () => {
    const fields = [dateField('date'), dateField('dateTime', true, 'yyyy-MM-dd HH:mm'), timeField('time', true, 'HH:mm')];
    const data = { date: 1, dateTime: 2, time: '08:00' };
 
    const result = refreshFlowEditTime(fields, data, editConfig, now);
 
    expect(result).toEqual({
      date: new Date(2026, 8, 28).getTime(),
      dateTime: new Date(2026, 8, 28, 14, 35).getTime(),
      time: '14:35',
    });
    expect(data).toEqual({ date: 1, dateTime: 2, time: '08:00' });
  });
 
  it('preserves fields when the switch is off or the page is not a saved flow edit', () => {
    const fields = [dateField('date', false), timeField('time')];
    const data = { date: 1, time: '08:00' };
 
    expect(refreshFlowEditTime(fields, data, editConfig, now)).toEqual({ date: 1, time: '14:35:47' });
    for (const config of [
      { opType: '-1', id: '' },
      { opType: 3, id: 'task-1' },
      { ...editConfig, disabled: true },
    ]) {
      expect(refreshFlowEditTime(fields, data, config, now)).toEqual(data);
    }
  });
 
  it('updates subtable rows but respects field and table write permissions', () => {
    const fields = [
      {
        __vModel__: 'details',
        __config__: { jnpfKey: 'table', children: [dateField('date'), timeField('time')] },
      },
    ];
    const data = {
      details: [
        { date: 1, time: '08:00' },
        { date: 2, time: '09:00' },
      ],
    };
 
    const result = refreshFlowEditTime(fields, data, { ...editConfig, formOperates: [{ id: 'details-date', write: false }] }, now);
    expect(result.details).toEqual([
      { date: 1, time: '14:35:47' },
      { date: 2, time: '14:35:47' },
    ]);
    expect(data.details[0]?.time).toBe('08:00');
    expect(refreshFlowEditTime(fields, data, { ...editConfig, formOperates: [{ id: 'details', write: false }] }, now)).toEqual(data);
  });
});