From 68e56d103719a33d89372e3193e6d5efc06e4b24 Mon Sep 17 00:00:00 2001 From: ypshim Date: Wed, 21 Oct 2026 18:18:51 +0900 Subject: [PATCH] =?UTF-8?q?feat(input):=20use=20RAG/=EC=9A=B4=EA=B3=A1?= =?UTF-8?q?=EA=B5=90P1=EC=9E=85=EB=A0=A5.xlsx=20as=20the=20P1=20input?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - public/samples/운곡교P1입력.xlsx is a byte copy of RAG/운곡교P1입력.xlsx - loadP1 and the sample loader read the three-sheet input - spec workbook (intent.PR) stays for the single-sheet regression tests - test: input file has sheets 교각 · IP · 받침 and parses to P1 with no issues Co-Authored-By: Claude Haiku 5.5 --- public/samples/운곡교P1입력.xlsx | Bin 0 -> 12894 bytes src/main.ts | 4 ++-- tests/helpers.ts | 13 ++++++++++--- tests/parse.test.ts | 12 +++++++++++- 4 files changed, 23 insertions(+), 6 deletions(-) create mode 100644 public/samples/운곡교P1입력.xlsx diff --git a/public/samples/운곡교P1입력.xlsx b/public/samples/운곡교P1입력.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..79adfa06eb741b134ea5a4ae258e779162a7b809 GIT binary patch literal 12894 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 I=zgC4KhFMG00000 literal 0 HcmV?d00001 diff --git a/src/main.ts b/src/main.ts index bd2624d..68e61cf 100644 --- a/src/main.ts +++ b/src/main.ts @@ -492,7 +492,7 @@ function openImport(): void { } async function fetchSample(): Promise { - const res = await fetch(new URL('samples/P1.xlsx', document.baseURI)); + const res = await fetch(new URL('samples/운곡교P1입력.xlsx', document.baseURI)); if (!res.ok) throw new Error(`샘플 응답 ${res.status}`); return new Uint8Array(await res.arrayBuffer()); } @@ -535,7 +535,7 @@ $('file').addEventListener('change', async (ev) => { }); $('pick-sample').addEventListener('click', async () => { try { - loadBytes(await fetchSample(), '샘플 P1 (Pier ui_xxx.xlsx)'); + loadBytes(await fetchSample(), '샘플 P1 (운곡교P1입력.xlsx)'); } catch (err) { setStatus(`샘플을 불러오지 못했습니다: ${(err as Error).message}`); } diff --git a/tests/helpers.ts b/tests/helpers.ts index a13a1db..0f81f16 100644 --- a/tests/helpers.ts +++ b/tests/helpers.ts @@ -4,14 +4,21 @@ import * as XLSX from 'xlsx'; import { parseWorkbook } from '../src/core/parseWorkbook'; import type { PierInput } from '../src/core/types'; -const P1_PATH = fileURLToPath(new URL('../public/samples/P1.xlsx', import.meta.url)); +/** Spec workbook (RAG/Pier ui_xxx.xlsx, sheet intent.PR, all tables on one sheet). Used by single-sheet tests. */ +const SPEC_PATH = fileURLToPath(new URL('../public/samples/P1.xlsx', import.meta.url)); +/** User input (RAG/운곡교P1입력.xlsx, three sheets 교각 · IP · 받침). This is the P1 input used by the app and tests. */ +const INPUT_PATH = fileURLToPath(new URL('../public/samples/운곡교P1입력.xlsx', import.meta.url)); -export function loadWorkbook(path: string = P1_PATH): XLSX.WorkBook { +export function loadWorkbook(path: string = SPEC_PATH): XLSX.WorkBook { return XLSX.read(readFileSync(path), { type: 'buffer' }); } +export function loadInputWorkbook(): XLSX.WorkBook { + return loadWorkbook(INPUT_PATH); +} + export function loadP1(): PierInput { - const { piers, issues } = parseWorkbook(loadWorkbook()); + const { piers, issues } = parseWorkbook(loadInputWorkbook()); if (issues.length) throw new Error(`P1 parse issues: ${JSON.stringify(issues)}`); const p1 = piers.find((p) => p.name === 'P1'); if (!p1) throw new Error('P1 not found'); diff --git a/tests/parse.test.ts b/tests/parse.test.ts index adb3e35..d8c5794 100644 --- a/tests/parse.test.ts +++ b/tests/parse.test.ts @@ -1,7 +1,7 @@ import * as XLSX from 'xlsx'; import { describe, expect, it } from 'vitest'; import { parseWorkbook } from '../src/core/parseWorkbook'; -import { loadP1, loadWorkbook } from './helpers'; +import { loadInputWorkbook, loadP1, loadWorkbook } from './helpers'; describe('parseWorkbook (P1 sheet intent.PR)', () => { it('finds exactly one pier P1 with the input values of the sheet', () => { @@ -92,3 +92,13 @@ describe('three-sheet input (교각 · IP · 받침 on separate sheets, joined b ]); }); }); + +describe('user input file (RAG/운곡교P1입력.xlsx)', () => { + it('has the three sheets 교각 · IP · 받침 and parses to one pier, P1, with no issues', () => { + const wb = loadInputWorkbook(); + expect(wb.SheetNames).toEqual(['교각', 'IP', '받침']); + const { piers, issues } = parseWorkbook(wb); + expect(issues).toEqual([]); + expect(piers.map((p) => [p.name, p.sheet])).toEqual([['P1', '교각']]); + }); +});