"use strict"; // Alexa.ChangeReport: published on /changeReport, where Alex2MQTT adds the user's token and posts it to the // Alexa event gateway. const { test } = require("node:test"); const assert = require("node:assert/strict"); const { Alex2MQTT, AlexaInterfaceType, DisplayCategory, PowerController } = require("../dist/index.js"); const { setup, until } = require("./helpers/harness.js"); test("a change report carries the changed properties in payload.change and the rest in context", async () => { const { alexa, bridge } = await setup(Alex2MQTT, "root"); const lamp = bridge.registerDevice("Dining Room Light", "5020AA", DisplayCategory.LIGHT); lamp.addCapability(AlexaInterfaceType.POWER_CONTROLLER, { proactivelyReported: true }); lamp.addCapability(AlexaInterfaceType.BRIGHTNESS_CONTROLLER); const topic = await lamp.getChangeReport("PHYSICAL_INTERACTION") .addPowerControllerProp(PowerController.OFF) .unchanged() .addBrightnessControllerProp(0) .send(); assert.equal(topic, "root/changeReport"); await until(() => alexa.on("root/changeReport").length === 1, 3000, "change report"); const [report] = alexa.on("root/changeReport"); assert.equal(report.event.header.name, "ChangeReport"); assert.equal(report.event.endpoint.endpointId, "5020AA"); assert.equal(report.event.payload.change.cause.type, "PHYSICAL_INTERACTION"); assert.deepEqual(report.event.payload.change.properties.map((p) => [p.name, p.value]), [["powerState", "OFF"]]); assert.deepEqual(report.context.properties.map((p) => [p.name, p.value]), [["brightness", 0]]); });