import { readFileSync } from 'node:fs' import { resolve } from 'node:path' import { describe, expect, it } from 'vitest' const source = readFileSync(resolve(process.cwd(), 'src/modules/inbounds/measurement/InboundMeasurementDialog.vue'), 'utf8') const panelSource = readFileSync(resolve(process.cwd(), 'src/modules/inbounds/measurement/InboundMeasurementPanel.vue'), 'utf8') const taskListSource = readFileSync(resolve(process.cwd(), 'src/modules/inbounds/components/InboundTaskList.vue'), 'utf8') const orderListSource = readFileSync(resolve(process.cwd(), 'src/modules/unified-orders/pages/UnifiedOrdersView.vue'), 'utf8') const densitySource = readFileSync(resolve(process.cwd(), 'src/styles/adminDensity.css'), 'utf8') describe('InboundMeasurementDialog', () => { it('owns the complete measurement workspace behind one centered dialog', () => { expect(source).toContain("import AppDialog from '@/shared/components/AppDialog.vue'") expect(source).toContain(' { expect(source).toContain('fullscreenable') expect(source).not.toContain('default-fullscreen') expect(source).not.toContain(' { expect(source).toContain("`测量 · ${props.inboundCode?.trim() || '入仓码待补充'}`") expect(source).not.toContain('props.inboundCode?.trim() || props.inboundId') expect(source).toContain(':title="title"') expect(panelSource).not.toContain('入仓码') expect(panelSource).not.toContain('{{ detail.inboundCode') expect(panelSource).toContain('class="measurement-summary-context"') }) it('is the only measurement dialog opened by both formal list entries', () => { for (const entrySource of [taskListSource, orderListSource]) { expect(entrySource).toContain(' { expect(source).toContain('@saved="handleUpdated"') expect(source).toContain('@updated="handleUpdated"') expect(source).toContain('@submitted="handleSubmitted"') expect(source).toContain("emit('updated')") expect(source).toContain("emit('update:modelValue', false)") expect(source).toContain("emit('submitted')") expect(panelSource).toContain("emit('saved')") expect(panelSource).toContain("emit('submitted')") }) it('uses the existing permission-aware panels and protects unsaved work on close', () => { expect(source).toContain('measurementPanelRef.value?.isDirty') expect(source).toContain('当前测量数据尚未保存') expect(source).toContain(':close-on-click-modal="false"') expect(source).toContain(':before-close="beforeClose"') expect(source).toContain('measurementPanelRef?.canEdit') expect(source).toContain('measurementPanelRef?.canSubmit') }) })