40 lines
1.3 KiB
TypeScript
40 lines
1.3 KiB
TypeScript
import assert from 'node:assert/strict';
|
|
import test from 'node:test';
|
|
|
|
import { structurallyShare } from '../src/utils/structuralShare.ts';
|
|
|
|
void test('reuses a completely unchanged tRPC snapshot', () => {
|
|
const current = {
|
|
general: { id: 7, name: '장수' },
|
|
records: [{ id: 3, text: '기록' }],
|
|
createdAt: new Date('2026-08-07T00:00:00.000Z'),
|
|
};
|
|
const incoming = {
|
|
general: { id: 7, name: '장수' },
|
|
records: [{ id: 3, text: '기록' }],
|
|
createdAt: new Date('2026-08-07T00:00:00.000Z'),
|
|
};
|
|
|
|
assert.equal(structurallyShare(current, incoming), current);
|
|
});
|
|
|
|
void test('replaces only changed branches and preserves sibling identities', () => {
|
|
const current = {
|
|
general: { id: 7, name: '이전 이름' },
|
|
city: { id: 1, name: '업' },
|
|
records: [{ id: 3, text: '기록' }],
|
|
};
|
|
const incoming = {
|
|
general: { id: 7, name: '새 이름' },
|
|
city: { id: 1, name: '업' },
|
|
records: [{ id: 3, text: '기록' }],
|
|
};
|
|
|
|
const shared = structurallyShare(current, incoming);
|
|
assert.notEqual(shared, current);
|
|
assert.notEqual(shared.general, current.general);
|
|
assert.deepEqual(shared.general, incoming.general);
|
|
assert.equal(shared.city, current.city);
|
|
assert.equal(shared.records, current.records);
|
|
});
|