Skip to content

Commit

Permalink
fix(ignore): Fix getFromLookup. Koenkk/zigbee2mqtt#17880
Browse files Browse the repository at this point in the history
  • Loading branch information
Koenkk committed Jun 2, 2023
1 parent cdbca3a commit 6dedb6b
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 4 deletions.
12 changes: 8 additions & 4 deletions src/lib/utils2.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,14 @@ export function assertNumber(value: unknown, property: string): asserts value is
if (typeof value !== 'number') throw new Error(`'${property}' is not a number, got ${typeof value} (${value.toString()})`);
}

export function getFromLookup<V>(value: unknown, lookup: {[s: string | number]: V}): V {
assertString(value, `Expected string got: '${value}' (${typeof(value)})`);
const result = lookup[value.toLowerCase()] ?? lookup[value.toUpperCase()];
if (!result) throw new Error(`Expected one of: ${Object.keys(lookup).join(', ')}, got: '${value}'`);
export function getFromLookup<V>(value: unknown, lookup: {[s: number | string]: V}): V {
let result = undefined;
if (typeof value === 'string') {
result = lookup[value.toLowerCase()] ?? lookup[value.toUpperCase()];
} else if (typeof value === 'number') {
result = lookup[value];
}
if (result === undefined) throw new Error(`Expected one of: ${Object.keys(lookup).join(', ')}, got: '${value}'`);
return result;
}

Expand Down
8 changes: 8 additions & 0 deletions test/index.test.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
const index = require('../index');
const exposes = require('../lib/exposes');
const utils2 = require('../lib/utils2');
const tuya = require('../lib/tuya');
const deepClone = (obj) => JSON.parse(JSON.stringify(obj));
const equals = require('fast-deep-equal/es6');
Expand Down Expand Up @@ -558,6 +559,13 @@ describe('index.js', () => {
['temperature_precision', 'temperature_calibration']);
});

it('Check getFromLookup', () => {
expect(utils2.getFromLookup('OFF', {'off': 0, 'on': 1, 'previous': 2})).toStrictEqual(0);
expect(utils2.getFromLookup('On', {'off': 0, 'on': 1, 'previous': 2})).toStrictEqual(1);
expect(utils2.getFromLookup('previous', {'OFF': 0, 'ON': 1, 'PREVIOUS': 2})).toStrictEqual(2);
expect(utils2.getFromLookup(1, {0: 'OFF', 1: 'on'})).toStrictEqual('on');
});

it('List expose number', () => {
// Example payload:
// {"temperatures": [19,21,30]}
Expand Down

0 comments on commit 6dedb6b

Please sign in to comment.