68 lines
2.6 KiB
JavaScript
68 lines
2.6 KiB
JavaScript
import assert from 'node:assert/strict'
|
|
import { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises'
|
|
import { tmpdir } from 'node:os'
|
|
import path from 'node:path'
|
|
import test from 'node:test'
|
|
|
|
import {
|
|
discoverOpenApiFiles,
|
|
parseServiceModules,
|
|
summarizeCoverage,
|
|
validateRepositoryOpenApi
|
|
} from './validate-openapi.mjs'
|
|
|
|
test('discovers new static OpenAPI documents without a handwritten file list', async (t) => {
|
|
const root = await mkdtemp(path.join(tmpdir(), 'baiyue-openapi-discovery-'))
|
|
t.after(() => rm(root, { recursive: true, force: true }))
|
|
const openapi = path.join(root, 'new-service', 'src', 'main', 'resources', 'openapi')
|
|
const ignored = path.join(root, 'new-service', 'target', 'src', 'main', 'resources', 'openapi')
|
|
await mkdir(openapi, { recursive: true })
|
|
await mkdir(ignored, { recursive: true })
|
|
await writeFile(path.join(openapi, 'new-api.yaml'), 'openapi: 3.0.3\n', 'utf8')
|
|
await writeFile(path.join(openapi, 'new-api.json'), '{"openapi":"3.0.3"}\n', 'utf8')
|
|
await writeFile(path.join(openapi, 'notes.md'), 'not an OpenAPI document\n', 'utf8')
|
|
await writeFile(path.join(ignored, 'ignored.yaml'), 'openapi: 3.0.3\n', 'utf8')
|
|
|
|
assert.deepEqual(await discoverOpenApiFiles(root), [
|
|
'new-service/src/main/resources/openapi/new-api.json',
|
|
'new-service/src/main/resources/openapi/new-api.yaml'
|
|
])
|
|
})
|
|
|
|
test('derives static and code-first service coverage from service-map', () => {
|
|
const serviceModules = parseServiceModules('services:\n alpha:\n port: 1\n beta:\n port: 2\n')
|
|
assert.deepEqual(serviceModules, ['alpha', 'beta'])
|
|
assert.deepEqual(summarizeCoverage([
|
|
'alpha/src/main/resources/openapi/alpha.yaml'
|
|
], serviceModules), {
|
|
coveredServices: ['alpha'],
|
|
codeFirstServices: ['beta']
|
|
})
|
|
})
|
|
|
|
test('rejects an unresolved OpenAPI reference', async (t) => {
|
|
const root = await mkdtemp(path.join(tmpdir(), 'baiyue-openapi-ref-'))
|
|
t.after(() => rm(root, { recursive: true, force: true }))
|
|
const openapi = path.join(root, 'alpha', 'src', 'main', 'resources', 'openapi')
|
|
await mkdir(openapi, { recursive: true })
|
|
await mkdir(path.join(root, 'deploy'), { recursive: true })
|
|
await writeFile(path.join(root, 'deploy', 'service-map.yml'), 'services:\n alpha:\n port: 1\n', 'utf8')
|
|
await writeFile(path.join(openapi, 'broken.yaml'), `openapi: 3.0.3
|
|
info:
|
|
title: Broken API
|
|
version: 1.0.0
|
|
paths:
|
|
/broken:
|
|
get:
|
|
responses:
|
|
'200':
|
|
description: broken
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Missing'
|
|
`, 'utf8')
|
|
|
|
await assert.rejects(validateRepositoryOpenApi(root), /Missing \$ref pointer/)
|
|
})
|