registry: SecurityPanelController with Arm.Response and its errors
Alexa.SecurityPanelController is described from its page: version 3 (the stub of 1.5.2 said 1), armState and the four alarms, Arm and Disarm. ctx.respond() answers Arm with Arm.Response under the namespace of the interface, its payload checked (exitDelayInSeconds 0 to 255, bypassedEndpoints), and Disarm with a Response. A Disarm carries the PIN the user said when the panel is declared with supportedAuthorizationTypes; the handler checks it and answers UNAUTHORIZED, which goes under Alexa.SecurityPanelController like the five other error types. A panel declared without options lists armState, where 1.5.2 listed no property; alarms are declared. 17 examples of the two pages are saved as fixtures. 215 tests pass, 207 before. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
parent
f555a5df70
commit
c59cf3ff10
39 changed files with 1248 additions and 23 deletions
|
|
@ -48,14 +48,15 @@ for (const { namespace, page, declared, unfit = [], chosen = false, folded = []
|
|||
}
|
||||
}
|
||||
|
||||
const directives = examples(page, ".directive").map((name) => doc(page, name).directive);
|
||||
// A page also shows the directives of the interface it is paired with: TurnOn on the page of WakeOnLANController
|
||||
const directives = examples(page, ".directive").map((name) => doc(page, name).directive)
|
||||
.filter((directive) => directive.header.namespace === namespace);
|
||||
assert.deepEqual(
|
||||
[...new Set(directives.map((directive) => directive.header.name))].sort(),
|
||||
Object.keys(descriptor.directives).filter((name) => name !== "ReportState" && !folded.includes(name)).sort(),
|
||||
"the page has an example of every directive"
|
||||
);
|
||||
for (const { header, payload } of directives) {
|
||||
assert.equal(header.namespace, namespace);
|
||||
assert.deepEqual(descriptor.directives[header.name].payload.parse(payload, "payload"), payload);
|
||||
}
|
||||
|
||||
|
|
@ -135,8 +136,10 @@ test("every AlexaInterfaceType is in the registry: described, or a stub with the
|
|||
});
|
||||
|
||||
test("AlexaInterface.getVersion() and getProps() read the registry", () => {
|
||||
// What a thermostat lists is for its declaration to say: a 1.x declaration lists what 1.5.2 listed
|
||||
// What a thermostat or a security panel lists is for its declaration to say: a 1.x declaration of the thermostat
|
||||
// lists what 1.5.2 listed, one of the panel the arm state and no alarm
|
||||
const chosen = {
|
||||
"Alexa.SecurityPanelController": ["armState"],
|
||||
"Alexa.ThermostatController": ["targetSetpoint", "lowerSetpoint", "upperSetpoint", "thermostatMode"],
|
||||
"Alexa.ThermostatController.Schedule": ["scheduleEnabled"],
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue