import assert from 'node:assert/strict'; import { readFileSync } from 'node:fs'; import { join } from 'node:path'; const root = new URL('..', import.meta.url).pathname.replace(/^\/([A-Za-z]:)/, '$1'); const read = (path) => readFileSync(join(root, path), 'utf8'); const appJson = JSON.parse(read('miniapp/app.json')); assert.ok(appJson.pages.includes('pages/manager/dashboard')); const index = read('miniapp/pages/index/index.js') + read('miniapp/pages/index/index.wxml'); for (const pattern of [ '/auth/me', 'showManagerEntry', 'STORE_ADMIN', 'TENANT_ADMIN', 'PLATFORM_ADMIN', 'openManager', 'pages/manager/dashboard', '门店管理' ]) { assert.match(index, new RegExp(pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'))); } const dashboard = read('miniapp/pages/manager/dashboard.js') + read('miniapp/pages/manager/dashboard.wxml') + read('miniapp/pages/manager/dashboard.wxss'); for (const pattern of [ '/management/stores', '/management/stores/${encodeURIComponent(storeId)}/rooms', '/management/rooms/${encodeURIComponent(roomId)}/status', '/orders?page=1&pageSize=50', "method: 'PATCH'", 'store.operation.write', 'tenant.manage', 'changeRoomStatus', 'toggleRoomConfiguration', 'activeOrders', '实时房态', '近期订单', '只读' ]) { assert.match(dashboard, new RegExp(pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'))); } const routes = read('backend/src/routes/store-room-management.ts'); for (const pattern of [ '/app-api/management/stores', '/app-api/management/stores/:storeId/rooms', '/app-api/management/rooms/:id/status', 'roomStatusSchema', 'updateRoomStatus' ]) { assert.match(routes, new RegExp(pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'))); } const repository = read('backend/src/stores/store-room-repository.ts'); assert.match(repository, /ROOM_STATUS_UPDATED/); assert.match(repository, /store\.operation\.read/); assert.match(repository, /store\.operation\.write/); assert.match(repository, /JSON\.stringify\(metadata\)/); const migration = read('database/migrations/2026081001_m08c_staff_management_access.up.sql'); assert.match(migration, /r\.code = 'STAFF'/); assert.match(migration, /store\.operation\.read/); console.log('PASS: M08-C manager/staff miniapp exposes scoped stores, room status and order overview.');