persona-community-5/.pnpm-store/v3/files/e3/4814306825a4fef13a203415562a09ed8ee073ab00542adb77438999908b6c91d69dec8b385c535b08674cd79ce281a24dbc9484090c1c98b15209f10b73b5
rdev-worker a1d0d1bf1c
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
build: /implement-feature community-ui --requirements 'Build the React commu...
2026-02-24 08:22:30 +00:00

345 lines
8.5 KiB
Plaintext

import { outdent } from 'outdent';
import { bundleDocument } from '../../bundle';
import { BaseResolver } from '../../resolve';
import { makeConfig, parseYamlToDocument, yamlSerializer } from '../../../__tests__/utils';
describe('oas3 filter-out', () => {
expect.addSnapshotSerializer(yamlSerializer);
const inputDoc = parseYamlToDocument(
outdent`
openapi: 3.0.0
paths:
/pet:
x-audience: Private
post:
summary: test
/user:
x-audience: Protected
post:
summary: test
/order:
x-audience: [Private, Protected]
post:
operationId: storeOrder
parameters:
- name: api_key
callbacks:
x-access: protected
orderInProgress:
x-internal: true`
);
it('should remove /pet path and y parameter', async () => {
const testDocument = parseYamlToDocument(
outdent`
openapi: 3.0.0
paths:
/pet:
x-access: private
get:
parameters:
- $ref: '#/components/parameters/y'
components:
parameters:
x:
name: x
y:
x-access: private
name: y
`
);
const { bundle: res } = await bundleDocument({
document: testDocument,
externalRefResolver: new BaseResolver(),
config: await makeConfig({
rules: {},
decorators: { 'filter-out': { property: 'x-access', value: 'private' } },
}),
});
expect(res.parsed).toMatchInlineSnapshot(`
openapi: 3.0.0
components:
parameters:
x:
name: x
`);
});
it('should remove only /order path', async () => {
const { bundle: res } = await bundleDocument({
document: inputDoc,
externalRefResolver: new BaseResolver(),
config: await makeConfig({
rules: {},
decorators: {
'filter-out': {
property: 'x-audience',
value: ['Private', 'Protected'],
matchStrategy: 'all',
},
},
}),
});
expect(res.parsed).toMatchInlineSnapshot(`
openapi: 3.0.0
paths:
/pet:
x-audience: Private
post:
summary: test
/user:
x-audience: Protected
post:
summary: test
components: {}
`);
});
it('should remove all paths', async () => {
const { bundle: res } = await bundleDocument({
document: inputDoc,
externalRefResolver: new BaseResolver(),
config: await makeConfig({
rules: {},
decorators: {
'filter-out': {
property: 'x-audience',
value: ['Private', 'Protected'],
matchStrategy: 'any',
},
},
}),
});
expect(res.parsed).toMatchInlineSnapshot(`
openapi: 3.0.0
components: {}
`);
});
it('should remove requestBody', async () => {
const testDoc = parseYamlToDocument(
outdent`
openapi: 3.0.0
paths:
/pet:
post:
summary: test
requestBody:
content:
x-access: private
application/x-www-form-urlencoded:
schema:
type: object
components: {}
`
);
const { bundle: res } = await bundleDocument({
document: testDoc,
externalRefResolver: new BaseResolver(),
config: await makeConfig({
rules: {},
decorators: {
'filter-out': {
property: 'x-access',
value: 'private',
matchStrategy: 'any',
},
},
}),
});
expect(res.parsed).toMatchInlineSnapshot(`
openapi: 3.0.0
paths:
/pet:
post:
summary: test
components: {}
`);
});
it('should remove /pet path and /my/path/false path', async () => {
const testDocument = parseYamlToDocument(
outdent`
openapi: 3.0.0
paths:
/pet:
get:
x-prop: false
parameters:
- $ref: '#/components/parameters/x'
/my/path/false:
x-access: private
x-prop: false
get:
parameters:
- $ref: '#/components/parameters/x'
/my/path/null:
x-access: private
x-prop: null
get:
parameters:
- $ref: '#/components/parameters/x'
components:
parameters:
x:
name: x
`
);
const { bundle: res } = await bundleDocument({
document: testDocument,
externalRefResolver: new BaseResolver(),
config: await makeConfig({
rules: {},
decorators: { 'filter-out': { property: 'x-prop', value: false } },
}),
});
expect(res.parsed).toMatchInlineSnapshot(`
openapi: 3.0.0
paths:
/my/path/null:
x-access: private
x-prop: null
get:
parameters:
- $ref: '#/components/parameters/x'
components:
parameters:
x:
name: x
`);
});
it('should remove /my/path/null path ', async () => {
const testDocument = parseYamlToDocument(
outdent`
openapi: 3.0.0
paths:
/pet:
x-access: private
get:
x-prop: false
parameters:
- $ref: '#/components/parameters/y'
/my/path/false:
x-access: private
x-prop: false
get:
parameters:
- $ref: '#/components/parameters/y'
/my/path/null:
x-access: private
x-prop: null
get:
parameters:
- $ref: '#/components/parameters/y'
components:
parameters:
x:
name: x
`
);
const { bundle: res } = await bundleDocument({
document: testDocument,
externalRefResolver: new BaseResolver(),
config: await makeConfig({
rules: {},
decorators: { 'filter-out': { property: 'x-prop', value: null } },
}),
});
expect(res.parsed).toMatchInlineSnapshot(`
openapi: 3.0.0
paths:
/pet:
x-access: private
get:
x-prop: false
parameters:
- $ref: '#/components/parameters/y'
/my/path/false:
x-access: private
x-prop: false
get:
parameters:
- $ref: '#/components/parameters/y'
components:
parameters:
x:
name: x
`);
});
});
describe('oas2 filter-out', () => {
it('should clean all parameters and responses ', async () => {
const testDoc = parseYamlToDocument(
outdent`
swagger: '2.0'
host: api.instagram.com
paths:
'/geographies/{geo-id}/media/recent':
get:
parameters:
- description: The geography ID.
x-access: private
in: path
name: geo-id
required: true
type: string
- description: Max number of media to return.
x-access: protected
format: int32
in: query
name: count
required: false
type: integer
responses:
$ref: '#/components/response/200'
components:
response:
'200':
description: List of recent media entries.
x-access: [protected, public]
`
);
const { bundle: res } = await bundleDocument({
document: testDoc,
externalRefResolver: new BaseResolver(),
config: await makeConfig({
rules: {},
decorators: {
'filter-out': {
property: 'x-access',
value: ['private', 'protected'],
matchStrategy: 'any',
},
},
}),
});
expect(res.parsed).toMatchInlineSnapshot(`
swagger: '2.0'
host: api.instagram.com
paths:
/geographies/{geo-id}/media/recent:
get: {}
components:
response:
'200':
description: List of recent media entries.
x-access:
- protected
- public
`);
});
});