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(['']);
|
});
|
});
|