From b0e11d1cd0a959114ff019b653d2cb4cde6f9aa5 Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Wed, 28 Oct 2026 21:49:27 +0400 Subject: [PATCH] =?UTF-8?q?test(realtime):=20=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BA=D0=B0=20=D1=81=D0=BE=D0=B0=D0=B2=D1=82=D0=BE=D1=80=D0=B0?= =?UTF-8?q?=20=D0=BF=D0=BE=20=D0=BA=D0=BB=D1=8E=D1=87=D1=83,=20=D0=BA?= =?UTF-8?q?=D0=BE=D1=82=D0=BE=D1=80=D0=BE=D0=B3=D0=BE=20=D0=BD=D0=B5=D1=82?= =?UTF-8?q?=20=D0=B2=20=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B5=20(AURORA-1848?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Четыре теста updateCells: вставка отсутствующего блока и поля, явная запись null, вставка отсутствующего скалярного ключа data. Co-Authored-By: Claude Opus 5.5 --- .../RealtimeTable/utils/cellUtils.test.js | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/web/src/components/RealtimeTable/utils/cellUtils.test.js b/web/src/components/RealtimeTable/utils/cellUtils.test.js index ea85b37..a7f849e 100644 --- a/web/src/components/RealtimeTable/utils/cellUtils.test.js +++ b/web/src/components/RealtimeTable/utils/cellUtils.test.js @@ -200,3 +200,32 @@ test('ожидаемое отличие от старой реализации: delete stripped[0].subRows[0].data.extra; assert.deepEqual(stripped, old); }); + +const row = (data) => ({ row_type: 'INPUT', depth: 3, sort_order: 1, data }); + +test('AURORA-1848: нет блока q1 — блок с полем вставляется, остальное сохраняется', () => { + const data = deepFreeze([row({ line_id: 7, header: { name: 'X' } })]); + const out = updateCells(data, [['INPUT', 3, 1, { q1: { m1: 5 } }]]); + assert.equal(out[0].data.q1.m1, 5); + assert.deepEqual(out[0].data.header, { name: 'X' }); + assert.equal(out[0].data.line_id, 7); +}); + +test('AURORA-1848: блок q1 без поля m1 — поле вставляется, остальные поля q1 сохраняются', () => { + const data = deepFreeze([row({ line_id: 7, q1: { m2: 3 } })]); + const out = updateCells(data, [['INPUT', 3, 1, { q1: { m1: 5 } }]]); + assert.deepEqual(out[0].data.q1, { m2: 3, m1: 5 }); +}); + +test('AURORA-1848: очистка — null записывается явно', () => { + const data = deepFreeze([row({ line_id: 7, q1: { m1: 5 } })]); + const out = updateCells(data, [['INPUT', 3, 1, { q1: { m1: null } }]]); + assert.ok('m1' in out[0].data.q1); + assert.equal(out[0].data.q1.m1, null); +}); + +test('AURORA-1848: отсутствующий скалярный ключ верхнего уровня data вставляется', () => { + const data = deepFreeze([row({ header: { name: 'X' } })]); + const out = updateCells(data, [['INPUT', 3, 1, { line_id: 9 }]]); + assert.equal(out[0].data.line_id, 9); +});