Like `@capire/data-viewer`, resulting in requests like `GET /capire-data-viewer-0.1.0.tgz`
56 lines
1.7 KiB
JavaScript
56 lines
1.7 KiB
JavaScript
|
|
const cds = require('@sap/cds/lib')
|
|
const { expect } = cds.test
|
|
const { fork } = require('child_process')
|
|
const { resolve } = require('path')
|
|
const verbose = process.env.CDS_TEST_VERBOSE
|
|
// ||true
|
|
|
|
describe('Local NPM registry', () => {
|
|
let registry
|
|
let axios
|
|
const cwd = resolve(__dirname, '..')
|
|
|
|
before(async ()=> {
|
|
const env = Object.assign(process.env, {PORT:'0'})
|
|
const res = await exec (resolve(cwd, '.registry/server.js'), {cwd, stdio: 'pipe', env})
|
|
registry = res.cp
|
|
axios = require('axios').default.create ({ baseURL: res.url, validateStatus: (status)=>status<500 })
|
|
})
|
|
|
|
after(() => { registry.kill() })
|
|
|
|
for (const mod of ['bookshop', 'data-viewer', 'fiori','orders','reviews']) {
|
|
it(`should serve ${mod}`, async () => {
|
|
const resp = await axios.get(`/@capire/${mod}`)
|
|
expect(resp.data).to.containSubset({name: `@capire/${mod}`, versions:{}})
|
|
const versions = Object.values(resp.data.versions)
|
|
await axios.get(versions[0].dist.tarball)
|
|
})
|
|
}
|
|
it(`should return 404 for unknown packages`, async () => {
|
|
let resp = await axios.get(`/@capire/foo`)
|
|
expect(resp.status).to.equal(404)
|
|
resp = await axios.get(`/foo`)
|
|
expect(resp.status).to.equal(404)
|
|
})
|
|
|
|
})
|
|
|
|
function exec (script, opts) {
|
|
return new Promise((resolve, reject)=> {
|
|
const cp = fork (script, [], opts)
|
|
.on('error', err => reject(new Error(err)))
|
|
cp.stdout.on('data', chunk => {
|
|
if (verbose) console.log(chunk.toString())
|
|
if (chunk.toString().match(/listening.*(http:.*:\d+)/i)) {
|
|
resolve({cp, url:RegExp.$1})
|
|
}
|
|
})
|
|
cp.stderr.on('data', chunk => {
|
|
if (verbose) console.error(chunk.toString())
|
|
})
|
|
})
|
|
|
|
}
|