@iobroker/testing 2.5.4 → 2.5.5

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/CHANGELOG.md CHANGED
@@ -4,6 +4,11 @@
4
4
  PLACEHOLDER for next version:
5
5
  ## __WORK IN PROGRESS__
6
6
  -->
7
+ ## 2.5.5 (2022-03-04)
8
+ * Allow immediate exit with code `0` for schedule adapters
9
+ * Check that `npm` is not listed as a local dependency in `package.json`
10
+ * Updated dependencies
11
+
7
12
  ## 2.5.4 (2022-02-02)
8
13
  * Modifying ioBroker databases now uses the same methods that JS-Controller uses internally. This ensures that the testing is compatible with the `jsonl` database format.
9
14
  * Testing adapters with adapter dependencies that try to access the databases during installation now works.
package/build/index.js CHANGED
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -9,16 +9,7 @@ export declare function loadNpmPackage(adapterDir: string): Record<string, any>;
9
9
  * @param adapterDir The directory the adapter resides in
10
10
  */
11
11
  export declare function loadIoPackage(adapterDir: string): Record<string, any>;
12
- /**
13
- * Checks if an adapter claims that it supports compact mode
14
- * @param ioPackage The contents of io-package.json in object format
15
- */
16
- export declare function adapterShouldSupportCompactMode(ioPackage: Record<string, any>): boolean;
17
- /**
18
- * Checks if an adapter claims that it supports compact mode
19
- * @param adapterDir The directory the adapter resides in
20
- */
21
- export declare function adapterShouldSupportCompactMode(adapterDir: string): boolean;
12
+ export declare function getAdapterExecutionMode(adapterDir: string): ioBroker.AdapterCommon["mode"];
22
13
  /**
23
14
  * Locates an adapter's main file
24
15
  * @param adapterDir The directory the adapter resides in
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -22,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
22
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
23
27
  };
24
28
  Object.defineProperty(exports, "__esModule", { value: true });
25
- exports.getAdapterDependencies = exports.getAdapterFullName = exports.getAdapterName = exports.getAppName = exports.loadInstanceObjects = exports.loadAdapterCommon = exports.loadAdapterConfig = exports.locateAdapterMainFile = exports.adapterShouldSupportCompactMode = exports.loadIoPackage = exports.loadNpmPackage = void 0;
29
+ exports.getAdapterDependencies = exports.getAdapterFullName = exports.getAdapterName = exports.getAppName = exports.loadInstanceObjects = exports.loadAdapterCommon = exports.loadAdapterConfig = exports.locateAdapterMainFile = exports.getAdapterExecutionMode = exports.loadIoPackage = exports.loadNpmPackage = void 0;
26
30
  // Add debug logging for tests
27
31
  const typeguards_1 = require("alcalzone-shared/typeguards");
28
32
  const debug_1 = __importDefault(require("debug"));
@@ -45,12 +49,11 @@ function loadIoPackage(adapterDir) {
45
49
  return require(path.join(adapterDir, "io-package.json"));
46
50
  }
47
51
  exports.loadIoPackage = loadIoPackage;
48
- function adapterShouldSupportCompactMode(dirOrIoPack) {
49
- if (typeof dirOrIoPack === "string")
50
- dirOrIoPack = loadIoPackage(dirOrIoPack);
51
- return dirOrIoPack.common.compact === true;
52
+ function getAdapterExecutionMode(adapterDir) {
53
+ const ioPackage = loadIoPackage(adapterDir);
54
+ return ioPackage.common.mode;
52
55
  }
53
- exports.adapterShouldSupportCompactMode = adapterShouldSupportCompactMode;
56
+ exports.getAdapterExecutionMode = getAdapterExecutionMode;
54
57
  /**
55
58
  * Locates an adapter's main file
56
59
  * @param adapterDir The directory the adapter resides in
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -98,7 +102,13 @@ function testAdapter(adapterDir, options = {}) {
98
102
  harness.removeAllListeners();
99
103
  });
100
104
  it("The adapter starts", function () {
105
+ var _a;
101
106
  this.timeout(60000);
107
+ const allowedExitCodes = new Set((_a = options.allowedExitCodes) !== null && _a !== void 0 ? _a : []);
108
+ // Schedule adapters are allowed to "immediately" exit with code 0
109
+ if (harness.getAdapterExecutionMode() === "schedule") {
110
+ allowedExitCodes.add(0);
111
+ }
102
112
  return new Promise((resolve, reject) => {
103
113
  // Register a handler to check the alive state and exit codes
104
114
  harness
@@ -114,8 +124,7 @@ function testAdapter(adapterDir, options = {}) {
114
124
  }
115
125
  })
116
126
  .on("failed", (code) => {
117
- if (options.allowedExitCodes == undefined ||
118
- options.allowedExitCodes.indexOf(code) === -1) {
127
+ if (!allowedExitCodes.has(code)) {
119
128
  reject(new Error(`The adapter startup was interrupted unexpectedly with ${typeof code === "number"
120
129
  ? "code"
121
130
  : "signal"} ${code}`));
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -136,7 +140,6 @@ class DBConnection extends events_1.default {
136
140
  if (wasRunning)
137
141
  await this.start();
138
142
  }
139
- // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
140
143
  setSystemConfig(systemConfig) {
141
144
  const systemFilename = path.join(this.testDataDir, `${this.appName}.json`);
142
145
  (0, fs_extra_1.writeJSONSync)(systemFilename, systemConfig, { spaces: 2 });
@@ -276,9 +279,7 @@ class DBConnection extends events_1.default {
276
279
  }
277
280
  return this._statesClient.subscribeMessage(id);
278
281
  }
279
- pushMessage(instanceId,
280
- // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
281
- msg, callback) {
282
+ pushMessage(instanceId, msg, callback) {
282
283
  if (!this._statesClient) {
283
284
  throw new Error("States DB is not running");
284
285
  }
@@ -61,6 +61,7 @@ export declare class TestHarness extends EventEmitter {
61
61
  * Updates the adapter config. The changes can be a subset of the target object
62
62
  */
63
63
  changeAdapterConfig(adapterName: string, changes: Record<string, any>): Promise<void>;
64
+ getAdapterExecutionMode(): ioBroker.AdapterCommon["mode"];
64
65
  /** Enables the sendTo method */
65
66
  enableSendTo(): Promise<void>;
66
67
  private sendToID;
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -222,6 +226,9 @@ class TestHarness extends events_1.EventEmitter {
222
226
  await this.dbConnection.setObject(adapterInstanceId, obj);
223
227
  }
224
228
  }
229
+ getAdapterExecutionMode() {
230
+ return (0, adapterTools_1.getAdapterExecutionMode)(this.testAdapterDir);
231
+ }
225
232
  /** Enables the sendTo method */
226
233
  async enableSendTo() {
227
234
  await this.dbConnection.setObject(fromAdapterID, {
@@ -232,9 +239,7 @@ class TestHarness extends events_1.EventEmitter {
232
239
  this.dbConnection.subscribeMessage(fromAdapterID);
233
240
  }
234
241
  /** Sends a message to an adapter instance */
235
- sendTo(target, command,
236
- // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
237
- message, callback) {
242
+ sendTo(target, command, message, callback) {
238
243
  const stateChangedHandler = (id, state) => {
239
244
  if (id === `messagebox.${fromAdapterID}`) {
240
245
  callback(state.message);
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -111,6 +115,19 @@ function validatePackageFiles(adapterDir) {
111
115
  it(`The repository type is "git"`, () => {
112
116
  (0, chai_1.expect)(packageContent.repository.type).to.equal("git");
113
117
  });
118
+ it("npm is not listed as a dependency", () => {
119
+ for (const depType of [
120
+ "dependencies",
121
+ "devDependencies",
122
+ "optionalDependencies",
123
+ "peerDependencies",
124
+ ]) {
125
+ if ((0, typeguards_1.isObject)(packageContent[depType]) &&
126
+ "npm" in packageContent[depType]) {
127
+ throw new chai_1.AssertionError(`npm must not be listed in ${depType}, found "${packageContent[depType].npm}"!`);
128
+ }
129
+ }
130
+ });
114
131
  });
115
132
  describe(`Check contents of io-package.json`, () => {
116
133
  var _a;
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iobroker/testing",
3
- "version": "2.5.4",
3
+ "version": "2.5.5",
4
4
  "description": "Shared utilities for adapter and module testing in ioBroker",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -38,38 +38,38 @@
38
38
  },
39
39
  "homepage": "https://github.com/AlCalzone/testing#readme",
40
40
  "devDependencies": {
41
- "@alcalzone/release-script": "^3.5.0",
42
- "@alcalzone/release-script-plugin-license": "^3.5.0",
43
- "@iobroker/adapter-core": "^2.5.1",
41
+ "@alcalzone/release-script": "^3.5.4",
42
+ "@alcalzone/release-script-plugin-license": "^3.5.3",
43
+ "@iobroker/adapter-core": "^2.6.0",
44
44
  "@tsconfig/node12": "^1.0.9",
45
45
  "@types/chai": "^4.3.0",
46
- "@types/chai-as-promised": "^7.1.4",
46
+ "@types/chai-as-promised": "^7.1.5",
47
47
  "@types/debug": "4.1.7",
48
48
  "@types/fs-extra": "^9.0.13",
49
- "@types/iobroker": "^3.3.4",
50
- "@types/mocha": "^9.0.0",
51
- "@types/node": "^16.10.2",
52
- "@types/sinon": "^10.0.6",
49
+ "@types/iobroker": "^4.0.1",
50
+ "@types/mocha": "^9.1.0",
51
+ "@types/node": "^16.11.26",
52
+ "@types/sinon": "^10.0.11",
53
53
  "@types/sinon-chai": "^3.2.8",
54
- "@typescript-eslint/eslint-plugin": "^4.33.0",
55
- "@typescript-eslint/parser": "^4.33.0",
56
- "eslint": "^7.32.0",
57
- "eslint-config-prettier": "^8.3.0",
54
+ "@typescript-eslint/eslint-plugin": "^5.13.0",
55
+ "@typescript-eslint/parser": "^5.13.0",
56
+ "eslint": "^8.10.0",
57
+ "eslint-config-prettier": "^8.5.0",
58
58
  "eslint-plugin-prettier": "^4.0.0",
59
59
  "prettier": "^2.5.1",
60
60
  "rimraf": "^3.0.2",
61
61
  "source-map-support": "^0.5.21",
62
- "ts-node": "^10.2.1",
63
- "typescript": "~4.5.5"
62
+ "ts-node": "^10.6.0",
63
+ "typescript": "~4.6.2"
64
64
  },
65
65
  "dependencies": {
66
66
  "alcalzone-shared": "~4.0.1",
67
- "chai": "^4.3.4",
67
+ "chai": "^4.3.6",
68
68
  "chai-as-promised": "^7.1.1",
69
69
  "debug": "^4.3.3",
70
- "fs-extra": "^10.0.0",
71
- "mocha": "^9.1.3",
72
- "sinon": "^12.0.1",
70
+ "fs-extra": "^10.0.1",
71
+ "mocha": "^9.2.1",
72
+ "sinon": "^13.0.1",
73
73
  "sinon-chai": "^3.7.0"
74
74
  }
75
75
  }