iobroker.telegram-menu 2.2.4 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -0
- package/admin/build/index.js +49 -49
- package/admin/build/index.js.map +3 -3
- package/admin/css/button.css +3 -0
- package/admin/css/row-editor.css +1 -1
- package/admin/css/style.css +46 -25
- package/admin/css/textarea.css +7 -11
- package/admin/i18n/de/translations.json +124 -123
- package/admin/i18n/en/translations.json +3 -2
- package/admin/i18n/es/translations.json +3 -2
- package/admin/i18n/fr/translations.json +3 -2
- package/admin/i18n/it/translations.json +3 -2
- package/admin/i18n/nl/translations.json +3 -2
- package/admin/i18n/pl/translations.json +3 -2
- package/admin/i18n/pt/translations.json +3 -2
- package/admin/i18n/ru/translations.json +3 -2
- package/admin/i18n/uk/translations.json +3 -2
- package/admin/i18n/zh-cn/translations.json +3 -2
- package/admin/words.js +3 -1
- package/build/admin/src/config/helper.js +178 -0
- package/build/admin/src/config/helper.js.map +1 -0
- package/build/admin/src/lib/Utils.js +64 -0
- package/build/admin/src/lib/Utils.js.map +1 -0
- package/build/admin/src/types/event.js +3 -0
- package/build/admin/src/types/event.js.map +1 -0
- package/build/app/action.js +270 -0
- package/build/app/action.js.map +7 -0
- package/build/app/adapterManager.js +36 -0
- package/build/app/adapterManager.js.map +7 -0
- package/build/app/adapterStartMenuSend.js +59 -0
- package/build/app/adapterStartMenuSend.js.map +7 -0
- package/build/app/backMenu.js +110 -0
- package/build/app/backMenu.js.map +7 -0
- package/build/app/botAction.js +47 -0
- package/build/app/botAction.js.map +7 -0
- package/build/app/configVariables.js +56 -0
- package/build/app/configVariables.js.map +7 -0
- package/build/app/connection.js +42 -0
- package/build/app/connection.js.map +7 -0
- package/build/app/createState.js +42 -0
- package/build/app/createState.js.map +7 -0
- package/build/app/dynamicSwitch.js +69 -0
- package/build/app/dynamicSwitch.js.map +7 -0
- package/build/app/dynamicSwitchMenu.js +69 -0
- package/build/app/dynamicSwitchMenu.js.map +7 -0
- package/build/app/dynamicValue.js +80 -0
- package/build/app/dynamicValue.js.map +7 -0
- package/build/app/echarts.js +60 -0
- package/build/app/echarts.js.map +7 -0
- package/build/app/getstate.js +148 -0
- package/build/app/getstate.js.map +7 -0
- package/build/app/global.js +2 -0
- package/build/app/global.js.map +7 -0
- package/build/app/httpRequest.js +84 -0
- package/build/app/httpRequest.js.map +7 -0
- package/build/app/jsonTable.js +158 -0
- package/build/app/jsonTable.js.map +7 -0
- package/build/app/logging.js +46 -0
- package/build/app/logging.js.map +7 -0
- package/build/app/messageIds.js +116 -0
- package/build/app/messageIds.js.map +7 -0
- package/build/app/processData.js +198 -0
- package/build/app/processData.js.map +7 -0
- package/build/app/sendNav.js +49 -0
- package/build/app/sendNav.js.map +7 -0
- package/build/app/sendpic.js +95 -0
- package/build/app/sendpic.js.map +7 -0
- package/build/app/sentry.js +43 -0
- package/build/app/sentry.js.map +7 -0
- package/build/app/setStateIdsToListenTo.js +42 -0
- package/build/app/setStateIdsToListenTo.js.map +7 -0
- package/build/app/setstate.js +145 -0
- package/build/app/setstate.js.map +7 -0
- package/build/app/shoppingList.js +97 -0
- package/build/app/shoppingList.js.map +7 -0
- package/build/app/subMenu.js +281 -0
- package/build/app/subMenu.js.map +7 -0
- package/build/app/subscribeStates.js +41 -0
- package/build/app/subscribeStates.js.map +7 -0
- package/build/app/telegram.js +131 -0
- package/build/app/telegram.js.map +7 -0
- package/build/app/validateMenus.js +64 -0
- package/build/app/validateMenus.js.map +7 -0
- package/build/build/src/app/action.js +447 -0
- package/build/build/src/app/adapterStartMenuSend.js +37 -0
- package/build/build/src/app/backMenu.js +70 -0
- package/build/build/src/app/botAction.js +25 -0
- package/build/build/src/app/connection.js +19 -0
- package/build/build/src/app/createState.js +19 -0
- package/build/build/src/app/dynamicSwitch.js +51 -0
- package/build/build/src/app/dynamicValue.js +64 -0
- package/build/build/src/app/echarts.js +45 -0
- package/build/build/src/app/getstate.js +157 -0
- package/build/build/src/app/global.js +59 -0
- package/build/build/src/app/httpRequest.js +64 -0
- package/build/build/src/app/jsonTable.js +147 -0
- package/build/build/src/app/logging.js +13 -0
- package/build/build/src/app/messageIds.js +88 -0
- package/build/build/src/app/processData.js +208 -0
- package/build/build/src/app/sendNav.js +30 -0
- package/build/build/src/app/sendpic.js +69 -0
- package/build/build/src/app/setstate.js +126 -0
- package/build/build/src/app/shoppingList.js +72 -0
- package/build/build/src/app/subMenu.js +361 -0
- package/build/build/src/app/subscribeStates.js +25 -0
- package/build/build/src/app/telegram.js +101 -0
- package/build/build/src/lib/string.js +28 -0
- package/build/build/src/lib/time.js +23 -0
- package/build/build/src/lib/utilities.js +263 -0
- package/build/build/src/lib/utils.js +13 -0
- package/build/build/src/main.js +402 -0
- package/build/config/config.js +134 -0
- package/build/config/config.js.map +7 -0
- package/build/io-package.json +87 -87
- package/build/lib/action.js +1 -3
- package/build/lib/action.js.map +2 -2
- package/build/lib/adapterStartMenuSend.js.map +1 -1
- package/build/lib/appUtils.js +158 -0
- package/build/lib/appUtils.js.map +7 -0
- package/build/lib/appUtilsString.js +37 -0
- package/build/lib/appUtilsString.js.map +7 -0
- package/build/lib/backMenu.js.map +2 -2
- package/build/lib/botAction.js.map +1 -1
- package/build/lib/dynamicSwitch.js.map +1 -1
- package/build/lib/dynamicValue.js.map +1 -1
- package/build/lib/echarts.js.map +1 -1
- package/build/lib/getstate.js.map +1 -1
- package/build/lib/global.js.map +1 -1
- package/build/lib/httpRequest.js.map +1 -1
- package/build/lib/json.js +54 -0
- package/build/lib/json.js.map +7 -0
- package/build/lib/jsonTable.js.map +1 -1
- package/build/lib/math.js +41 -0
- package/build/lib/math.js.map +7 -0
- package/build/lib/messageIds.js.map +1 -1
- package/build/lib/object.js +35 -0
- package/build/lib/object.js.map +7 -0
- package/build/lib/processData.js +4 -18
- package/build/lib/processData.js.map +3 -3
- package/build/lib/sendNav.js.map +1 -1
- package/build/lib/sendpic.js +23 -22
- package/build/lib/sendpic.js.map +2 -2
- package/build/lib/setstate.js.map +1 -1
- package/build/lib/shoppingList.js.map +1 -1
- package/build/lib/splitValues.js +63 -0
- package/build/lib/splitValues.js.map +7 -0
- package/build/lib/string.js +125 -3
- package/build/lib/string.js.map +2 -2
- package/build/lib/subMenu.js +1 -2
- package/build/lib/subMenu.js.map +2 -2
- package/build/lib/subscribeStates.js.map +1 -1
- package/build/lib/telegram.js.map +1 -1
- package/build/lib/time.js +93 -0
- package/build/lib/time.js.map +7 -0
- package/build/lib/utilities.js +84 -281
- package/build/lib/utilities.js.map +3 -3
- package/build/lib/utils.js +66 -0
- package/build/lib/utils.js.map +7 -0
- package/build/main.js +151 -233
- package/build/main.js.map +3 -3
- package/build/src/app/action.js +239 -0
- package/build/src/app/action.js.map +1 -0
- package/build/src/app/adapterManager.js +12 -0
- package/build/src/app/adapterManager.js.map +1 -0
- package/build/src/app/adapterStartMenuSend.js +36 -0
- package/build/src/app/adapterStartMenuSend.js.map +1 -0
- package/build/src/app/backMenu.js +81 -0
- package/build/src/app/backMenu.js.map +1 -0
- package/build/src/app/botAction.js +25 -0
- package/build/src/app/botAction.js.map +1 -0
- package/build/src/app/configVariables.js +32 -0
- package/build/src/app/configVariables.js.map +1 -0
- package/build/src/app/connection.js +20 -0
- package/build/src/app/connection.js.map +1 -0
- package/build/src/app/createState.js +19 -0
- package/build/src/app/createState.js.map +1 -0
- package/build/src/app/dynamicSwitch.js +52 -0
- package/build/src/app/dynamicSwitch.js.map +1 -0
- package/build/src/app/dynamicSwitchMenu.js +52 -0
- package/build/src/app/dynamicSwitchMenu.js.map +1 -0
- package/build/src/app/dynamicValue.js +52 -0
- package/build/src/app/dynamicValue.js.map +1 -0
- package/build/src/app/echarts.js +33 -0
- package/build/src/app/echarts.js.map +1 -0
- package/build/src/app/getstate.js +122 -0
- package/build/src/app/getstate.js.map +1 -0
- package/build/src/app/global.js +8 -0
- package/build/src/app/global.js.map +1 -0
- package/build/src/app/httpRequest.js +55 -0
- package/build/src/app/httpRequest.js.map +1 -0
- package/build/src/app/jsonTable.js +147 -0
- package/build/src/app/jsonTable.js.map +1 -0
- package/build/src/app/logging.js +22 -0
- package/build/src/app/logging.js.map +1 -0
- package/build/src/app/messageIds.js +89 -0
- package/build/src/app/messageIds.js.map +1 -0
- package/build/src/app/processData.js +153 -0
- package/build/src/app/processData.js.map +1 -0
- package/build/src/app/sendNav.js +26 -0
- package/build/src/app/sendNav.js.map +1 -0
- package/build/src/app/sendpic.js +66 -0
- package/build/src/app/sendpic.js.map +1 -0
- package/build/src/app/sentry.js +18 -0
- package/build/src/app/sentry.js.map +1 -0
- package/build/src/app/setStateIdsToListenTo.js +17 -0
- package/build/src/app/setStateIdsToListenTo.js.map +1 -0
- package/build/src/app/setstate.js +114 -0
- package/build/src/app/setstate.js.map +1 -0
- package/build/src/app/shoppingList.js +74 -0
- package/build/src/app/shoppingList.js.map +1 -0
- package/build/src/app/subMenu.js +237 -0
- package/build/src/app/subMenu.js.map +1 -0
- package/build/src/app/subscribeStates.js +17 -0
- package/build/src/app/subscribeStates.js.map +1 -0
- package/build/src/app/telegram.js +83 -0
- package/build/src/app/telegram.js.map +1 -0
- package/build/src/app/validateMenus.js +30 -0
- package/build/src/app/validateMenus.js.map +1 -0
- package/build/src/config/config.js +100 -0
- package/build/src/config/config.js.map +1 -0
- package/build/src/lib/appUtils.js +126 -0
- package/build/src/lib/appUtils.js.map +1 -0
- package/build/src/lib/appUtilsString.js +13 -0
- package/build/src/lib/appUtilsString.js.map +1 -0
- package/build/src/lib/json.js +37 -0
- package/build/src/lib/json.js.map +1 -0
- package/build/src/lib/math.js +17 -0
- package/build/src/lib/math.js.map +1 -0
- package/build/src/lib/object.js +10 -0
- package/build/src/lib/object.js.map +1 -0
- package/build/src/lib/splitValues.js +35 -0
- package/build/src/lib/splitValues.js.map +1 -0
- package/build/src/lib/string.js +121 -0
- package/build/src/lib/string.js.map +1 -0
- package/build/src/lib/time.js +57 -0
- package/build/src/lib/time.js.map +1 -0
- package/build/src/lib/utilities.js +111 -0
- package/build/src/lib/utilities.js.map +1 -0
- package/build/src/lib/utils.js +37 -0
- package/build/src/lib/utils.js.map +1 -0
- package/build/src/main.js +332 -0
- package/build/src/main.js.map +1 -0
- package/build/src/test/setup.js +12 -0
- package/build/src/test/setup.js.map +1 -0
- package/build/src/types/types.js +3 -0
- package/build/src/types/types.js.map +1 -0
- package/build/test/integration.js +0 -1
- package/build/test/integration.js.map +1 -1
- package/build/test/mocha.setup.js +0 -1
- package/build/test/mocha.setup.js.map +1 -1
- package/build/test/package.js +0 -1
- package/build/test/package.js.map +1 -1
- package/build/test/setup.js +12 -0
- package/build/test/setup.js.map +1 -0
- package/build/test/test/appUtils.test.js +507 -0
- package/build/test/test/appUtils.test.js.map +1 -0
- package/build/test/test/appUtilsString.test.js +16 -0
- package/build/test/test/appUtilsString.test.js.map +1 -0
- package/build/test/test/math.test.js +33 -0
- package/build/test/test/math.test.js.map +1 -0
- package/build/test/test/object.test.js +54 -0
- package/build/test/test/object.test.js.map +1 -0
- package/build/test/test/string.test.js +361 -0
- package/build/test/test/string.test.js.map +1 -0
- package/build/test/test/time.test.js +201 -0
- package/build/test/test/time.test.js.map +1 -0
- package/build/test/test/utils.test.js +115 -0
- package/build/test/test/utils.test.js.map +1 -0
- package/build/types/types.js +15 -0
- package/build/types/types.js.map +3 -3
- package/io-package.json +19 -14
- package/package.json +14 -10
- package/build/main.test.js +0 -24
- package/build/main.test.js.map +0 -1
|
@@ -0,0 +1,507 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const appUtils_1 = require("../../src/lib/appUtils"); // Adjust the path as needed
|
|
4
|
+
const chai_1 = require("chai");
|
|
5
|
+
const testing_1 = require("@iobroker/testing");
|
|
6
|
+
const { adapter } = testing_1.utils.unit.createMocks({});
|
|
7
|
+
describe("checkOneLineValue", () => {
|
|
8
|
+
it("should add a row splitter to the end of the text if it doesn't already contain one", () => {
|
|
9
|
+
const result = (0, appUtils_1.checkOneLineValue)("Hello this is a test");
|
|
10
|
+
(0, chai_1.expect)(result).to.equal("Hello this is a test &&");
|
|
11
|
+
});
|
|
12
|
+
it("should not add a row splitter if the text already contains one", () => {
|
|
13
|
+
const result = (0, appUtils_1.checkOneLineValue)("Hello this is a test &&");
|
|
14
|
+
(0, chai_1.expect)(result).to.equal("Hello this is a test &&");
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
describe('calcValue', () => {
|
|
18
|
+
it('should calculate a valid mathematical expression', () => {
|
|
19
|
+
const textToSend = 'Test {math:+5}';
|
|
20
|
+
const val = '10';
|
|
21
|
+
const result = (0, appUtils_1.calcValue)(textToSend, val, adapter);
|
|
22
|
+
(0, chai_1.expect)(result).to.deep.equal({
|
|
23
|
+
textToSend: 'Test',
|
|
24
|
+
calculated: 15,
|
|
25
|
+
error: false,
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
it('should return the original text and value if the expression is invalid', () => {
|
|
29
|
+
const textToSend = 'Test {math:+}';
|
|
30
|
+
const val = '10';
|
|
31
|
+
const result = (0, appUtils_1.calcValue)(textToSend, val, adapter);
|
|
32
|
+
(0, chai_1.expect)(result).to.deep.equal({
|
|
33
|
+
textToSend: 'Test',
|
|
34
|
+
calculated: '10',
|
|
35
|
+
error: true,
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
it('should handle empty input gracefully', () => {
|
|
39
|
+
const textToSend = '';
|
|
40
|
+
const val = '';
|
|
41
|
+
const result = (0, appUtils_1.calcValue)(textToSend, val, adapter);
|
|
42
|
+
(0, chai_1.expect)(result).to.deep.equal({
|
|
43
|
+
textToSend: '',
|
|
44
|
+
calculated: '',
|
|
45
|
+
error: false,
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
it('should return the original text if no math expression is found', () => {
|
|
49
|
+
const textToSend = 'No math here';
|
|
50
|
+
const val = '10';
|
|
51
|
+
const result = (0, appUtils_1.calcValue)(textToSend, val, adapter);
|
|
52
|
+
(0, chai_1.expect)(result).to.deep.equal({
|
|
53
|
+
textToSend: 'No math here',
|
|
54
|
+
calculated: 10,
|
|
55
|
+
error: false,
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
it('should handle complex expressions correctly', () => {
|
|
59
|
+
const textToSend = 'Test {math:*2} test';
|
|
60
|
+
const val = '5';
|
|
61
|
+
const result = (0, appUtils_1.calcValue)(textToSend, val, adapter);
|
|
62
|
+
(0, chai_1.expect)(result).to.deep.equal({
|
|
63
|
+
textToSend: 'Test test',
|
|
64
|
+
calculated: 10,
|
|
65
|
+
error: false,
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
describe('roundValue', () => {
|
|
70
|
+
it('should round the value to the specified number of decimal places', () => {
|
|
71
|
+
const val = '123.4567';
|
|
72
|
+
const textToSend = 'Test {round:2}';
|
|
73
|
+
const result = (0, appUtils_1.roundValue)(val, textToSend);
|
|
74
|
+
(0, chai_1.expect)(result).to.deep.equal({
|
|
75
|
+
roundedValue: '123.46',
|
|
76
|
+
text: 'Test',
|
|
77
|
+
error: false,
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
it('should handle invalid decimal places gracefully', () => {
|
|
81
|
+
const val = '123.4567';
|
|
82
|
+
const textToSend = 'Test {round:invalid}';
|
|
83
|
+
const result = (0, appUtils_1.roundValue)(val, textToSend);
|
|
84
|
+
(0, chai_1.expect)(result).to.deep.equal({
|
|
85
|
+
roundedValue: '123.4567',
|
|
86
|
+
text: 'Test',
|
|
87
|
+
error: true,
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
it('should handle empty input gracefully', () => {
|
|
91
|
+
const val = '';
|
|
92
|
+
const textToSend = '';
|
|
93
|
+
const result = (0, appUtils_1.roundValue)(val, textToSend);
|
|
94
|
+
(0, chai_1.expect)(result).to.deep.equal({
|
|
95
|
+
roundedValue: 'NaN',
|
|
96
|
+
text: '',
|
|
97
|
+
error: true,
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
it('should return an error if the value is not a valid number', () => {
|
|
101
|
+
const val = 'invalid';
|
|
102
|
+
const textToSend = 'Test {round:2}';
|
|
103
|
+
const result = (0, appUtils_1.roundValue)(val, textToSend);
|
|
104
|
+
(0, chai_1.expect)(result).to.deep.equal({
|
|
105
|
+
roundedValue: 'NaN',
|
|
106
|
+
text: 'Test',
|
|
107
|
+
error: true,
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
it('should handle text without a round command', () => {
|
|
111
|
+
const val = '123.4567';
|
|
112
|
+
const textToSend = 'No round here';
|
|
113
|
+
const result = (0, appUtils_1.roundValue)(val, textToSend);
|
|
114
|
+
(0, chai_1.expect)(result).to.deep.equal({
|
|
115
|
+
roundedValue: '123.4567',
|
|
116
|
+
text: 'No round here',
|
|
117
|
+
error: true,
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
describe('getMenusWithUser', () => {
|
|
122
|
+
it('should return menus that include the specified user', () => {
|
|
123
|
+
const menusWithUsers = {
|
|
124
|
+
menu1: ['user1', 'user2'],
|
|
125
|
+
menu2: ['user3'],
|
|
126
|
+
menu3: ['user1', 'user4'],
|
|
127
|
+
};
|
|
128
|
+
const userToSend = 'user1';
|
|
129
|
+
const result = (0, appUtils_1.getListOfMenusIncludingUser)(menusWithUsers, userToSend);
|
|
130
|
+
(0, chai_1.expect)(result).to.deep.equal(['menu1', 'menu3']);
|
|
131
|
+
});
|
|
132
|
+
it('should return an empty array if no menus include the specified user', () => {
|
|
133
|
+
const menusWithUsers = {
|
|
134
|
+
menu1: ['user2'],
|
|
135
|
+
menu2: ['user3'],
|
|
136
|
+
};
|
|
137
|
+
const userToSend = 'user1';
|
|
138
|
+
const result = (0, appUtils_1.getListOfMenusIncludingUser)(menusWithUsers, userToSend);
|
|
139
|
+
(0, chai_1.expect)(result).to.deep.equal([]);
|
|
140
|
+
});
|
|
141
|
+
it('should return an empty array if the menusWithUsers object is empty', () => {
|
|
142
|
+
const menusWithUsers = {};
|
|
143
|
+
const userToSend = 'user1';
|
|
144
|
+
const result = (0, appUtils_1.getListOfMenusIncludingUser)(menusWithUsers, userToSend);
|
|
145
|
+
(0, chai_1.expect)(result).to.deep.equal([]);
|
|
146
|
+
});
|
|
147
|
+
it('should return an empty array if the userToSend is an empty string', () => {
|
|
148
|
+
const menusWithUsers = {
|
|
149
|
+
menu1: ['user1', 'user2'],
|
|
150
|
+
menu2: ['user3'],
|
|
151
|
+
};
|
|
152
|
+
const userToSend = '';
|
|
153
|
+
const result = (0, appUtils_1.getListOfMenusIncludingUser)(menusWithUsers, userToSend);
|
|
154
|
+
(0, chai_1.expect)(result).to.deep.equal([]);
|
|
155
|
+
});
|
|
156
|
+
it('should handle menus with empty user arrays', () => {
|
|
157
|
+
const menusWithUsers = {
|
|
158
|
+
menu1: [],
|
|
159
|
+
menu2: ['user3'],
|
|
160
|
+
};
|
|
161
|
+
const userToSend = 'user3';
|
|
162
|
+
const result = (0, appUtils_1.getListOfMenusIncludingUser)(menusWithUsers, userToSend);
|
|
163
|
+
(0, chai_1.expect)(result).to.deep.equal(['menu2']);
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
describe('getParseMode', () => {
|
|
167
|
+
it('should return "HTML" when the input is true', () => {
|
|
168
|
+
const result = (0, appUtils_1.getParseMode)(true);
|
|
169
|
+
(0, chai_1.expect)(result).to.equal('HTML');
|
|
170
|
+
});
|
|
171
|
+
it('should return "Markdown" when the input is false', () => {
|
|
172
|
+
const result = (0, appUtils_1.getParseMode)(false);
|
|
173
|
+
(0, chai_1.expect)(result).to.equal('Markdown');
|
|
174
|
+
});
|
|
175
|
+
it('should return "Markdown" when the input is undefined', () => {
|
|
176
|
+
const result = (0, appUtils_1.getParseMode)();
|
|
177
|
+
(0, chai_1.expect)(result).to.equal('Markdown');
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
describe('getTypeofTimestamp', () => {
|
|
181
|
+
it('should return "lc" when the array contains "lc"', () => {
|
|
182
|
+
const result = (0, appUtils_1.getTypeofTimestamp)('lc ts');
|
|
183
|
+
(0, chai_1.expect)(result).to.equal('lc');
|
|
184
|
+
});
|
|
185
|
+
it('should return "ts" when the array does not contain "lc" but contains "ts"', () => {
|
|
186
|
+
const result = (0, appUtils_1.getTypeofTimestamp)('ts');
|
|
187
|
+
(0, chai_1.expect)(result).to.equal('ts');
|
|
188
|
+
});
|
|
189
|
+
it('should return "ts" when the array is empty or does not contain "lc" or "ts"', () => {
|
|
190
|
+
const result = (0, appUtils_1.getTypeofTimestamp)("");
|
|
191
|
+
(0, chai_1.expect)(result).to.equal('ts');
|
|
192
|
+
});
|
|
193
|
+
it('should return "ts" when the array contains unrelated values', () => {
|
|
194
|
+
const result = (0, appUtils_1.getTypeofTimestamp)('random value');
|
|
195
|
+
(0, chai_1.expect)(result).to.equal('ts');
|
|
196
|
+
});
|
|
197
|
+
});
|
|
198
|
+
describe('statusIdAndParams', () => {
|
|
199
|
+
it('should parse id and shouldChange correctly when oldWithId is present', () => {
|
|
200
|
+
const input = "'id':'test.0.test':true";
|
|
201
|
+
const result = (0, appUtils_1.statusIdAndParams)(input);
|
|
202
|
+
(0, chai_1.expect)(result).to.deep.equal({
|
|
203
|
+
id: 'test.0.test',
|
|
204
|
+
shouldChange: true,
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
it('should parse id and shouldChange correctly when oldWithId is not present', () => {
|
|
208
|
+
const input = '"test.0.test":true';
|
|
209
|
+
const result = (0, appUtils_1.statusIdAndParams)(input);
|
|
210
|
+
(0, chai_1.expect)(result).to.deep.equal({
|
|
211
|
+
id: 'test.0.test',
|
|
212
|
+
shouldChange: true,
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
it('should handle input with missing shouldChange value', () => {
|
|
216
|
+
const input = "'id':'test.0.test':";
|
|
217
|
+
const result = (0, appUtils_1.statusIdAndParams)(input);
|
|
218
|
+
(0, chai_1.expect)(result).to.deep.equal({
|
|
219
|
+
id: 'test.0.test',
|
|
220
|
+
shouldChange: false,
|
|
221
|
+
});
|
|
222
|
+
});
|
|
223
|
+
it('should handle input with missing id value', () => {
|
|
224
|
+
const input = ":true";
|
|
225
|
+
const result = (0, appUtils_1.statusIdAndParams)(input);
|
|
226
|
+
(0, chai_1.expect)(result).to.deep.equal({
|
|
227
|
+
id: '',
|
|
228
|
+
shouldChange: true,
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
it('should handle empty input gracefully', () => {
|
|
232
|
+
const input = ':';
|
|
233
|
+
const result = (0, appUtils_1.statusIdAndParams)(input);
|
|
234
|
+
(0, chai_1.expect)(result).to.deep.equal({
|
|
235
|
+
id: '',
|
|
236
|
+
shouldChange: false,
|
|
237
|
+
});
|
|
238
|
+
});
|
|
239
|
+
});
|
|
240
|
+
describe('splitNavigation', () => {
|
|
241
|
+
it('should split navigation rows into the correct structure', () => {
|
|
242
|
+
const rows = [
|
|
243
|
+
{
|
|
244
|
+
value: 'item1,item2 && item3,item4',
|
|
245
|
+
text: 'Test Text',
|
|
246
|
+
parse_mode: 'true',
|
|
247
|
+
call: 'testCall',
|
|
248
|
+
},
|
|
249
|
+
];
|
|
250
|
+
const expectedOutput = [
|
|
251
|
+
{
|
|
252
|
+
call: 'testCall',
|
|
253
|
+
text: 'Test Text',
|
|
254
|
+
parse_mode: true,
|
|
255
|
+
nav: [
|
|
256
|
+
['item1', 'item2'],
|
|
257
|
+
['item3', 'item4'],
|
|
258
|
+
],
|
|
259
|
+
},
|
|
260
|
+
];
|
|
261
|
+
const result = (0, appUtils_1.splitNavigation)(rows);
|
|
262
|
+
(0, chai_1.expect)(result).to.deep.equal(expectedOutput);
|
|
263
|
+
});
|
|
264
|
+
it('should handle empty rows gracefully', () => {
|
|
265
|
+
const rows = [];
|
|
266
|
+
const expectedOutput = [];
|
|
267
|
+
const result = (0, appUtils_1.splitNavigation)(rows);
|
|
268
|
+
(0, chai_1.expect)(result).to.deep.equal(expectedOutput);
|
|
269
|
+
});
|
|
270
|
+
it('should handle rows with one values', () => {
|
|
271
|
+
const rows = [
|
|
272
|
+
{
|
|
273
|
+
value: 'item1',
|
|
274
|
+
text: 'Empty Value',
|
|
275
|
+
parse_mode: 'false',
|
|
276
|
+
call: 'emptyCall',
|
|
277
|
+
},
|
|
278
|
+
];
|
|
279
|
+
const expectedOutput = [
|
|
280
|
+
{
|
|
281
|
+
call: 'emptyCall',
|
|
282
|
+
text: 'Empty Value',
|
|
283
|
+
parse_mode: false,
|
|
284
|
+
nav: [["item1"], [""]],
|
|
285
|
+
},
|
|
286
|
+
];
|
|
287
|
+
const result = (0, appUtils_1.splitNavigation)(rows);
|
|
288
|
+
(0, chai_1.expect)(result).to.deep.equal(expectedOutput);
|
|
289
|
+
});
|
|
290
|
+
it('should handle rows with empty values', () => {
|
|
291
|
+
const rows = [
|
|
292
|
+
{
|
|
293
|
+
value: '',
|
|
294
|
+
text: 'Empty Value',
|
|
295
|
+
parse_mode: 'false',
|
|
296
|
+
call: 'emptyCall',
|
|
297
|
+
},
|
|
298
|
+
];
|
|
299
|
+
const expectedOutput = [
|
|
300
|
+
{
|
|
301
|
+
call: 'emptyCall',
|
|
302
|
+
text: 'Empty Value',
|
|
303
|
+
parse_mode: false,
|
|
304
|
+
nav: [[""], [""]],
|
|
305
|
+
},
|
|
306
|
+
];
|
|
307
|
+
const result = (0, appUtils_1.splitNavigation)(rows);
|
|
308
|
+
(0, chai_1.expect)(result).to.deep.equal(expectedOutput);
|
|
309
|
+
});
|
|
310
|
+
it('should trim all items in the navigation rows', () => {
|
|
311
|
+
const rows = [
|
|
312
|
+
{
|
|
313
|
+
value: ' item1 , item2 && item3 , item4 ',
|
|
314
|
+
text: 'Trim Test',
|
|
315
|
+
parse_mode: 'true',
|
|
316
|
+
call: 'trimCall',
|
|
317
|
+
},
|
|
318
|
+
];
|
|
319
|
+
const expectedOutput = [
|
|
320
|
+
{
|
|
321
|
+
call: 'trimCall',
|
|
322
|
+
text: 'Trim Test',
|
|
323
|
+
parse_mode: true,
|
|
324
|
+
nav: [
|
|
325
|
+
['item1', 'item2'],
|
|
326
|
+
['item3', 'item4'],
|
|
327
|
+
],
|
|
328
|
+
},
|
|
329
|
+
];
|
|
330
|
+
const result = (0, appUtils_1.splitNavigation)(rows);
|
|
331
|
+
(0, chai_1.expect)(result).to.deep.equal(expectedOutput);
|
|
332
|
+
});
|
|
333
|
+
it('should handle rows with multiple row splitters', () => {
|
|
334
|
+
const rows = [
|
|
335
|
+
{
|
|
336
|
+
value: 'item1,item2 && item3,item4 && item5,item6',
|
|
337
|
+
text: 'Multiple Splitters',
|
|
338
|
+
parse_mode: 'true',
|
|
339
|
+
call: 'multiCall',
|
|
340
|
+
},
|
|
341
|
+
];
|
|
342
|
+
const expectedOutput = [
|
|
343
|
+
{
|
|
344
|
+
call: 'multiCall',
|
|
345
|
+
text: 'Multiple Splitters',
|
|
346
|
+
parse_mode: true,
|
|
347
|
+
nav: [
|
|
348
|
+
['item1', 'item2'],
|
|
349
|
+
['item3', 'item4'],
|
|
350
|
+
['item5', 'item6'],
|
|
351
|
+
],
|
|
352
|
+
},
|
|
353
|
+
];
|
|
354
|
+
const result = (0, appUtils_1.splitNavigation)(rows);
|
|
355
|
+
(0, chai_1.expect)(result).to.deep.equal(expectedOutput);
|
|
356
|
+
});
|
|
357
|
+
});
|
|
358
|
+
describe('getNewStructure', () => {
|
|
359
|
+
it('should return an empty object when input is an empty array', () => {
|
|
360
|
+
const input = [];
|
|
361
|
+
const result = (0, appUtils_1.getNewStructure)(input);
|
|
362
|
+
(0, chai_1.expect)(result).to.deep.equal({});
|
|
363
|
+
});
|
|
364
|
+
it('should correctly map a single navigation item to the new structure', () => {
|
|
365
|
+
const input = [
|
|
366
|
+
{
|
|
367
|
+
nav: [['item1', 'item2']],
|
|
368
|
+
text: 'Sample Text',
|
|
369
|
+
parse_mode: true,
|
|
370
|
+
call: 'testCall',
|
|
371
|
+
},
|
|
372
|
+
];
|
|
373
|
+
const expected = {
|
|
374
|
+
testCall: {
|
|
375
|
+
nav: [['item1', 'item2']],
|
|
376
|
+
text: 'Sample Text',
|
|
377
|
+
parse_mode: true,
|
|
378
|
+
},
|
|
379
|
+
};
|
|
380
|
+
const result = (0, appUtils_1.getNewStructure)(input);
|
|
381
|
+
(0, chai_1.expect)(result).to.deep.equal(expected);
|
|
382
|
+
});
|
|
383
|
+
it('should handle multiple navigation items correctly', () => {
|
|
384
|
+
const input = [
|
|
385
|
+
{
|
|
386
|
+
nav: [['item1', 'item2']],
|
|
387
|
+
text: 'Text 1',
|
|
388
|
+
parse_mode: true,
|
|
389
|
+
call: 'call1',
|
|
390
|
+
},
|
|
391
|
+
{
|
|
392
|
+
nav: [['item3', 'item4']],
|
|
393
|
+
text: 'Text 2',
|
|
394
|
+
parse_mode: false,
|
|
395
|
+
call: 'call2',
|
|
396
|
+
},
|
|
397
|
+
];
|
|
398
|
+
const expected = {
|
|
399
|
+
call1: {
|
|
400
|
+
nav: [['item1', 'item2']],
|
|
401
|
+
text: 'Text 1',
|
|
402
|
+
parse_mode: true,
|
|
403
|
+
},
|
|
404
|
+
call2: {
|
|
405
|
+
nav: [['item3', 'item4']],
|
|
406
|
+
text: 'Text 2',
|
|
407
|
+
parse_mode: false,
|
|
408
|
+
},
|
|
409
|
+
};
|
|
410
|
+
const result = (0, appUtils_1.getNewStructure)(input);
|
|
411
|
+
(0, chai_1.expect)(result).to.deep.equal(expected);
|
|
412
|
+
});
|
|
413
|
+
it('should handle missing or undefined properties gracefully', () => {
|
|
414
|
+
const input = [
|
|
415
|
+
{
|
|
416
|
+
nav: [['item1']],
|
|
417
|
+
text: undefined,
|
|
418
|
+
parse_mode: undefined,
|
|
419
|
+
call: 'call1',
|
|
420
|
+
},
|
|
421
|
+
];
|
|
422
|
+
const expected = {
|
|
423
|
+
call1: {
|
|
424
|
+
nav: [['item1']],
|
|
425
|
+
text: undefined,
|
|
426
|
+
parse_mode: undefined,
|
|
427
|
+
},
|
|
428
|
+
};
|
|
429
|
+
const result = (0, appUtils_1.getNewStructure)(input);
|
|
430
|
+
(0, chai_1.expect)(result).to.deep.equal(expected);
|
|
431
|
+
});
|
|
432
|
+
});
|
|
433
|
+
describe('getStartSides', () => {
|
|
434
|
+
const additionalParams = { value: "", text: "", parse_mode: "" };
|
|
435
|
+
it('should correctly map start sides for given menusWithUsers and dataObject', () => {
|
|
436
|
+
const menusWithUsers = {
|
|
437
|
+
menu1: ['user1', 'user2'],
|
|
438
|
+
menu2: ['user3'],
|
|
439
|
+
};
|
|
440
|
+
const dataObject = {
|
|
441
|
+
nav: {
|
|
442
|
+
menu1: [{ call: 'start1', ...additionalParams }],
|
|
443
|
+
menu2: [{ call: 'start2', ...additionalParams }],
|
|
444
|
+
},
|
|
445
|
+
action: {}
|
|
446
|
+
};
|
|
447
|
+
const expected = {
|
|
448
|
+
menu1: 'start1',
|
|
449
|
+
menu2: 'start2',
|
|
450
|
+
};
|
|
451
|
+
const result = (0, appUtils_1.getStartSides)(menusWithUsers, dataObject);
|
|
452
|
+
(0, chai_1.expect)(result).to.deep.equal(expected);
|
|
453
|
+
});
|
|
454
|
+
});
|
|
455
|
+
describe('isStartside', () => {
|
|
456
|
+
it('should return false for "-"', () => {
|
|
457
|
+
const result = (0, appUtils_1.isStartside)('-');
|
|
458
|
+
(0, chai_1.expect)(result).to.be.false;
|
|
459
|
+
});
|
|
460
|
+
it('should return false for an empty string', () => {
|
|
461
|
+
const result = (0, appUtils_1.isStartside)('');
|
|
462
|
+
(0, chai_1.expect)(result).to.be.false;
|
|
463
|
+
});
|
|
464
|
+
it('should return true for any other string', () => {
|
|
465
|
+
const result = (0, appUtils_1.isStartside)('start');
|
|
466
|
+
(0, chai_1.expect)(result).to.be.true;
|
|
467
|
+
});
|
|
468
|
+
});
|
|
469
|
+
describe('exchangePlaceholderWithValue', () => {
|
|
470
|
+
it('should replace the placeholder with the provided value', () => {
|
|
471
|
+
const textToSend = 'Hello &&!';
|
|
472
|
+
const textToSend2 = 'Hello &&!';
|
|
473
|
+
const val = 'World';
|
|
474
|
+
const result = (0, appUtils_1.exchangePlaceholderWithValue)(textToSend, val);
|
|
475
|
+
const result2 = (0, appUtils_1.exchangePlaceholderWithValue)(textToSend2, val);
|
|
476
|
+
(0, chai_1.expect)(result).to.equal('Hello World!');
|
|
477
|
+
(0, chai_1.expect)(result2).to.equal('Hello World!');
|
|
478
|
+
});
|
|
479
|
+
it('should append the value if no placeholder is found', () => {
|
|
480
|
+
const textToSend = 'Hello';
|
|
481
|
+
const val = 'World';
|
|
482
|
+
const result = (0, appUtils_1.exchangePlaceholderWithValue)(textToSend, val);
|
|
483
|
+
(0, chai_1.expect)(result).to.equal('Hello World');
|
|
484
|
+
});
|
|
485
|
+
it('should handle empty textToSend gracefully', () => {
|
|
486
|
+
const textToSend = '';
|
|
487
|
+
const val = 'Value';
|
|
488
|
+
const result = (0, appUtils_1.exchangePlaceholderWithValue)(textToSend, val);
|
|
489
|
+
(0, chai_1.expect)(result).to.equal('Value');
|
|
490
|
+
});
|
|
491
|
+
it('should handle empty value gracefully', () => {
|
|
492
|
+
const textToSend = 'Hello &&';
|
|
493
|
+
const textToSend2 = 'Hello &&';
|
|
494
|
+
const val = '';
|
|
495
|
+
const result = (0, appUtils_1.exchangePlaceholderWithValue)(textToSend, val);
|
|
496
|
+
const result2 = (0, appUtils_1.exchangePlaceholderWithValue)(textToSend2, val);
|
|
497
|
+
(0, chai_1.expect)(result).to.equal('Hello');
|
|
498
|
+
(0, chai_1.expect)(result2).to.equal('Hello');
|
|
499
|
+
});
|
|
500
|
+
it('should handle both textToSend and value being empty', () => {
|
|
501
|
+
const textToSend = '';
|
|
502
|
+
const val = '';
|
|
503
|
+
const result = (0, appUtils_1.exchangePlaceholderWithValue)(textToSend, val);
|
|
504
|
+
(0, chai_1.expect)(result).to.equal('');
|
|
505
|
+
});
|
|
506
|
+
});
|
|
507
|
+
//# sourceMappingURL=appUtils.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appUtils.test.js","sourceRoot":"","sources":["../../../test/test/appUtils.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const chai_1 = require("chai");
|
|
4
|
+
const appUtilsString_1 = require("../../src/lib/appUtilsString");
|
|
5
|
+
describe('getPlaceholderValue', () => {
|
|
6
|
+
it('should return "&&" if the text contains "&&"', () => {
|
|
7
|
+
(0, chai_1.expect)((0, appUtilsString_1.getPlaceholderValue)('test && test')).to.equal('&&');
|
|
8
|
+
});
|
|
9
|
+
it('should return "&&" if the text contains "&&"', () => {
|
|
10
|
+
(0, chai_1.expect)((0, appUtilsString_1.getPlaceholderValue)('test && test')).to.equal('&&');
|
|
11
|
+
});
|
|
12
|
+
it('should return an empty string if the text contains neither "&&" nor "&&"', () => {
|
|
13
|
+
(0, chai_1.expect)((0, appUtilsString_1.getPlaceholderValue)('test')).to.equal('');
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=appUtilsString.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appUtilsString.test.js","sourceRoot":"","sources":["../../../test/test/appUtilsString.test.ts"],"names":[],"mappings":";;AAAA,+BAA8B;AAC9B,iEAAmE;AAEnE,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACpD,IAAA,aAAM,EAAC,IAAA,oCAAmB,EAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACpE,IAAA,aAAM,EAAC,IAAA,oCAAmB,EAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kFAAkF,EAAE,GAAG,EAAE;QACxF,IAAA,aAAM,EAAC,IAAA,oCAAmB,EAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const chai_1 = require("chai");
|
|
4
|
+
const math_1 = require("../../src/lib/math");
|
|
5
|
+
const testing_1 = require("@iobroker/testing");
|
|
6
|
+
const { adapter } = testing_1.utils.unit.createMocks({});
|
|
7
|
+
describe('evaluate', () => {
|
|
8
|
+
it('should evaluate a valid mathematical expression', () => {
|
|
9
|
+
const result = (0, math_1.evaluate)(['2', '+', '3'], adapter);
|
|
10
|
+
(0, chai_1.expect)(result).to.deep.equal({ val: 5, error: false });
|
|
11
|
+
});
|
|
12
|
+
it('should return an error for invalid expressions', () => {
|
|
13
|
+
const result = (0, math_1.evaluate)(['2', '+'], adapter);
|
|
14
|
+
(0, chai_1.expect)(result).to.deep.equal({ val: '', error: true });
|
|
15
|
+
});
|
|
16
|
+
it('should handle empty input gracefully', () => {
|
|
17
|
+
const result = (0, math_1.evaluate)([], adapter);
|
|
18
|
+
(0, chai_1.expect)(result).to.deep.equal({ val: "", error: false });
|
|
19
|
+
});
|
|
20
|
+
it('should log an error when evaluation fails', () => {
|
|
21
|
+
const result = (0, math_1.evaluate)(['invalid', 'expression'], adapter);
|
|
22
|
+
(0, chai_1.expect)(result).to.deep.equal({ val: '', error: true });
|
|
23
|
+
});
|
|
24
|
+
it('should get evaluate value', () => {
|
|
25
|
+
const result = (0, math_1.evaluate)("2+2", adapter);
|
|
26
|
+
(0, chai_1.expect)(result).to.deep.equal({ val: 4, error: false });
|
|
27
|
+
});
|
|
28
|
+
it('should return empty string if invalid eval string', () => {
|
|
29
|
+
const result = (0, math_1.evaluate)("2+", adapter);
|
|
30
|
+
(0, chai_1.expect)(result).to.deep.equal({ val: "", error: true });
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
//# sourceMappingURL=math.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"math.test.js","sourceRoot":"","sources":["../../../test/test/math.test.ts"],"names":[],"mappings":";;AAAA,+BAA4B;AAC5B,6CAA6C;AAC7C,+CAAwC;AAExC,MAAM,EAAE,OAAO,EAAE,GAAG,eAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AAE/C,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACtB,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACvD,MAAM,MAAM,GAAG,IAAA,eAAQ,EAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;QAClD,IAAA,aAAM,EAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACtD,MAAM,MAAM,GAAG,IAAA,eAAQ,EAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;QAC7C,IAAA,aAAM,EAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC5C,MAAM,MAAM,GAAG,IAAA,eAAQ,EAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACrC,IAAA,aAAM,EAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACzC,MAAM,MAAM,GAAE,IAAA,eAAQ,EAAC,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;QACnE,IAAA,aAAM,EAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACzB,MAAM,MAAM,GAAE,IAAA,eAAQ,EAAC,KAAK,EAAG,OAAO,CAAC,CAAA;QAC/C,IAAA,aAAM,EAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QACjD,MAAM,MAAM,GAAE,IAAA,eAAQ,EAAC,IAAI,EAAG,OAAO,CAAC,CAAA;QAC9C,IAAA,aAAM,EAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const chai_1 = require("chai");
|
|
4
|
+
const object_1 = require("../../src/lib/object");
|
|
5
|
+
describe('deleteDoubleEntriesInArray', () => {
|
|
6
|
+
it('should remove duplicate entries from an array', () => {
|
|
7
|
+
const input = ['a', 'b', 'a', 'c', 'b'];
|
|
8
|
+
const expectedOutput = ['a', 'b', 'c'];
|
|
9
|
+
(0, chai_1.expect)((0, object_1.removeDuplicates)(input)).to.deep.equal(expectedOutput);
|
|
10
|
+
});
|
|
11
|
+
it('should return the same array if there are no duplicates', () => {
|
|
12
|
+
const input = ['a', 'b', 'c'];
|
|
13
|
+
const expectedOutput = ['a', 'b', 'c'];
|
|
14
|
+
(0, chai_1.expect)((0, object_1.removeDuplicates)(input)).to.deep.equal(expectedOutput);
|
|
15
|
+
});
|
|
16
|
+
it('should return an empty array if the input is empty', () => {
|
|
17
|
+
const input = [];
|
|
18
|
+
const expectedOutput = [];
|
|
19
|
+
(0, chai_1.expect)((0, object_1.removeDuplicates)(input)).to.deep.equal(expectedOutput);
|
|
20
|
+
});
|
|
21
|
+
it('should handle arrays with one element', () => {
|
|
22
|
+
const input = ['a'];
|
|
23
|
+
const expectedOutput = ['a'];
|
|
24
|
+
(0, chai_1.expect)((0, object_1.removeDuplicates)(input)).to.deep.equal(expectedOutput);
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
describe('trimAllItems', () => {
|
|
28
|
+
it('should trim whitespace from all items in the array', () => {
|
|
29
|
+
const input = [' a ', ' b', 'c '];
|
|
30
|
+
const expectedOutput = ['a', 'b', 'c'];
|
|
31
|
+
(0, chai_1.expect)((0, object_1.trimAllItems)(input)).to.deep.equal(expectedOutput);
|
|
32
|
+
});
|
|
33
|
+
it('should return an empty array if the input is empty', () => {
|
|
34
|
+
const input = [];
|
|
35
|
+
const expectedOutput = [];
|
|
36
|
+
(0, chai_1.expect)((0, object_1.trimAllItems)(input)).to.deep.equal(expectedOutput);
|
|
37
|
+
});
|
|
38
|
+
it('should handle arrays with one element', () => {
|
|
39
|
+
const input = [' singleItem '];
|
|
40
|
+
const expectedOutput = ['singleItem'];
|
|
41
|
+
(0, chai_1.expect)((0, object_1.trimAllItems)(input)).to.deep.equal(expectedOutput);
|
|
42
|
+
});
|
|
43
|
+
it('should not modify items that do not have whitespace', () => {
|
|
44
|
+
const input = ['a', 'b', 'c'];
|
|
45
|
+
const expectedOutput = ['a', 'b', 'c'];
|
|
46
|
+
(0, chai_1.expect)((0, object_1.trimAllItems)(input)).to.deep.equal(expectedOutput);
|
|
47
|
+
});
|
|
48
|
+
it('should handle arrays with empty strings', () => {
|
|
49
|
+
const input = [' ', 'a', ' '];
|
|
50
|
+
const expectedOutput = ['', 'a', ''];
|
|
51
|
+
(0, chai_1.expect)((0, object_1.trimAllItems)(input)).to.deep.equal(expectedOutput);
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
//# sourceMappingURL=object.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object.test.js","sourceRoot":"","sources":["../../../test/test/object.test.ts"],"names":[],"mappings":"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"}
|