import assert from 'node:assert'; import fs from 'node:fs'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); const pagePath = path.resolve(__dirname, '../../src/views/train/accommodation/index.vue'); const source = fs.readFileSync(pagePath, 'utf8'); console.log('=== Running Accommodation Status Enum Tests (FIX-04) ==='); // Runtime Truth:train_accommodation.accommodation_status 仅有 0=预分配 / 1=在住 / 2=已退宿。 // 不存在 3=已调房;调房的真实语义是旧记录置 2、新记录置 1。 { assert.strictEqual(source.includes('已调房'), false, '页面不得再出现「已调房」状态文案'); assert.strictEqual(/accommodationStatus\s*===\s*3/.test(source), false, '页面不得再存在 accommodationStatus === 3 分支'); assert.strictEqual(/]*:value="3"/.test(source), false, '筛选项不得再提供 value=3 的住宿状态'); console.log('✔ PASS: no phantom status 3 (已调房) remains in the accommodation page'); } // 合法状态枚举必须完整保留 { assert.strictEqual(//.test(source), true, '筛选项必须保留 0=预分配'); assert.strictEqual(//.test(source), true, '筛选项必须保留 1=在住'); assert.strictEqual(//.test(source), true, '筛选项必须保留 2=已退宿'); const statusOptions = source.match(//g) || []; assert.strictEqual(statusOptions.length, 3, '住宿状态筛选项必须恰好为 3 个合法枚举值'); console.log('✔ PASS: legal status enum 0/1/2 fully preserved'); } // 调房仍然是业务操作,不得被误删 { assert.strictEqual(source.includes('handleOpenTransfer'), true, '调房业务操作入口必须保留'); assert.strictEqual(source.includes('transferAccommodation'), true, '调房后端调用必须保留'); assert.strictEqual(source.includes('getAccommodationHistory'), true, '住宿履历查询必须保留'); console.log('✔ PASS: room transfer stays a business operation, not a fake status'); } console.log('=== All Accommodation Status Enum Unit Tests Passed ===');