Skip to content

Commit

Permalink
chore: update dependencies, http-server is now a dev dependency (#71)
Browse files Browse the repository at this point in the history
  • Loading branch information
hugoArregui authored Sep 10, 2024
1 parent 257de81 commit 8b09740
Show file tree
Hide file tree
Showing 6 changed files with 73 additions and 61 deletions.
4 changes: 1 addition & 3 deletions etc/test-helpers.api.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,8 @@
```ts

/// <reference types="jest" />

import { IConfigComponent } from '@well-known-components/interfaces';
import { IFetchComponent } from '@well-known-components/http-server';
import { IFetchComponent } from '@well-known-components/interfaces';
import { Lifecycle } from '@well-known-components/interfaces';
import { default as sinon_2 } from 'sinon';

Expand Down
11 changes: 3 additions & 8 deletions jest.config.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,8 @@
module.exports = {
globals: {
'ts-jest': {
tsconfig: 'tsconfig.json'
}
},
moduleFileExtensions: ['ts', 'js'],
transform: {
'^.+\\.(ts|tsx)$': 'ts-jest'
"^.+\\.(ts|tsx)$": ["ts-jest", {tsconfig: "test/tsconfig.json"}]
},
moduleFileExtensions: ['ts', 'js'],
testMatch: ['**/*.spec.(ts)'],
testEnvironment: 'node'
}
}
11 changes: 8 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,20 +17,25 @@
},
"prettier": {
"printWidth": 120,
"semi": false
"semi": false,
"singleQuote": true,
"trailingComma": "none",
"tabWidth": 2
},
"homepage": "https://github.com/well-known-components/test-helpers#readme",
"devDependencies": {
"@microsoft/api-extractor": "^7.36.0",
"@well-known-components/http-server": "^2.0.0",
"@well-known-components/http-server": "^2.1.0",
"@well-known-components/interfaces": "^1.4.2",
"ts-node": "^10.9.1",
"typescript": "^5.1.5"
"typescript": "^5.6.2"
},
"dependencies": {
"@types/jest": "^29.5.2",
"@types/node": "^22.5.4",
"@types/sinon": "^17.0.1",
"jest": "^29.5.0",
"node-fetch": "2.x",
"sinon": "^18.0.0",
"ts-jest": "^29.1.0"
},
Expand Down
25 changes: 11 additions & 14 deletions src/localFetch.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
import nodeFetch, { RequestInfo, RequestInit } from "node-fetch"
import nodeFetch, { RequestInfo, RequestInit } from 'node-fetch'
import * as http from 'http'

import { IFetchComponent } from "@well-known-components/http-server"
import { IConfigComponent } from "@well-known-components/interfaces"
import { IFetchComponent, IConfigComponent } from '@well-known-components/interfaces'

// start TCP port for listeners
/* istanbul ignore next */
let lastUsedPort = 19000 + parseInt(process.env.JEST_WORKER_ID || "1") * 1000
let lastUsedPort = 19000 + parseInt(process.env.JEST_WORKER_ID || '1') * 1000

function getPort() {
lastUsedPort += 1
Expand All @@ -16,7 +15,7 @@ function getPort() {
/**
* Default Server config
* @public
**/
**/
export const defaultServerConfig = () => ({
HTTP_SERVER_HOST: '0.0.0.0',
HTTP_SERVER_PORT: String(getPort())
Expand All @@ -25,24 +24,22 @@ export const defaultServerConfig = () => ({
/**
* Local Fetch component for testing local urls
* @public
**/
export async function createLocalFetchCompoment(
configComponent: IConfigComponent
): Promise<IFetchComponent> {
**/
export async function createLocalFetchCompoment(configComponent: IConfigComponent): Promise<IFetchComponent> {
const protocolHostAndProtocol = `http://${await configComponent.requireString(
"HTTP_SERVER_HOST"
)}:${await configComponent.requireNumber("HTTP_SERVER_PORT")}`
'HTTP_SERVER_HOST'
)}:${await configComponent.requireNumber('HTTP_SERVER_PORT')}`

const agent = new http.Agent({ keepAlive: false })
// test fetch, to hit our local server
const localFetch: IFetchComponent = {
async fetch(url: RequestInfo, initRequest?: RequestInit) {
if (typeof url == "string" && url.startsWith("/")) {
if (typeof url == 'string' && url.startsWith('/')) {
return nodeFetch(protocolHostAndProtocol + url, { agent, ...initRequest })
} else {
throw new Error("localFetch only works for local testing-URLs")
throw new Error('localFetch only works for local testing-URLs')
}
},
}
}
return localFetch
}
36 changes: 18 additions & 18 deletions test/simple-smoke-test/localFetch.spec.ts
Original file line number Diff line number Diff line change
@@ -1,33 +1,33 @@
import { createServerComponent, IFetchComponent, Router } from "@well-known-components/http-server"
import { IHttpServerComponent } from "@well-known-components/interfaces"
import { createServerComponent, Router } from '@well-known-components/http-server'
import { IHttpServerComponent, IFetchComponent } from '@well-known-components/interfaces'

import expect from "expect"
import { createRunner } from "../../src"
import { createLocalFetchCompoment, defaultServerConfig } from "../../src/localFetch"
import expect from 'expect'
import { createRunner } from '../../src'
import { createLocalFetchCompoment, defaultServerConfig } from '../../src/localFetch'

type Components = {
fetch: IFetchComponent,
fetch: IFetchComponent
server: IHttpServerComponent<GlobalContext>
}
type GlobalContext = {
components: Components
}

const logs = {
getLogger: (a: string) => ({
log: (message: string) => {},
error: (error: string | Error) => {},
debug: (message: string) => {},
info: (message: string) => {},
warn: (message: string) => {},
getLogger: (_a: string) => ({
log: (_message: string) => {},
error: (_error: string | Error) => {},
debug: (_message: string) => {},
info: (_message: string) => {},
warn: (_message: string) => {}
})
}
const configMap = defaultServerConfig()
const config = {
getString: async (a: string) => a,
getNumber: async (a: string) => Number(a),
requireNumber: async (a: keyof typeof configMap) => Number(configMap[a])!,
requireString: async (a: keyof typeof configMap) => configMap[a]!,
requireString: async (a: keyof typeof configMap) => configMap[a]!
}

const ROUTE_URL = '/some-route'
Expand All @@ -38,7 +38,7 @@ const test = createRunner<Components>({
const router = new Router<GlobalContext>()

router.get(ROUTE_URL, async (_ctx) => {
return { status: 200, body: RESPONSE }
return { status: 200, body: RESPONSE }
})

components.server.use(router.allowedMethods())
Expand All @@ -53,18 +53,18 @@ const test = createRunner<Components>({
fetch: await createLocalFetchCompoment(config),
server: await createServerComponent<GlobalContext>({ config, logs }, {})
}
},
}
})

test("test local fetch component", ({ components, stubComponents }) => {
it("should return response json", async () => {
test('test local fetch component', ({ components, stubComponents }) => {
it('should return response json', async () => {
const { fetch } = components
const response = await (await fetch.fetch(ROUTE_URL)).json()

expect(response).toStrictEqual(RESPONSE)
})

it("sould fail if its an external url", async () => {
it('sould fail if its an external url', async () => {
const { fetch } = components
try {
await fetch.fetch('https://some-route.com')
Expand Down
47 changes: 32 additions & 15 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -758,9 +758,9 @@
"@types/node" "*"

"@types/http-errors@^2.0.1":
version "2.0.1"
resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.1.tgz#20172f9578b225f6c7da63446f56d4ce108d5a65"
integrity sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==
version "2.0.4"
resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f"
integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==

"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1":
version "2.0.4"
Expand Down Expand Up @@ -802,6 +802,13 @@
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.2.tgz#fa6a90f2600e052a03c18b8cb3fd83dd4e599898"
integrity sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw==

"@types/node@^22.5.4":
version "22.5.4"
resolved "https://registry.yarnpkg.com/@types/node/-/node-22.5.4.tgz#83f7d1f65bc2ed223bdbf57c7884f1d5a4fa84e8"
integrity sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==
dependencies:
undici-types "~6.19.2"

"@types/sinon@^17.0.1":
version "17.0.3"
resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-17.0.3.tgz#9aa7e62f0a323b9ead177ed23a36ea757141a5fa"
Expand Down Expand Up @@ -831,10 +838,10 @@
dependencies:
"@types/yargs-parser" "*"

"@well-known-components/http-server@^2.0.0":
version "2.0.0"
resolved "https://registry.yarnpkg.com/@well-known-components/http-server/-/http-server-2.0.0.tgz#85ec93080ae64f962782699db3eeecd597f59405"
integrity sha512-baDP0+MpgqTnKLFFXS41WBbg9QIGCXTEA7BHf6JqW1evrTW10MKEx+rgEvQQlhCA5oXxUdKOD+xNnR3GqzGw9w==
"@well-known-components/http-server@^2.1.0":
version "2.1.0"
resolved "https://registry.yarnpkg.com/@well-known-components/http-server/-/http-server-2.1.0.tgz#23a18edc82904b3a575452c2d7e618c7da37a07f"
integrity sha512-IHD7aLTA+9DYEchQubHDBwc4FmVEmQC+2TWbi8Tz+QlkiQdtndcuba8XHH+EwqlB5sna/EAJGZGXPxS7okcHKA==
dependencies:
"@types/http-errors" "^2.0.1"
destroy "^1.2.0"
Expand Down Expand Up @@ -2160,9 +2167,9 @@ minimatch@~3.0.3:
brace-expansion "^1.1.7"

mitt@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.0.tgz#69ef9bd5c80ff6f57473e8d89326d01c414be0bd"
integrity sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==
version "3.0.1"
resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.1.tgz#ea36cf0cc30403601ae074c8f77b7092cdab36d1"
integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==

[email protected]:
version "2.1.2"
Expand All @@ -2185,10 +2192,10 @@ nise@^6.0.0:
just-extend "^6.2.0"
path-to-regexp "^6.2.1"

node-fetch@^2.6.9:
version "2.6.11"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.11.tgz#cde7fc71deef3131ef80a738919f999e6edfff25"
integrity sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==
node-fetch@2.x, node-fetch@^2.6.9:
version "2.7.0"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d"
integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==
dependencies:
whatwg-url "^5.0.0"

Expand Down Expand Up @@ -2635,11 +2642,21 @@ typed-url-params@^1.0.1:
resolved "https://registry.yarnpkg.com/typed-url-params/-/typed-url-params-1.0.1.tgz#59aeb01881a6ac6cc1cbd6e9f949f306ddb5a6e7"
integrity sha512-762imXO+myoSDHD9+YxUfSmfT0yGH1j+3s9UJ6uqKkOYIwHH6/gsFo67ZoST0Ey/RSoaps1zGu1N+eiuuCxfeg==

[email protected], typescript@^5.1.5:
[email protected]:
version "5.4.2"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.2.tgz#0ae9cebcfae970718474fe0da2c090cad6577372"
integrity sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==

typescript@^5.6.2:
version "5.6.2"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.2.tgz#d1de67b6bef77c41823f822df8f0b3bcff60a5a0"
integrity sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==

undici-types@~6.19.2:
version "6.19.8"
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02"
integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==

universalify@^0.1.0:
version "0.1.2"
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
Expand Down

0 comments on commit 8b09740

Please sign in to comment.