Skip to content

Commit

Permalink
#119 feat: Merge the initial config with defaults
Browse files Browse the repository at this point in the history
  • Loading branch information
TWilkin committed Jun 11, 2024
1 parent 903e331 commit fae9a45
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 36 deletions.
6 changes: 5 additions & 1 deletion services/api/src/services/DeviceStateService.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ describe("DeviceStateService", () => {
type: "Light",
location: "Hallway",
categories: ["Light", "Something"],
visible: false,
},
]);

Expand Down Expand Up @@ -127,7 +128,7 @@ describe("DeviceStateService", () => {
expect(device.name).toBe("HallwayLight");
expect(device.display_name).toBe("Hallway Light");
expect(device.type).toBe("Light");
expect(device.visible).toBeTruthy();
expect(device.visible).toBeFalsy();
expect(device.location).toBe("Hallway");
expect(device.categories).toStrictEqual(["Light", "Something"]);
});
Expand Down Expand Up @@ -256,6 +257,7 @@ describe("DeviceStateService", () => {
expect(device.display_name).toBe("Hallway Light");
expect(device.location).toBe("Hallway");
expect(device.categories).toStrictEqual(["Light", "Something"]);
expect(device.visible).toBeFalsy();

// check the initial state
expect(device.state).toBe(DeviceState.Unknown);
Expand All @@ -281,6 +283,7 @@ describe("DeviceStateService", () => {
expect(device.display_name).toBe("Office Socket");
expect(device.location).toBe("Office");
expect(device.categories).toStrictEqual(["Socket", "Something Else"]);
expect(device.visible).toBeTruthy();

// check the state is unchanged
expect(device.state).toBe(DeviceState.Unknown);
Expand Down Expand Up @@ -311,6 +314,7 @@ describe("DeviceStateService", () => {
// check the device is new
expect(device.name).toBe("Something Else");
expect(device.display_name).toBe("Office Socket");
expect(device.visible).toBeTruthy();

// check the state is initialised
expect(device.state).toBe(DeviceState.Unknown);
Expand Down
31 changes: 15 additions & 16 deletions services/api/src/services/DeviceStateService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ export default class DeviceStateService extends DeviceStateListener {
// otherwise merge them
return {
...device,
...newConfig,
...this.defaultDevice(newConfig),
display_name: newConfig.displayName ?? device.display_name,
};
})
Expand All @@ -130,19 +130,18 @@ export default class DeviceStateService extends DeviceStateListener {
this._devices = this.config.devices.map(this.initialiseDevice);
}

private initialiseDevice(device: IDevice): Device {
return {
name: device.name,
display_name: device.displayName,
type: device.type,
visible: device.visible ?? true,
location: device.location,
categories: device.categories,
state: DeviceState.Unknown,
since: -1,
battery: undefined,
batterySince: undefined,
charging: false,
};
}
private initialiseDevice = (device: IDevice): Device => ({
...this.defaultDevice(device),
display_name: device.displayName,
state: DeviceState.Unknown,
since: -1,
battery: undefined,
batterySince: undefined,
charging: false,
});

private defaultDevice = (device: IDevice) => ({
...device,
visible: device.visible ?? true,
});
}
40 changes: 21 additions & 19 deletions services/api/src/services/SensorStateService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ export default class SensorStateService extends SensorStateListener {
// otherwise merge them
return {
...sensor,
...newConfig,
...this.defaultSensor(newConfig),
display_name: newConfig.displayName ?? sensor.display_name,
};
})
Expand All @@ -139,22 +139,24 @@ export default class SensorStateService extends SensorStateListener {
this._sensors = this.config.sensors.map(this.initialiseSensor);
}

private initialiseSensor(sensor: ISensor): Sensor {
return {
name: sensor.name,
display_name: sensor.displayName ?? sensor.name,
type: sensor.type,
location: sensor.location,
entity: sensor.entity ?? sensor.name,
action: sensor.action ?? sensor.type,
visible: sensor.visible ?? true,
state: undefined,
value: undefined,
unit: undefined,
since: -1,
battery: undefined,
batterySince: undefined,
charging: false,
};
}
/** The options a sensor should have when it's first loaded. */
private initialiseSensor = (sensor: ISensor): Sensor => ({
...this.defaultSensor(sensor),
display_name: sensor.displayName ?? sensor.name,
state: undefined,
value: undefined,
unit: undefined,
since: -1,
battery: undefined,
batterySince: undefined,
charging: false,
});

/** The optional options default values for ISensor. */
private defaultSensor = (sensor: ISensor) => ({
...sensor,
entity: sensor.entity ?? sensor.name,
action: sensor.action ?? sensor.type,
visible: sensor.visible ?? true,
});
}

0 comments on commit fae9a45

Please sign in to comment.