- 노출형 (삽도 기준, QA-8 가정): 상면 = 흉벽 상단, 끝은 브라켓 위(끝 두께 = 브라켓 높이), 헌치 길이 기본 2000 - 형식을 고르면 경사가 기본값으로 바뀜 (매립형 하향 4 %, 노출형 종단경사), 경사 타일로 변경 가능 - 길이 · 두께 · 흉벽과 간격 · 날개벽과 간격 입력이 3D, 폭, 날개벽 평면에 반영 - 슬래브 모따기 = 날개벽 헌치 (3D와 평면), 날개벽 없는 측은 skew 교좌면 끝선 - 3D 슬래브를 단면 기준 입체로 다시 만듦, 프로젝트 파일 저장 · 검증 Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
52 lines
2.4 KiB
TypeScript
52 lines
2.4 KiB
TypeScript
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('지반고 33.984 m');
|
|
});
|
|
|
|
it('every card but the ground takes input in this step (접속슬래브 2026-11-04)', () => {
|
|
expect(ABUT_MEMBER_EDITABLE).toEqual({ bearing: true, shape: true, footing: true, wing: true, slab: true, ground: false });
|
|
});
|
|
});
|