feat(M08-A): 接入顾客端订单开门

This commit is contained in:
Codex
2026-06-24 22:39:15 +08:00
parent d2c73a2c28
commit eaa86547c2
7 changed files with 161 additions and 2 deletions
+31 -1
View File
@@ -107,6 +107,7 @@ const token = signAccessToken({
tid: '7', aid: '9', rv: 1
}, secret, 900);
let routed;
let routedContext;
const app = await buildApp({
deviceControl: {
jwtSecret: secret,
@@ -123,9 +124,19 @@ const app = await buildApp({
}
},
accessControl: { async getAccessProfile() { return managerAccess; } },
customerAccess: {
async getDoorContext(input) {
assert.deepEqual(input, { tenantId: '7', userId: '22', orderId: '31' });
return { orderId: '31', storeId: '11', roomId: '31', status: 'IN_PROGRESS' };
}
},
service: {
async controlPower(_context, input) { routed = input; return { status: 'PUBLISHED' }; },
async controlDoor() { return {}; },
async controlDoor(context, input) {
routedContext = context;
routed = input;
return { commandId: 'cmd-door', status: 'PUBLISHED' };
},
async playTts() { return {}; },
async stopTts() { return {}; },
async controlLed() { return {}; },
@@ -164,6 +175,25 @@ const invalid = await app.inject({
payload: { storeId: '11', roomId: '31', order: 'open', delayTime: 15 }
});
assert.equal(invalid.statusCode, 400);
const appOpenDoor = await app.inject({
method: 'POST',
url: '/app-api/orders/31/open-door',
headers: { authorization: `Bearer ${token}`, 'x-trace-id': 'm08a-open-door' },
payload: { delayTime: 4, holdopen: 1 }
});
assert.equal(appOpenDoor.statusCode, 400);
const appOpenDoorOk = await app.inject({
method: 'POST',
url: '/app-api/orders/31/open-door',
headers: { authorization: `Bearer ${token}`, 'x-trace-id': 'm08a-open-door' },
payload: { delayTime: 4 }
});
assert.equal(appOpenDoorOk.statusCode, 200);
assert.equal(routed.order, 'open');
assert.equal(routed.holdopen, 0);
assert.equal(routedContext.orderId, '31');
assert.equal(routedContext.traceId, 'm08a-open-door');
assert.deepEqual(routedContext.access.capabilities, ['device.write']);
await app.close();
console.log('PASS: M06-E device control commands include control-box, Sub-1G and smart socket.');