import { describe, expect, it } from 'vitest'; import { ABUT_MEMBER_EDITABLE, abutMemberRows } from '../src/core/abut/member-list'; const base = { bearings: [{ seatEl: undefined }, { seatEl: undefined }], groundEl: 33.984, }; describe('교대 부재 목록 (시안 ② 부재 · 교대)', () => { it('has the six rows of the mockup, in order', () => { const rows = abutMemberRows(base, '11.253 m'); expect(rows.map((r) => r.id)).toEqual(['bearing', 'shape', 'footing', 'wing', 'slab', 'ground']); expect(rows[0].label).toBe('교량받침·받침블럭·솔플레이트'); }); it('a default abutment shows no change marks', () => { expect(abutMemberRows(base, '—').every((r) => !r.changed)).toBe(true); }); it('marks the shape when a value differs from the default', () => { const rows = abutMemberRows({ ...base, shape: { parapetHeightMm: 2200 } }, '—'); expect(rows.find((r) => r.id === 'shape')?.changed).toBe(true); expect(rows.find((r) => r.id === 'shape')?.summary).toBe('벽체 두께 2400 (자동) · 흉벽 2200'); expect(rows.find((r) => r.id === 'footing')?.changed).toBe(false); const foot = abutMemberRows({ ...base, shape: { footingThicknessMm: 1300 } }, '—'); expect(foot.find((r) => r.id === 'footing')?.changed).toBe(true); expect(foot.find((r) => r.id === 'shape')?.changed).toBe(false); }); it('marks the wing when a side is not the general form, and names both sides', () => { const rows = abutMemberRows({ ...base, wings: { left: 'general', right: 'short' } }, '—'); const wing = rows.find((r) => r.id === 'wing'); expect(wing?.changed).toBe(true); expect(wing?.summary).toBe('좌 일반형 · 우 단축형'); }); it('marks a 받침 that has its own 교좌면 EL', () => { const rows = abutMemberRows({ ...base, bearings: [{ seatEl: 44.4 }, { seatEl: undefined }] }, '—'); expect(rows[0].changed).toBe(true); }); it('shows the slab width text and the ground EL as given', () => { const rows = abutMemberRows(base, '11.253 m'); expect(rows.find((r) => r.id === 'slab')?.summary).toBe('매립형 · 하향 4 % · 폭 11.253 m'); expect(rows.find((r) => r.id === 'ground')?.summary).toBe('육상 · 지층 0 · 지반고 EL.33.984'); }); it('every card takes input in this step (접속슬래브 · 지반 2026-11-04)', () => { expect(ABUT_MEMBER_EDITABLE).toEqual({ bearing: true, shape: true, footing: true, wing: true, slab: true, ground: true }); }); });