refactor: build system

This commit is contained in:
2023-03-22 11:45:30 +01:00
parent 4df19e8c20
commit 8cb9285462
427 changed files with 3978 additions and 9810 deletions

View File

@@ -2,35 +2,29 @@
(Summarize the bug encountered concisely)
## Steps to reproduce
(How one can reproduce the issue - this is very important)
## Example Project
(If possible, please create an example project here on GitLab.com that exhibits the problematic behaviour, and link to it here in the bug report)
(If you are using an older version of GitLab, this will also determine whether the bug has been fixed in a more recent version)
## What is the current bug behavior?
(What actually happens)
## What is the expected correct behavior?
(What you should see instead)
## Relevant logs and/or screenshots
(Paste any relevant logs - please use code blocks (```) to format console output,
logs, and code as it's very hard to read otherwise.)
## Possible fixes
(If you can, link to the line of code that might be responsible for the problem)

View File

@@ -2,15 +2,12 @@
(Describe the feature that you're requesting concisely)
## Explanation
(Explain why the feature is necessary)
## Dependencies, issues to be resolved beforehand
(List issues or dependencies that need to be resolved before this feature can be implemented)
/label ~meeting

View File

@@ -22,287 +22,169 @@
# [0.45.0](https://gitlab.com/openstapps/api/compare/v0.44.0...v0.45.0) (2022-12-06)
# [0.44.0](https://gitlab.com/openstapps/api/compare/v0.43.0...v0.44.0) (2022-10-18)
# [0.43.0](https://gitlab.com/openstapps/api/compare/v0.42.0...v0.43.0) (2022-08-23)
# [0.42.0](https://gitlab.com/openstapps/api/compare/v0.41.1...v0.42.0) (2022-07-04)
## [0.41.1](https://gitlab.com/openstapps/api/compare/v0.41.0...v0.41.1) (2022-05-27)
# [0.41.0](https://gitlab.com/openstapps/api/compare/v0.40.0...v0.41.0) (2022-05-17)
# [0.40.0](https://gitlab.com/openstapps/api/compare/v0.39.0...v0.40.0) (2022-04-04)
# [0.39.0](https://gitlab.com/openstapps/api/compare/v0.38.0...v0.39.0) (2022-03-17)
# [0.38.0](https://gitlab.com/openstapps/api/compare/v0.37.0...v0.38.0) (2022-01-25)
### Features
* add client method for invoking plugin routes ([83120a6](https://gitlab.com/openstapps/api/commit/83120a67345d2fee672f6a44ab91708ecce65e58))
- add client method for invoking plugin routes ([83120a6](https://gitlab.com/openstapps/api/commit/83120a67345d2fee672f6a44ab91708ecce65e58))
# [0.37.0](https://gitlab.com/openstapps/api/compare/v0.36.0...v0.37.0) (2021-12-17)
# [0.36.0](https://gitlab.com/openstapps/api/compare/v0.35.0...v0.36.0) (2021-12-15)
# [0.35.0](https://gitlab.com/openstapps/api/compare/v0.34.0...v0.35.0) (2021-10-20)
# [0.34.0](https://gitlab.com/openstapps/api/compare/v0.33.0...v0.34.0) (2021-10-04)
# [0.33.0](https://gitlab.com/openstapps/api/compare/v0.32.0...v0.33.0) (2021-09-16)
# [0.32.0](https://gitlab.com/openstapps/api/compare/v0.31.1...v0.32.0) (2021-09-01)
## [0.31.1](https://gitlab.com/openstapps/api/compare/v0.31.0...v0.31.1) (2021-08-27)
### Bug Fixes
* plugin related tests ([51c157d](https://gitlab.com/openstapps/api/commit/51c157d577b9ae70e8c4683e653cd65aacb4f248))
- plugin related tests ([51c157d](https://gitlab.com/openstapps/api/commit/51c157d577b9ae70e8c4683e653cd65aacb4f248))
# [0.31.0](https://gitlab.com/openstapps/api/compare/v0.30.0...v0.31.0) (2021-08-17)
# [0.30.0](https://gitlab.com/openstapps/api/compare/v0.29.0...v0.30.0) (2021-08-04)
# [0.29.0](https://gitlab.com/openstapps/api/compare/v0.28.0...v0.29.0) (2021-06-08)
# [0.28.0](https://gitlab.com/openstapps/api/compare/v0.27.0...v0.28.0) (2021-04-27)
# [0.27.0](https://gitlab.com/openstapps/api/compare/v0.26.0...v0.27.0) (2021-03-08)
### Bug Fixes
* send valid JSON on bulk/done ([29cd22f](https://gitlab.com/openstapps/api/commit/29cd22f2d11cebbe2de63cc2e614734e286821f2)), closes [#38](https://gitlab.com/openstapps/api/issues/38)
- send valid JSON on bulk/done ([29cd22f](https://gitlab.com/openstapps/api/commit/29cd22f2d11cebbe2de63cc2e614734e286821f2)), closes [#38](https://gitlab.com/openstapps/api/issues/38)
# [0.26.0](https://gitlab.com/openstapps/api/compare/v0.25.0...v0.26.0) (2021-02-23)
# [0.25.0](https://gitlab.com/openstapps/api/compare/v0.23.0...v0.25.0) (2020-11-09)
# [0.23.0](https://gitlab.com/openstapps/api/compare/v0.22.0...v0.23.0) (2020-10-23)
### Bug Fixes
* make express parse body ([b3e1075](https://gitlab.com/openstapps/api/commit/b3e107528b5d6ac5ec86786a9f9bf8fb1645e874))
- make express parse body ([b3e1075](https://gitlab.com/openstapps/api/commit/b3e107528b5d6ac5ec86786a9f9bf8fb1645e874))
# [0.22.0](https://gitlab.com/openstapps/api/compare/v0.21.0...v0.22.0) (2020-05-15)
### Features
* add content-type header ([d30de89](https://gitlab.com/openstapps/api/commit/d30de896f0d1a21c039e1905c0766cc37df06b23))
- add content-type header ([d30de89](https://gitlab.com/openstapps/api/commit/d30de896f0d1a21c039e1905c0766cc37df06b23))
# [0.21.0](https://gitlab.com/openstapps/api/compare/v0.19.0...v0.21.0) (2020-05-06)
# [0.19.0](https://gitlab.com/openstapps/api/compare/v0.18.0...v0.19.0) (2020-03-11)
### Bug Fixes
* repair and unify subcommand help outputs ([4ae968f](https://gitlab.com/openstapps/api/commit/4ae968ff0f52c940cb11a97876f72d57feb61597))
- repair and unify subcommand help outputs ([4ae968f](https://gitlab.com/openstapps/api/commit/4ae968ff0f52c940cb11a97876f72d57feb61597))
### Features
* add option to wait on resource to e2e script ([e18858f](https://gitlab.com/openstapps/api/commit/e18858fc58ccfb8b3bdec92260eba12cd1a25214))
- add option to wait on resource to e2e script ([e18858f](https://gitlab.com/openstapps/api/commit/e18858fc58ccfb8b3bdec92260eba12cd1a25214))
# [0.18.0](https://gitlab.com/openstapps/api/compare/v0.17.0...v0.18.0) (2020-02-04)
### Features
* extend e2e procedure ([dc79dc8](https://gitlab.com/openstapps/api/commit/dc79dc8feb10a29cff0f6d1c320658ad13cf7e4e))
- extend e2e procedure ([dc79dc8](https://gitlab.com/openstapps/api/commit/dc79dc8feb10a29cff0f6d1c320658ad13cf7e4e))
# [0.17.0](https://gitlab.com/openstapps/api/compare/v0.16.0...v0.17.0) (2019-11-15)
# [0.16.0](https://gitlab.com/openstapps/api/compare/v0.15.0...v0.16.0) (2019-09-03)
### Features
* add plugin class ([c2848fc](https://gitlab.com/openstapps/api/commit/c2848fc7a528288ef4c3ab96728d4e16add6fe75)), closes [#12](https://gitlab.com/openstapps/api/issues/12)
- add plugin class ([c2848fc](https://gitlab.com/openstapps/api/commit/c2848fc7a528288ef4c3ab96728d4e16add6fe75)), closes [#12](https://gitlab.com/openstapps/api/issues/12)
# [0.15.0](https://gitlab.com/openstapps/api/compare/v0.14.0...v0.15.0) (2019-08-19)
# [0.14.0](https://gitlab.com/openstapps/api/compare/v0.13.0...v0.14.0) (2019-07-23)
# [0.13.0](https://gitlab.com/openstapps/api/compare/v0.12.0...v0.13.0) (2019-07-16)
### Bug Fixes
* change removeReferences() to also remove origin ([ded221c](https://gitlab.com/openstapps/api/commit/ded221c175368d315fdbb79d561c86c3ee8bf158))
- change removeReferences() to also remove origin ([ded221c](https://gitlab.com/openstapps/api/commit/ded221c175368d315fdbb79d561c86c3ee8bf158))
# [0.12.0](https://gitlab.com/openstapps/api/compare/v0.11.0...v0.12.0) (2019-07-15)
### Features
* add function to remove undefined properties ([f95fd09](https://gitlab.com/openstapps/api/commit/f95fd09112e81eab42591a5aaff3568ab06e9441))
- add function to remove undefined properties ([f95fd09](https://gitlab.com/openstapps/api/commit/f95fd09112e81eab42591a5aaff3568ab06e9441))
# [0.11.0](https://gitlab.com/openstapps/api/compare/v0.10.0...v0.11.0) (2019-07-12)
# [0.10.0](https://gitlab.com/openstapps/api/compare/v0.9.0...v0.10.0) (2019-07-03)
# [0.9.0](https://gitlab.com/openstapps/api/compare/v0.8.0...v0.9.0) (2019-06-20)
# [0.8.0](https://gitlab.com/openstapps/api/compare/v0.7.0...v0.8.0) (2019-05-14)
### Features
* add e2e command. Indexes core test files. ([e1313b5](https://gitlab.com/openstapps/api/commit/e1313b55ff3bc17e96b09639f4949b2179991679))
- add e2e command. Indexes core test files. ([e1313b5](https://gitlab.com/openstapps/api/commit/e1313b55ff3bc17e96b09639f4949b2179991679))
# [0.7.0](https://gitlab.com/openstapps/api/compare/v0.6.0...v0.7.0) (2019-04-16)
# [0.6.0](https://gitlab.com/openstapps/api/compare/v0.5.0...v0.6.0) (2019-04-09)
# [0.5.0](https://gitlab.com/openstapps/api/compare/v0.4.1...v0.5.0) (2019-04-04)
### Features
* add method to remove references from a thing ([9cf6fde](https://gitlab.com/openstapps/api/commit/9cf6fde050c665b63026b8c08502c7836e23c2d5)), closes [#6](https://gitlab.com/openstapps/api/issues/6)
- add method to remove references from a thing ([9cf6fde](https://gitlab.com/openstapps/api/commit/9cf6fde050c665b63026b8c08502c7836e23c2d5)), closes [#6](https://gitlab.com/openstapps/api/issues/6)
## [0.4.1](https://gitlab.com/openstapps/api/compare/v0.4.0...v0.4.1) (2019-03-15)
### Bug Fixes
* adjust compile npm script to exact configuration guideline ([7f8c9ed](https://gitlab.com/openstapps/api/commit/7f8c9eda2fdcef0831af23806b846baa0d236a1c))
- adjust compile npm script to exact configuration guideline ([7f8c9ed](https://gitlab.com/openstapps/api/commit/7f8c9eda2fdcef0831af23806b846baa0d236a1c))
# [0.4.0](https://gitlab.com/openstapps/api/compare/v0.3.0...v0.4.0) (2019-03-15)
### Bug Fixes
* apply changes suggested by @openstapps/configuration ([782fdbe](https://gitlab.com/openstapps/api/commit/782fdbebba3599323a98244fcc28e7605ed95cc2))
- apply changes suggested by @openstapps/configuration ([782fdbe](https://gitlab.com/openstapps/api/commit/782fdbebba3599323a98244fcc28e7605ed95cc2))
# [0.3.0](https://gitlab.com/openstapps/api/compare/v0.2.0...v0.3.0) (2019-02-21)
# [0.2.0](https://gitlab.com/openstapps/api/compare/v0.1.1...v0.2.0) (2019-02-18)
## [0.1.1](https://gitlab.com/openstapps/api/compare/v0.1.0...v0.1.1) (2019-02-07)
# [0.1.0](https://gitlab.com/openstapps/api/compare/v0.0.3...v0.1.0) (2019-01-28)
## [0.0.3](https://gitlab.com/openstapps/api/compare/v0.0.2...v0.0.3) (2019-01-21)
## [0.0.2](https://gitlab.com/openstapps/api/compare/v0.0.1...v0.0.2) (2018-12-14)
### Bug Fixes
* add type and batchSize to required parameters ([8541b00](https://gitlab.com/openstapps/api/commit/8541b00dbbf4c683fddaf3d003cf13fabfbc979b)), closes [#1](https://gitlab.com/openstapps/api/issues/1)
* remove trailing slash from url if needed ([eb7c334](https://gitlab.com/openstapps/api/commit/eb7c334bb8878cffd96cd9d52b5b99e2338e3a65))
- add type and batchSize to required parameters ([8541b00](https://gitlab.com/openstapps/api/commit/8541b00dbbf4c683fddaf3d003cf13fabfbc979b)), closes [#1](https://gitlab.com/openstapps/api/issues/1)
- remove trailing slash from url if needed ([eb7c334](https://gitlab.com/openstapps/api/commit/eb7c334bb8878cffd96cd9d52b5b99e2338e3a65))
## [0.0.1](https://gitlab.com/openstapps/api/compare/4839f941c617681c78ef9959f3df86013459c332...v0.0.1) (2018-11-29)
### Features
* add api ([4839f94](https://gitlab.com/openstapps/api/commit/4839f941c617681c78ef9959f3df86013459c332))
- add api ([4839f94](https://gitlab.com/openstapps/api/commit/4839f941c617681c78ef9959f3df86013459c332))

View File

@@ -1,2 +1,2 @@
#!/usr/bin/env node
import './lib/cli.js'
import './lib/app.js';

View File

@@ -15,21 +15,18 @@
"Roman Klopsch",
"Thea Schöbl <dev@theaninova.de>"
],
"main": "lib/client.js",
"main": "lib/index.js",
"types": "lib/index.d.ts",
"bin": {
"openstapps-api": "app.js"
},
"scripts": {
"build": "rimraf lib && tsc",
"changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0 && git add CHANGELOG.md && git commit -m 'docs: update changelog'",
"check-configuration": "openstapps-configuration",
"documentation": "typedoc --includeVersion --out docs --readme README.md --listInvalidSymbolLinks --entryPointStrategy expand src",
"build": "tsup --dts",
"format": "prettier .",
"format:fix": "prettier --write .",
"lint": "eslint --ext .ts src/",
"postversion": "npm run changelog",
"prepublishOnly": "npm ci && npm run build",
"preversion": "npm run prepublishOnly",
"push": "git push && git push origin \"v$npm_package_version\"",
"test": "nyc mocha --recursive 'test/*.spec.ts'"
"lint:fix": "eslint --fix --ext .ts src/",
"test": "nyc mocha 'test/**/*.spec.ts'"
},
"dependencies": {
"@krlwlfrt/async-pool": "0.7.0",
@@ -57,8 +54,10 @@
"wait-on": "6.0.1"
},
"devDependencies": {
"@openstapps/configuration": "workspace:*",
"@openstapps/eslint-config": "workspace:*",
"@openstapps/nyc-config": "workspace:*",
"@openstapps/prettier-config": "workspace:*",
"@openstapps/tsconfig": "workspace:*",
"@testdeck/mocha": "0.3.3",
"@types/body-parser": "1.19.2",
"@types/chai": "4.3.5",
@@ -69,55 +68,39 @@
"@types/fs-extra": "9.0.13",
"@types/json-schema": "7.0.11",
"@types/mocha": "10.0.1",
"@typescript-eslint/eslint-plugin": "5.40.1",
"@typescript-eslint/parser": "5.40.1",
"chai": "4.3.7",
"chai-as-promised": "7.1.1",
"chai-spies": "1.0.0",
"conventional-changelog-cli": "2.2.2",
"eslint": "8.33.0",
"eslint-config-prettier": "8.6.0",
"eslint-plugin-jsdoc": "39.7.4",
"eslint-plugin-prettier": "4.2.1",
"eslint-plugin-unicorn": "45.0.2",
"fs-extra": "10.1.0",
"mocha": "10.2.0",
"nock": "13.3.1",
"nyc": "15.1.0",
"prettier": "2.8.8",
"rimraf": "4.4.0",
"ts-node": "10.9.1",
"typedoc": "0.23.26",
"tsup": "6.7.0",
"typedoc": "0.23.28",
"typescript": "4.8.4"
},
"peerDependencies": {
"@openstapps/core": "~2.1.0"
"@openstapps/core": "workspace:*"
},
"tsup": {
"entry": [
"src/app.ts",
"src/index.ts"
],
"sourcemap": true,
"clean": true,
"format": "esm",
"outDir": "lib"
},
"prettier": "@openstapps/prettier-config",
"eslintConfig": {
"extends": [
"@openstapps"
]
},
"nyc": {
"all": true,
"branches": 95,
"check-coverage": true,
"exclude": [
"src/cli.ts"
],
"extension": [
".ts"
],
"functions": 95,
"include": [
"src"
],
"lines": 95,
"per-file": true,
"reporter": [
"cobertura",
"html",
"text-summary"
],
"require": [
"ts-node/register"
],
"statements": 95
},
"typings": "lib/index.d.ts"
"extends": "@openstapps/nyc-config"
}
}

10
packages/api/src/index.ts Normal file
View File

@@ -0,0 +1,10 @@
export * from './bulk.js'
export * from './client.js'
export * from './connector-client.js'
export * from './copy.js'
export * from './e2e.js'
export * from './errors.js'
export * from './http-client.js'
export * from './http-client-interface.js'
export * from './plugin.js'
export * from './plugin-client.js'

View File

@@ -12,7 +12,7 @@
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {Converter} from '@openstapps/core-tools/lib/schema.js';
import {Converter} from '@openstapps/core-tools';
import {Logger} from '@openstapps/logger';
import bodyParser from 'body-parser';
import express from 'express';

View File

@@ -12,7 +12,14 @@
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {SCBulkAddRoute, SCBulkDoneRoute, SCDish, SCMessage, SCThingOriginType, SCThingType} from '@openstapps/core';
import {
SCBulkAddRoute,
SCBulkDoneRoute,
SCDish,
SCMessage,
SCThingOriginType,
SCThingType,
} from '@openstapps/core';
import {expect} from 'chai';
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
@@ -55,9 +62,7 @@ export class BulkSpec {
});
const dish: SCDish = {
categories: [
'main dish',
],
categories: ['main dish'],
name: 'foobar',
origin: {
indexed: moment().format(),
@@ -70,9 +75,13 @@ export class BulkSpec {
await bulk.add(dish);
expect(client.invokeRoute).to.have.been.first.called.with(bulkAddRoute, {
UID: 'bar',
}, dish);
expect(client.invokeRoute).to.have.been.first.called.with(
bulkAddRoute,
{
UID: 'bar',
},
dish,
);
}
@test
@@ -86,12 +95,8 @@ export class BulkSpec {
});
const message: SCMessage = {
audiences: [
'students',
],
categories: [
'news'
],
audiences: ['students'],
categories: ['news'],
messageBody: 'Lorem ipsum.',
name: 'foobar',
origin: {

View File

@@ -52,10 +52,11 @@ const httpClient = new HttpClient();
* @see https://stackoverflow.com/a/51365037
*/
export type RecursivePartial<T> = {
[P in keyof T]?:
T[P] extends Array<(infer U)> ? Array<RecursivePartial<U>> :
T[P] extends object ? RecursivePartial<T[P]> :
T[P];
[P in keyof T]?: T[P] extends Array<infer U>
? Array<RecursivePartial<U>>
: T[P] extends object
? RecursivePartial<T[P]>
: T[P];
};
async function invokeIndexRoute(): Promise<RecursivePartial<HttpClientResponse<SCIndexResponse>>> {
@@ -119,12 +120,8 @@ export class ClientSpec {
@test
async getThing() {
const message: SCMessage = {
audiences: [
'employees',
],
categories: [
'news'
],
audiences: ['employees'],
categories: ['news'],
messageBody: 'Lorem ipsum.',
name: 'foo',
origin: {
@@ -172,7 +169,7 @@ export class ClientSpec {
size: 1,
},
headers: {
"Content-Type": "application/json",
'Content-Type': 'application/json',
},
method: searchRoute.method,
url: new URL('http://localhost' + searchRoute.getUrlPath()),
@@ -210,12 +207,8 @@ export class ClientSpec {
@test
async getThingFailsByUid() {
const message: SCMessage = {
audiences: [
'employees',
],
categories: [
'news'
],
audiences: ['employees'],
categories: ['news'],
messageBody: 'Lorem ipsum.',
name: 'foo',
origin: {
@@ -265,7 +258,7 @@ export class ClientSpec {
expect(httpClient.request).to.have.been.first.called.with({
body: {},
headers: {
"Content-Type": "application/json",
'Content-Type': 'application/json',
},
method: indexRoute.method,
url: new URL('http://localhost' + indexRoute.getUrlPath()),
@@ -285,66 +278,78 @@ export class ClientSpec {
@test
async invokePlugin() {
sandbox.on(httpClient, 'request', async(): Promise<RecursivePartial<HttpClientResponse<SCIndexResponse>>> => {
return {
body: {
app: {
features: {
plugins: {
"supportedPlugin": { urlPath: "/" }
},
},
},
},
statusCode: indexRoute.statusCodeSuccess,
};
});
expect(httpClient.request).not.to.have.been.first.called();
const client = new Client(httpClient, 'http://localhost');
await client.invokePlugin('unsupportedPlugin').should.be.rejectedWith(ApiError,/.*supportedPlugin.*/gmi);
// again with cached feature definitions
return client.invokePlugin('supportedPlugin')
.should.not.be.rejectedWith(ApiError,/.*supportedPlugin.*/gmi);
}
@test
async invokePluginUnavailable() {
sandbox.on(httpClient, 'request', async(): Promise<RecursivePartial<HttpClientResponse<SCIndexResponse>>> => {
return {
body: {},
statusCode: indexRoute.statusCodeSuccess,
};
});
expect(httpClient.request).not.to.have.been.first.called();
const client = new Client(httpClient, 'http://localhost');
await client.invokePlugin('supportedPlugin').should.be.rejectedWith(ApiError,/.*supportedPlugin.*/gmi);
sandbox.restore();
sandbox.on(httpClient, 'request', async(): Promise<RecursivePartial<HttpClientResponse<SCIndexResponse>>> => {
return {
body: {
app: {
features: {
plugins: {
'unsupportedPlugin': {
urlPath: '/unsupported-plugin'
sandbox.on(
httpClient,
'request',
async (): Promise<RecursivePartial<HttpClientResponse<SCIndexResponse>>> => {
return {
body: {
app: {
features: {
plugins: {
supportedPlugin: {urlPath: '/'},
},
},
},
},
},
statusCode: indexRoute.statusCodeSuccess,
};
});
statusCode: indexRoute.statusCodeSuccess,
};
},
);
expect(httpClient.request).not.to.have.been.first.called();
const client = new Client(httpClient, 'http://localhost');
await client.invokePlugin('unsupportedPlugin').should.be.rejectedWith(ApiError, /.*supportedPlugin.*/gim);
// again with cached feature definitions
return client.invokePlugin('supportedPlugin')
.should.be.rejectedWith(ApiError,/.*supportedPlugin.*/gmi);
return client
.invokePlugin('supportedPlugin')
.should.not.be.rejectedWith(ApiError, /.*supportedPlugin.*/gim);
}
@test
async invokePluginUnavailable() {
sandbox.on(
httpClient,
'request',
async (): Promise<RecursivePartial<HttpClientResponse<SCIndexResponse>>> => {
return {
body: {},
statusCode: indexRoute.statusCodeSuccess,
};
},
);
expect(httpClient.request).not.to.have.been.first.called();
const client = new Client(httpClient, 'http://localhost');
await client.invokePlugin('supportedPlugin').should.be.rejectedWith(ApiError, /.*supportedPlugin.*/gim);
sandbox.restore();
sandbox.on(
httpClient,
'request',
async (): Promise<RecursivePartial<HttpClientResponse<SCIndexResponse>>> => {
return {
body: {
app: {
features: {
plugins: {
unsupportedPlugin: {
urlPath: '/unsupported-plugin',
},
},
},
},
},
statusCode: indexRoute.statusCodeSuccess,
};
},
);
// again with cached feature definitions
return client.invokePlugin('supportedPlugin').should.be.rejectedWith(ApiError, /.*supportedPlugin.*/gim);
}
@test
@@ -359,7 +364,7 @@ export class ClientSpec {
expect(httpClient.request).to.have.been.first.called.with({
body: undefined,
headers: {
"Content-Type": "application/json",
'Content-Type': 'application/json',
},
method: indexRoute.method,
url: new URL('http://localhost' + indexRoute.getUrlPath()),
@@ -420,7 +425,7 @@ export class ClientSpec {
expect(httpClient.request).to.have.been.first.called.with({
body: {a: {size: 1}, b: {size: 1}},
headers: {
"Content-Type": "application/json",
'Content-Type': 'application/json',
},
method: multiSearchRoute.method,
url: new URL('http://localhost' + multiSearchRoute.getUrlPath()),
@@ -470,7 +475,7 @@ export class ClientSpec {
expect(httpClient.request).to.have.been.first.called.with({
body: {foo: {size: 0}, bar: {size: 0}},
headers: {
"Content-Type": "application/json",
'Content-Type': 'application/json',
},
method: multiSearchRoute.method,
url: new URL('http://localhost' + multiSearchRoute.getUrlPath()),
@@ -478,7 +483,7 @@ export class ClientSpec {
expect(httpClient.request).to.have.been.second.called.with({
body: {foo: {size: 1000}, bar: {size: 500}, foobar: {size: 30}},
headers: {
"Content-Type": "application/json",
'Content-Type': 'application/json',
},
method: multiSearchRoute.method,
url: new URL('http://localhost' + multiSearchRoute.getUrlPath()),
@@ -541,7 +546,7 @@ export class ClientSpec {
expect(httpClient.request).to.have.been.first.called.with({
body: {size: 1},
headers: {
"Content-Type": "application/json",
'Content-Type': 'application/json',
},
method: searchRoute.method,
url: new URL('http://localhost' + searchRoute.getUrlPath()),
@@ -579,7 +584,7 @@ export class ClientSpec {
expect(httpClient.request).to.have.been.first.called.with({
body: {from: 30, size: 30},
headers: {
"Content-Type": "application/json",
'Content-Type': 'application/json',
},
method: searchRoute.method,
url: new URL('http://localhost' + searchRoute.getUrlPath()),
@@ -615,7 +620,7 @@ export class ClientSpec {
expect(httpClient.request).to.have.been.first.called.with({
body: {size: 0},
headers: {
"Content-Type": "application/json",
'Content-Type': 'application/json',
},
method: searchRoute.method,
url: new URL('http://localhost' + searchRoute.getUrlPath()),
@@ -623,7 +628,7 @@ export class ClientSpec {
expect(httpClient.request).to.have.been.second.called.with({
body: {size: 1000},
headers: {
"Content-Type": "application/json",
'Content-Type': 'application/json',
},
method: searchRoute.method,
url: new URL('http://localhost' + searchRoute.getUrlPath()),

View File

@@ -72,7 +72,7 @@ function doesContainThings<T extends SCThingWithoutReferences>(thing: T): boolea
return false;
}
return sum || (item === null) ? false : isThing(item);
return sum || item === null ? false : isThing(item);
}, false);
}
@@ -110,7 +110,7 @@ export class ConnectorClientSpec {
type: SCThingType.Message,
},
headers: {
"Content-Type": "application/json",
'Content-Type': 'application/json',
},
method: bulkRoute.method,
url: new URL('http://localhost' + bulkRoute.getUrlPath()),
@@ -145,7 +145,7 @@ export class ConnectorClientSpec {
type: SCThingType.Message,
},
headers: {
"Content-Type": "application/json",
'Content-Type': 'application/json',
},
method: bulkRoute.method,
url: new URL('http://localhost' + bulkRoute.getUrlPath()),
@@ -156,12 +156,8 @@ export class ConnectorClientSpec {
async index() {
const messages: SCMessage[] = [
{
audiences: [
'employees',
],
categories: [
'news'
],
audiences: ['employees'],
categories: ['news'],
messageBody: 'Lorem ipsum.',
name: 'foo',
origin: {
@@ -173,12 +169,8 @@ export class ConnectorClientSpec {
uid: 'foo',
},
{
audiences: [
'employees',
],
categories: [
'news'
],
audiences: ['employees'],
categories: ['news'],
messageBody: 'Lorem ipsum.',
name: 'foo',
origin: {
@@ -193,36 +185,45 @@ export class ConnectorClientSpec {
type responses = SCBulkResponse | SCBulkAddResponse | SCBulkDoneResponse;
sandbox.on(httpClient, 'request', async (request: HttpClientRequest)
: Promise<HttpClientResponse<responses>> => {
if (request.url.toString() === new URL('http://localhost' + bulkRoute.getUrlPath()).toString()) {
return {
body: {
expiration: moment().add(3600, 'seconds').format(),
source: 'copy',
state: 'in progress',
type: SCThingType.Message,
uid: 'foo',
},
headers: {},
statusCode: bulkRoute.statusCodeSuccess,
};
} else if (request.url.toString() === new URL('http://localhost' + bulkAddRoute.getUrlPath({
UID: 'foo',
})).toString()) {
sandbox.on(
httpClient,
'request',
async (request: HttpClientRequest): Promise<HttpClientResponse<responses>> => {
if (request.url.toString() === new URL('http://localhost' + bulkRoute.getUrlPath()).toString()) {
return {
body: {
expiration: moment().add(3600, 'seconds').format(),
source: 'copy',
state: 'in progress',
type: SCThingType.Message,
uid: 'foo',
},
headers: {},
statusCode: bulkRoute.statusCodeSuccess,
};
} else if (
request.url.toString() ===
new URL(
'http://localhost' +
bulkAddRoute.getUrlPath({
UID: 'foo',
}),
).toString()
) {
return {
body: {},
headers: {},
statusCode: bulkAddRoute.statusCodeSuccess,
};
}
return {
body: {},
headers: {},
statusCode: bulkAddRoute.statusCodeSuccess,
statusCode: bulkDoneRoute.statusCodeSuccess,
};
}
return {
body: {},
headers: {},
statusCode: bulkDoneRoute.statusCodeSuccess,
};
});
},
);
const connectorClient = new ConnectorClient(httpClient, 'http://localhost');
await connectorClient.index(messages, 'copy');
@@ -234,7 +235,7 @@ export class ConnectorClientSpec {
type: SCThingType.Message,
},
headers: {
"Content-Type": "application/json",
'Content-Type': 'application/json',
},
method: bulkRoute.method,
url: new URL('http://localhost' + bulkRoute.getUrlPath()),
@@ -251,12 +252,8 @@ export class ConnectorClientSpec {
async indexWithoutSource() {
const messages: SCMessage[] = [
{
audiences: [
'employees',
],
categories: [
'news'
],
audiences: ['employees'],
categories: ['news'],
messageBody: 'Lorem ipsum.',
name: 'foo',
origin: {
@@ -268,12 +265,8 @@ export class ConnectorClientSpec {
uid: 'foo',
},
{
audiences: [
'employees',
],
categories: [
'news'
],
audiences: ['employees'],
categories: ['news'],
messageBody: 'Lorem ipsum.',
name: 'foo',
origin: {
@@ -288,36 +281,45 @@ export class ConnectorClientSpec {
type responses = SCBulkResponse | SCBulkAddResponse | SCBulkDoneResponse;
sandbox.on(httpClient, 'request', async (request: HttpClientRequest)
: Promise<HttpClientResponse<responses>> => {
if (request.url.toString() === new URL('http://localhost' + bulkRoute.getUrlPath()).toString()) {
return {
body: {
expiration: moment().add(3600, 'seconds').format(),
source: 'stapps-api',
state: 'in progress',
type: SCThingType.Message,
uid: 'foo',
},
headers: {},
statusCode: bulkRoute.statusCodeSuccess,
};
} else if (request.url.toString() === new URL('http://localhost' + bulkAddRoute.getUrlPath({
UID: 'foo',
})).toString()) {
sandbox.on(
httpClient,
'request',
async (request: HttpClientRequest): Promise<HttpClientResponse<responses>> => {
if (request.url.toString() === new URL('http://localhost' + bulkRoute.getUrlPath()).toString()) {
return {
body: {
expiration: moment().add(3600, 'seconds').format(),
source: 'stapps-api',
state: 'in progress',
type: SCThingType.Message,
uid: 'foo',
},
headers: {},
statusCode: bulkRoute.statusCodeSuccess,
};
} else if (
request.url.toString() ===
new URL(
'http://localhost' +
bulkAddRoute.getUrlPath({
UID: 'foo',
}),
).toString()
) {
return {
body: {},
headers: {},
statusCode: bulkAddRoute.statusCodeSuccess,
};
}
return {
body: {},
headers: {},
statusCode: bulkAddRoute.statusCodeSuccess,
statusCode: bulkDoneRoute.statusCodeSuccess,
};
}
return {
body: {},
headers: {},
statusCode: bulkDoneRoute.statusCodeSuccess,
};
});
},
);
const connectorClient = new ConnectorClient(httpClient, 'http://localhost');
await connectorClient.index(messages);
@@ -329,7 +331,7 @@ export class ConnectorClientSpec {
type: SCThingType.Message,
},
headers: {
"Content-Type": "application/json",
'Content-Type': 'application/json',
},
method: bulkRoute.method,
url: new URL('http://localhost' + bulkRoute.getUrlPath()),
@@ -362,12 +364,12 @@ export class ConnectorClientSpec {
'core',
'test',
'resources',
'indexable'
'indexable',
);
const testFiles = await readdirPromisified(pathToTestFiles);
const testInstances = await asyncPool(5, testFiles, async (testFile) => {
const testInstances = await asyncPool(5, testFiles, async testFile => {
const buffer = await readFilePromisified(join(pathToTestFiles, testFile));
const content = JSON.parse(buffer.toString());
@@ -375,58 +377,53 @@ export class ConnectorClientSpec {
});
for (const testInstance of testInstances) {
const checkInstance = clone()(testInstance);
const testInstanceWithoutReferences = ConnectorClient.removeReferences(testInstance);
expect(doesContainThings(testInstanceWithoutReferences)).to.be
.equal(false, JSON.stringify(
[testInstance, testInstanceWithoutReferences],
null,
2,
));
expect((testInstanceWithoutReferences as any).origin).to.be
.equal(undefined, JSON.stringify(
[testInstance, testInstanceWithoutReferences],
null,
2,
));
expect(testInstance).to.be.deep
.equal(checkInstance,
'Removing the references of a thing could have side effects because no deep copy is used');
expect(doesContainThings(testInstanceWithoutReferences)).to.be.equal(
false,
JSON.stringify([testInstance, testInstanceWithoutReferences], null, 2),
);
expect((testInstanceWithoutReferences as any).origin).to.be.equal(
undefined,
JSON.stringify([testInstance, testInstanceWithoutReferences], null, 2),
);
expect(testInstance).to.be.deep.equal(
checkInstance,
'Removing the references of a thing could have side effects because no deep copy is used',
);
}
}
@test
async removeUndefinedProperties() {
const objectWithUndefinedProperties = {value: 'foo',
novalue: undefined,
nested: {
value: 'foo',
novalue: undefined},
};
const objectWithoutUndefinedProperties = {value: 'foo',
nested: {
value: 'foo'},
};
const objectWithUndefinedProperties = {
value: 'foo',
novalue: undefined,
nested: {
value: 'foo',
novalue: undefined,
},
};
const objectWithoutUndefinedProperties = {
value: 'foo',
nested: {
value: 'foo',
},
};
ConnectorClient.removeUndefinedProperties(objectWithUndefinedProperties);
expect(objectWithUndefinedProperties).to.deep.equal(objectWithoutUndefinedProperties, JSON.stringify(
[objectWithUndefinedProperties, objectWithoutUndefinedProperties],
null,
2,
));
expect(objectWithUndefinedProperties).to.deep.equal(
objectWithoutUndefinedProperties,
JSON.stringify([objectWithUndefinedProperties, objectWithoutUndefinedProperties], null, 2),
);
}
@test
async update() {
const message: SCMessage = {
audiences: [
'employees',
],
categories: [
'news'
],
audiences: ['employees'],
categories: ['news'],
messageBody: 'Lorem ipsum.',
name: 'foo',
origin: {
@@ -454,13 +451,16 @@ export class ConnectorClientSpec {
expect(httpClient.request).to.have.been.called.with({
body: message,
headers: {
"Content-Type": "application/json",
'Content-Type': 'application/json',
},
method: thingUpdateRoute.method,
url: new URL('http://localhost' + thingUpdateRoute.getUrlPath({
TYPE: SCThingType.Message,
UID: 'foo',
})),
url: new URL(
'http://localhost' +
thingUpdateRoute.getUrlPath({
TYPE: SCThingType.Message,
UID: 'foo',
}),
),
});
}
}

View File

@@ -57,63 +57,73 @@ export class CopySpec {
async copy() {
type responses = Response<SCBulkAddResponse | SCBulkDoneResponse | SCBulkResponse | SCSearchResponse>;
sandbox.on(httpClient, 'request', async (request: RequestOptions): Promise<RecursivePartial<responses>> => {
if (request.url.toString() === 'http://foo.bar' + searchRoute.getUrlPath().toString()) {
const body = request.body as SCSearchRequest;
sandbox.on(
httpClient,
'request',
async (request: RequestOptions): Promise<RecursivePartial<responses>> => {
if (request.url.toString() === 'http://foo.bar' + searchRoute.getUrlPath().toString()) {
const body = request.body as SCSearchRequest;
let count = 0;
if (typeof body.size === 'number' && body.size > 0) {
count = 1;
let count = 0;
if (typeof body.size === 'number' && body.size > 0) {
count = 1;
}
return {
body: {
data: [
{
categories: ['main dish'],
name: 'foobar',
origin: {
indexed: moment().format(),
name: 'bar',
},
type: SCThingType.Dish,
uid: 'foo',
},
],
facets: [],
pagination: {
count: count,
offset: 0,
total: 1,
},
stats: {
time: 1,
},
},
statusCode: searchRoute.statusCodeSuccess,
};
} else if (request.url.toString() === 'http://localhost' + bulkRoute.getUrlPath().toString()) {
return {
body: {
state: 'in progress',
uid: 'foo',
},
statusCode: bulkRoute.statusCodeSuccess,
};
} else if (
request.url.toString() ===
'http://localhost' +
bulkAddRoute
.getUrlPath({
UID: 'foo',
})
.toString()
) {
return {
body: {},
statusCode: bulkAddRoute.statusCodeSuccess,
};
}
return {
body: {
data: [{
categories: [
'main dish',
],
name: 'foobar',
origin: {
indexed: moment().format(),
name: 'bar',
},
type: SCThingType.Dish,
uid: 'foo',
}],
facets: [],
pagination: {
count: count,
offset: 0,
total: 1,
},
stats: {
time: 1,
},
},
statusCode: searchRoute.statusCodeSuccess,
};
} else if (request.url.toString() === 'http://localhost' + bulkRoute.getUrlPath().toString()) {
return {
body: {
state: 'in progress',
uid: 'foo',
},
statusCode: bulkRoute.statusCodeSuccess,
};
} else if (request.url.toString() === 'http://localhost' + bulkAddRoute.getUrlPath({
UID: 'foo',
}).toString()) {
return {
body: {},
statusCode: bulkAddRoute.statusCodeSuccess,
statusCode: bulkDoneRoute.statusCodeSuccess,
};
}
return {
body: {},
statusCode: bulkDoneRoute.statusCodeSuccess,
};
});
},
);
await copy(httpClient, {
batchSize: 5,
@@ -129,62 +139,72 @@ export class CopySpec {
async copyShouldFail() {
type responses = Response<SCBulkAddResponse | SCBulkDoneResponse | SCBulkResponse | SCSearchResponse>;
sandbox.on(httpClient, 'request', async (request: RequestOptions): Promise<RecursivePartial<responses>> => {
if (request.url.toString() === 'http://foo.bar' + searchRoute.getUrlPath().toString()) {
const body = request.body as SCSearchRequest;
sandbox.on(
httpClient,
'request',
async (request: RequestOptions): Promise<RecursivePartial<responses>> => {
if (request.url.toString() === 'http://foo.bar' + searchRoute.getUrlPath().toString()) {
const body = request.body as SCSearchRequest;
if (typeof body.size === 'number' && body.size > 0) {
throw new ApiError({});
if (typeof body.size === 'number' && body.size > 0) {
throw new ApiError({});
}
return {
body: {
data: [
{
categories: ['main dish'],
name: 'foobar',
origin: {
indexed: moment().format(),
name: 'bar',
},
type: SCThingType.Dish,
uid: 'foo',
},
],
facets: [],
pagination: {
count: 0,
offset: 0,
total: 1,
},
stats: {
time: 1,
},
},
statusCode: searchRoute.statusCodeSuccess,
};
} else if (request.url.toString() === 'http://localhost' + bulkRoute.getUrlPath().toString()) {
return {
body: {
state: 'in progress',
uid: 'foo',
},
statusCode: bulkRoute.statusCodeSuccess,
};
} else if (
request.url.toString() ===
'http://localhost' +
bulkAddRoute
.getUrlPath({
UID: 'foo',
})
.toString()
) {
return {
body: {},
statusCode: bulkAddRoute.statusCodeSuccess,
};
}
return {
body: {
data: [{
categories: [
'main dish',
],
name: 'foobar',
origin: {
indexed: moment().format(),
name: 'bar',
},
type: SCThingType.Dish,
uid: 'foo',
}],
facets: [],
pagination: {
count: 0,
offset: 0,
total: 1,
},
stats: {
time: 1,
},
},
statusCode: searchRoute.statusCodeSuccess,
};
} else if (request.url.toString() === 'http://localhost' + bulkRoute.getUrlPath().toString()) {
return {
body: {
state: 'in progress',
uid: 'foo',
},
statusCode: bulkRoute.statusCodeSuccess,
};
} else if (request.url.toString() === 'http://localhost' + bulkAddRoute.getUrlPath({
UID: 'foo',
}).toString()) {
return {
body: {},
statusCode: bulkAddRoute.statusCodeSuccess,
statusCode: bulkDoneRoute.statusCodeSuccess,
};
}
return {
body: {},
statusCode: bulkDoneRoute.statusCodeSuccess,
};
});
},
);
return copy(httpClient, {
batchSize: 5,

View File

@@ -80,80 +80,93 @@ export class E2EConnectorSpec {
let failOnCompare = false;
let failOnLookup = false;
sandbox.on(httpClient, 'request', async (request: RequestOptions): Promise<RecursivePartial<responses>> => {
if (request.url.toString() === `http://localhost${bulkRoute.getUrlPath().toString()}`) {
return {
body: {
state: 'in progress',
uid: 'foo',
},
statusCode: bulkRoute.statusCodeSuccess,
};
}
if (request.url.toString() === `http://localhost${bulkAddRoute.getUrlPath({UID: 'foo'}).toString()}`) {
storedThings.set(request.body.uid, clone()(request.body));
return {
body: {},
statusCode: bulkAddRoute.statusCodeSuccess,
};
}
if (request.url.toString() === `http://localhost${bulkDoneRoute.getUrlPath({UID: 'foo'}).toString()}`) {
return {
body: {},
statusCode: bulkDoneRoute.statusCodeSuccess,
};
}
if (request.url.toString() === `http://localhost${searchRoute.getUrlPath().toString()}`) {
const thing = storedThings.get(request.body.filter.arguments.value);
if (failOnCompare) {
thing!.origin!.modified = 'altered';
sandbox.on(
httpClient,
'request',
async (request: RequestOptions): Promise<RecursivePartial<responses>> => {
if (request.url.toString() === `http://localhost${bulkRoute.getUrlPath().toString()}`) {
return {
body: {
state: 'in progress',
uid: 'foo',
},
statusCode: bulkRoute.statusCodeSuccess,
};
}
if (
request.url.toString() === `http://localhost${bulkAddRoute.getUrlPath({UID: 'foo'}).toString()}`
) {
storedThings.set(request.body.uid, clone()(request.body));
return {
body: {},
statusCode: bulkAddRoute.statusCodeSuccess,
};
}
if (
request.url.toString() === `http://localhost${bulkDoneRoute.getUrlPath({UID: 'foo'}).toString()}`
) {
return {
body: {},
statusCode: bulkDoneRoute.statusCodeSuccess,
};
}
if (request.url.toString() === `http://localhost${searchRoute.getUrlPath().toString()}`) {
const thing = storedThings.get(request.body.filter.arguments.value);
if (failOnCompare) {
thing!.origin!.modified = 'altered';
}
const returnThing = failOnLookup ? [] : [thing];
const returnBody = {
data: returnThing,
facets: [],
pagination: {
count: returnThing.length,
offset: 0,
total: returnThing.length,
},
stats: {
time: 42,
},
};
return {
body: returnBody,
statusCode: searchRoute.statusCodeSuccess,
};
}
const returnThing = failOnLookup ? [] : [thing];
const returnBody = {
data: returnThing,
facets: [],
pagination: {
count: returnThing.length,
offset: 0,
total: returnThing.length,
},
stats: {
time: 42,
},
};
return {
body: returnBody,
body: {},
statusCode: searchRoute.statusCodeSuccess,
};
}
return {
body: {},
statusCode: searchRoute.statusCodeSuccess,
};
});
},
);
// tslint:disable-next-line: max-line-length
await e2eRun(httpClient, {to: 'http://localhost', samplesLocation: './node_modules/@openstapps/core/test/resources'});
await e2eRun(httpClient, {
to: 'http://localhost',
samplesLocation: './node_modules/@openstapps/core/test/resources',
});
failOnLookup = true;
failOnCompare = false;
// tslint:disable-next-line: max-line-length
await e2eRun(httpClient, {to: 'http://localhost', samplesLocation: './node_modules/@openstapps/core/test/resources'})
.should.be.rejectedWith('Search for single SCThing with uid');
await e2eRun(httpClient, {
to: 'http://localhost',
samplesLocation: './node_modules/@openstapps/core/test/resources',
}).should.be.rejectedWith('Search for single SCThing with uid');
failOnLookup = false;
failOnCompare = true;
// tslint:disable-next-line: max-line-length
await e2eRun(httpClient, {to: 'http://localhost', samplesLocation: './node_modules/@openstapps/core/test/resources'})
.should.be.rejectedWith('Unexpected difference');
await e2eRun(httpClient, {
to: 'http://localhost',
samplesLocation: './node_modules/@openstapps/core/test/resources',
}).should.be.rejectedWith('Unexpected difference');
}
@test
@@ -161,7 +174,6 @@ export class E2EConnectorSpec {
type responses = Response<SCBulkAddResponse | SCBulkDoneResponse | SCBulkResponse>;
sandbox.on(httpClient, 'request', async (): Promise<RecursivePartial<responses>> => {
return {
body: {},
statusCode: Number.MAX_SAFE_INTEGER,
@@ -169,8 +181,10 @@ export class E2EConnectorSpec {
});
// tslint:disable-next-line: max-line-length
return e2eRun(httpClient, {to: 'http://localhost', samplesLocation: './node_modules/@openstapps/core/test/resources'})
.should.be.rejectedWith(ApiError);
return e2eRun(httpClient, {
to: 'http://localhost',
samplesLocation: './node_modules/@openstapps/core/test/resources',
}).should.be.rejectedWith(ApiError);
}
@test
@@ -179,8 +193,9 @@ export class E2EConnectorSpec {
if (!existsSync(emptyDirPath)) {
mkdirSync(emptyDirPath);
}
await e2eRun(httpClient, {to: 'http://localhost', samplesLocation: emptyDirPath})
.should.be.rejectedWith('Could not index samples. None were retrieved from the file system.');
await e2eRun(httpClient, {to: 'http://localhost', samplesLocation: emptyDirPath}).should.be.rejectedWith(
'Could not index samples. None were retrieved from the file system.',
);
rmdirSync(emptyDirPath);
}
@@ -190,10 +205,12 @@ export class E2EConnectorSpec {
if (!existsSync(somewhatFilledDirPath)) {
mkdirSync(somewhatFilledDirPath);
}
const nonJsonFile = join (somewhatFilledDirPath, 'nonjson.txt');
const nonJsonFile = join(somewhatFilledDirPath, 'nonjson.txt');
createFileSync(nonJsonFile);
await e2eRun(httpClient, {to: 'http://localhost', samplesLocation: somewhatFilledDirPath})
.should.be.rejectedWith('Could not index samples. None were retrieved from the file system.');
await e2eRun(httpClient, {
to: 'http://localhost',
samplesLocation: somewhatFilledDirPath,
}).should.be.rejectedWith('Could not index samples. None were retrieved from the file system.');
unlinkSync(nonJsonFile);
rmdirSync(somewhatFilledDirPath);
}

View File

@@ -21,7 +21,6 @@ import {HttpClient} from '../src/http-client.js';
@suite()
export class HttpClientSpec {
@test
async construct() {
expect(() => {
@@ -37,9 +36,7 @@ export class HttpClientSpec {
async request() {
const client = new HttpClient();
nock('http://www.example.com')
.get('/resource')
.reply(200, 'foo');
nock('http://www.example.com').get('/resource').reply(200, 'foo');
const response = await client.request({
url: new URL('http://www.example.com/resource'),
@@ -52,12 +49,10 @@ export class HttpClientSpec {
async requestWithBody() {
const client = new HttpClient();
nock('http://www.example.com')
.get('/resource')
.reply(200, 'foo');
nock('http://www.example.com').get('/resource').reply(200, 'foo');
const response = await client.request({
url: new URL('http://www.example.com/resource')
url: new URL('http://www.example.com/resource'),
});
expect(response.body).to.be.equal('foo');
@@ -68,9 +63,7 @@ export class HttpClientSpec {
const client = new HttpClient();
let caughtErr;
nock('http://www.example.com')
.get('/resource')
.replyWithError('foo');
nock('http://www.example.com').get('/resource').replyWithError('foo');
try {
await client.request({
@@ -90,9 +83,7 @@ export class HttpClientSpec {
async requestWithHeaders() {
const client = new HttpClient();
nock('http://www.example.com')
.get('/resource')
.reply(200, 'foo');
nock('http://www.example.com').get('/resource').reply(200, 'foo');
const response = await client.request({
headers: {
@@ -108,9 +99,7 @@ export class HttpClientSpec {
async requestWithMethodGet() {
const client = new HttpClient();
nock('http://www.example.com')
.get('/resource')
.reply(200, 'foo');
nock('http://www.example.com').get('/resource').reply(200, 'foo');
const response = await client.request({
method: 'GET',
@@ -124,9 +113,7 @@ export class HttpClientSpec {
async requestWithMethodPost() {
const client = new HttpClient();
nock('http://www.example.com')
.post('/resource')
.reply(200, 'foo');
nock('http://www.example.com').post('/resource').reply(200, 'foo');
const response = await client.request({
method: 'POST',

View File

@@ -41,7 +41,21 @@ export class PluginClientSpec {
}
static async before() {
this.plugin = new TestPlugin(4000, '', '', '', '', {getSchema: () => {/***/}} as any, '', '', '');
this.plugin = new TestPlugin(
4000,
'',
'',
'',
'',
{
getSchema: () => {
/***/
},
} as any,
'',
'',
'',
);
}
async after() {
@@ -78,7 +92,7 @@ export class PluginClientSpec {
expect(httpClient.request).to.have.been.first.called.with({
body: request,
headers: {
"Content-Type": "application/json",
'Content-Type': 'application/json',
},
method: pluginRegisterRoute.method,
url: new URL(`http://localhost${pluginRegisterRoute.getUrlPath()}`),
@@ -102,14 +116,14 @@ export class PluginClientSpec {
await pluginClient.unregisterPlugin(PluginClientSpec.plugin);
const request: SCPluginRegisterRequest = {
action: 'remove',
route: PluginClientSpec.plugin.route,
action: 'remove',
route: PluginClientSpec.plugin.route,
};
expect(httpClient.request).to.have.been.first.called.with({
body: request,
headers: {
"Content-Type": "application/json",
'Content-Type': 'application/json',
},
method: pluginRegisterRoute.method,
url: new URL(`http://localhost${pluginRegisterRoute.getUrlPath()}`),

View File

@@ -17,9 +17,9 @@
*
* @validatable
*/
export interface TestPluginResponse {
export interface TestPluginResponse {
/**
* Query dummy
*/
query: string;
query: string;
}

View File

@@ -25,7 +25,7 @@ import {TestPlugin} from './plugin-resources/test-plugin.js';
chai.use(chaiSpies);
process.on('unhandledRejection', (err) => {
process.on('unhandledRejection', err => {
throw err;
});
@@ -42,10 +42,21 @@ export class PluginSpec {
}
static async before() {
PluginSpec.testPlugin = new TestPlugin(4000, '', '', '', '', {
getSchema: () => {/***/
},
} as any, '', '', '');
PluginSpec.testPlugin = new TestPlugin(
4000,
'',
'',
'',
'',
{
getSchema: () => {
/***/
},
} as any,
'',
'',
'',
);
}
async after() {
@@ -54,9 +65,12 @@ export class PluginSpec {
@test
async construct() {
const converter = new Converter(__dirname, resolve(__dirname,'plugin-resources','test-plugin-response.ts'));
const converter = new Converter(
__dirname,
resolve(__dirname, 'plugin-resources', 'test-plugin-response.ts'),
);
sandbox.on(converter, 'getSchema', (schemaName) => {
sandbox.on(converter, 'getSchema', schemaName => {
return {$id: schemaName};
});
@@ -98,10 +112,21 @@ export class PluginSpec {
@test
async fullUrl() {
const constructTestPlugin = new TestPlugin(4001, '', 'http://B', '', '', {
getSchema: () => {/***/
},
} as any, '', '', '');
const constructTestPlugin = new TestPlugin(
4001,
'',
'http://B',
'',
'',
{
getSchema: () => {
/***/
},
} as any,
'',
'',
'',
);
expect(constructTestPlugin.fullUrl).to.be.equal('http://B:4001');
await constructTestPlugin.close();
}

View File

@@ -1,3 +1,3 @@
{
"extends": "./node_modules/@openstapps/configuration/tsconfig.json"
"extends": "@openstapps/tsconfig"
}