새 입력 양식(운곡교AA.xlsx, 운곡교(완도,광주)데이터)의 '형상정보' B1 '프로젝트명:' → C1, B2 '교량명:' → C2를 읽어 불러오기 창의 프로젝트명 · 교량명 칸을 채운다. - core/project-info.ts: 모든 시트의 앞 20행 × 10열에서 라벨을 찾고, 같은 칸 ':' 뒤나 오른쪽 4칸 안의 값을 씀. 라벨이 없는 엑셀(운곡교P1입력.xlsx)은 아무것도 읽지 않음 - 칸이 비었거나 앞서 자동으로 채운 값일 때만 채움. 사용자가 입력한 값은 덮어쓰지 않음(샘플 이름은 자동 값으로 취급) - 파일 줄에 읽은 위치 표시: "프로젝트명 · 교량명: 엑셀 형상정보!C1 · 형상정보!C2" - 테스트 4개, 브라우저: AA 자동 입력 → 직접 고친 프로젝트명은 다음 파일에서도 유지 → 이름 없는 샘플은 그대로 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
31 lines
1.7 KiB
TypeScript
31 lines
1.7 KiB
TypeScript
import * as XLSX from 'xlsx';
|
|
import { describe, expect, it } from 'vitest';
|
|
import { readProjectInfo } from '../src/core/project-info';
|
|
import { loadInputWorkbook } from './helpers';
|
|
|
|
const book = (sheets: Record<string, (string | number | null)[][]>) => {
|
|
const wb = XLSX.utils.book_new();
|
|
for (const [name, rows] of Object.entries(sheets)) XLSX.utils.book_append_sheet(wb, XLSX.utils.aoa_to_sheet(rows), name);
|
|
return wb;
|
|
};
|
|
|
|
describe('프로젝트명 · 교량명 (엑셀 입력)', () => {
|
|
it("the '형상정보' form: B1 '프로젝트명:' → C1, B2 '교량명:' → C2 (운곡교AA · 완도·광주 데이터 양식)", () => {
|
|
const wb = book({ 형상정보: [[null, '프로젝트명:', '고속국도 제25호선 강진~광주간 건설공사 제5공구'], [null, '교량명:', '운곡교'], [null, '교대명', '형식']], IP: [['교각명']] });
|
|
expect(readProjectInfo(wb)).toEqual({ projectName: '고속국도 제25호선 강진~광주간 건설공사 제5공구', bridgeName: '운곡교', source: '형상정보!C1 · 형상정보!C2' });
|
|
});
|
|
|
|
it('the value may follow the colon in the same cell, or sit a few columns to the right, on any sheet', () => {
|
|
const wb = book({ 표지: [['교량명 : 운곡교'], [], ['프로젝트 명', null, null, '과업 A']] });
|
|
expect(readProjectInfo(wb)).toMatchObject({ projectName: '과업 A', bridgeName: '운곡교' });
|
|
});
|
|
|
|
it('an empty form row or a neighbouring label is not taken as the value', () => {
|
|
expect(readProjectInfo(book({ 형상정보: [['프로젝트명:', '교량명:']] }))).toEqual({});
|
|
});
|
|
|
|
it('the sample workbook (교각 · IP · 받침) has no names: nothing is read', () => {
|
|
expect(readProjectInfo(loadInputWorkbook())).toEqual({});
|
|
});
|
|
});
|