prepare for tests ✅💚
This commit is contained in:
parent
97b1c10d7c
commit
622fcfbf70
5 changed files with 83 additions and 2 deletions
13
.github/workflows/docker-image.yml
vendored
13
.github/workflows/docker-image.yml
vendored
|
@ -4,8 +4,21 @@ on:
|
|||
branches:
|
||||
- 5
|
||||
jobs:
|
||||
lint-test:
|
||||
name: lint & test
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: checkout
|
||||
uses: actions/checkout@v2
|
||||
- name: setup Node
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 16.x
|
||||
- run: npm install
|
||||
- run: npm test
|
||||
build-and-publish:
|
||||
name: build & publish Docker image
|
||||
needs: [lint-test]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: check out the repo
|
||||
|
|
1
api.js
1
api.js
|
@ -71,6 +71,7 @@ const api = createApi(hafas, config, (api) => {
|
|||
})
|
||||
|
||||
module.exports = {
|
||||
hafas,
|
||||
config,
|
||||
api,
|
||||
}
|
||||
|
|
|
@ -36,11 +36,16 @@
|
|||
},
|
||||
"devDependencies": {
|
||||
"@derhuerst/technical-docs-cli": "^1.1.0",
|
||||
"pino-pretty": "^4.0.0"
|
||||
"axios": "^0.26.1",
|
||||
"get-port": "^5.1.1",
|
||||
"pino-pretty": "^4.0.0",
|
||||
"tap-min": "^2.0.0",
|
||||
"tape": "^5.5.2"
|
||||
},
|
||||
"scripts": {
|
||||
"docs": "node api-docs.js >docs/api.md && build-technical-doc --syntax-stylesheet-url /syntax.css <docs/readme.md >docs/index.html && build-technical-doc --syntax-stylesheet-url /syntax.css <docs/getting-started.md >docs/getting-started.html && build-technical-doc --syntax-stylesheet-url /syntax.css <docs/api.md >docs/api.html && build-technical-doc --syntax-stylesheet github >docs/syntax.css",
|
||||
"build": "npm run docs",
|
||||
"start": "node index.js"
|
||||
"start": "node index.js",
|
||||
"test": "node test.js | tap-min"
|
||||
}
|
||||
}
|
||||
|
|
6
test/index.js
Normal file
6
test/index.js
Normal file
|
@ -0,0 +1,6 @@
|
|||
'use strict'
|
||||
|
||||
const tape = require('tape')
|
||||
const {fetchWithTestApi} = require('./util')
|
||||
|
||||
// todo
|
56
test/util.js
Normal file
56
test/util.js
Normal file
|
@ -0,0 +1,56 @@
|
|||
'use strict'
|
||||
|
||||
const createApi = require('hafas-rest-api')
|
||||
const getPort = require('get-port')
|
||||
const {createServer} = require('http')
|
||||
const {promisify} = require('util')
|
||||
const axios = require('axios')
|
||||
const pkg = require('../package.json')
|
||||
const {config, hafas: unmockedHafas} = require('../api')
|
||||
|
||||
// adapted from https://github.com/public-transport/hafas-rest-api/blob/60335eacd8332d7f448da875a7498dd97934e360/test/util.js#L40-L77
|
||||
const createTestApi = async (mocks, cfg) => {
|
||||
const mockedHafas = Object.assign(Object.create(unmockedHafas), mocks)
|
||||
|
||||
cfg = {
|
||||
...config,
|
||||
hostname: 'localhost',
|
||||
name: 'test',
|
||||
version: '1.2.3a',
|
||||
homepage: 'http://example.org',
|
||||
description: 'test API',
|
||||
docsLink: 'https://example.org',
|
||||
logging: false,
|
||||
...cfg,
|
||||
}
|
||||
|
||||
const api = createApi(mockedHafas, cfg, () => {})
|
||||
const server = createServer(api)
|
||||
|
||||
const port = await getPort()
|
||||
await promisify(server.listen.bind(server))(port)
|
||||
|
||||
const stop = () => promisify(server.close.bind(server))()
|
||||
const fetch = (path, opt = {}) => {
|
||||
opt = Object.assign({
|
||||
method: 'get',
|
||||
baseURL: `http://localhost:${port}/`,
|
||||
url: path,
|
||||
timeout: 5000
|
||||
}, opt)
|
||||
return axios(opt)
|
||||
}
|
||||
return {stop, fetch}
|
||||
}
|
||||
|
||||
const fetchWithTestApi = async (mocks, cfg, path, opt = {}) => {
|
||||
const {fetch, stop} = await createTestApi(mocks, cfg)
|
||||
const res = await fetch(path, opt)
|
||||
await stop()
|
||||
return res
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
createTestApi,
|
||||
fetchWithTestApi,
|
||||
}
|
Loading…
Reference in a new issue