persona-community-5/.pnpm-store/v3/files/27/4f1a96ea91c5cd756519000783bbc811389291ad7ee63ec8d513a238f91124ee60766303614c0f31c61e019f2d0f00c1509fe0fe5964e2119c9c1dccb89749
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

314 lines
7.7 KiB
Plaintext

import { outdent } from 'outdent';
import { bundleDocument } from '../../bundle';
import { BaseResolver } from '../../resolve';
import { makeConfig, parseYamlToDocument, yamlSerializer } from '../../../__tests__/utils';
describe('oas3 filter-in', () => {
expect.addSnapshotSerializer(yamlSerializer);
const inputDoc = parseYamlToDocument(
outdent`
openapi: 3.0.0
paths:
/pet:
x-audience: Global
post:
summary: test
/user:
x-audience: [Public, Global]
post:
summary: test
/post:
get:
summary: test
/order:
x-audience: [Public, Protected]
post:
operationId: storeOrder
callbacks:
x-access: protected`
);
it('should include /user path and remove y parameter', async () => {
const testDocument = parseYamlToDocument(
outdent`
openapi: 3.0.0
paths:
/pet:
x-access: private
get:
parameters:
- $ref: '#/components/parameters/x'
/user:
x-access: public
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-in': { value: 'public', property: 'x-access' } },
}),
});
expect(res.parsed).toMatchInlineSnapshot(`
openapi: 3.0.0
paths:
/user:
x-access: public
get: {}
components:
parameters:
x:
name: x
`);
});
it('should include /order and /post paths', async () => {
const { bundle: res } = await bundleDocument({
document: inputDoc,
externalRefResolver: new BaseResolver(),
config: await makeConfig({
rules: {},
decorators: {
'filter-in': {
property: 'x-audience',
value: ['Public', 'Protected'],
matchStrategy: 'all',
},
},
}),
});
expect(res.parsed).toMatchInlineSnapshot(`
openapi: 3.0.0
paths:
/post:
get:
summary: test
/order:
x-audience:
- Public
- Protected
post:
operationId: storeOrder
callbacks:
x-access: protected
components: {}
`);
});
it('should include all paths', async () => {
const testDoc = parseYamlToDocument(
outdent`
openapi: 3.0.0
paths:
/pet:
x-audience: Global
post:
summary: test
/user:
x-audience: [Public, Global]
post:
summary: test
/order:
x-audience: [Public, Protected]
post:
operationId: storeOrder
parameters:
- name: api_key
`
);
const { bundle: res } = await bundleDocument({
document: testDoc,
externalRefResolver: new BaseResolver(),
config: await makeConfig({
rules: {},
decorators: {
'filter-in': {
property: 'x-audience',
value: ['Public', 'Global'],
matchStrategy: 'any',
},
},
}),
});
expect(res.parsed).toMatchInlineSnapshot(`
openapi: 3.0.0
paths:
/pet:
x-audience: Global
post:
summary: test
/user:
x-audience:
- Public
- Global
post:
summary: test
/order:
x-audience:
- Public
- Protected
post:
operationId: storeOrder
parameters:
- name: api_key
components: {}
`);
});
it('should include path without x-audience property ', async () => {
const { bundle: res } = await bundleDocument({
document: inputDoc,
externalRefResolver: new BaseResolver(),
config: await makeConfig({
rules: {},
decorators: {
'filter-in': {
property: 'x-audience',
value: 'non-existing-audience',
matchStrategy: 'any',
},
},
}),
});
expect(res.parsed).toMatchInlineSnapshot(`
openapi: 3.0.0
paths:
/post:
get:
summary: test
components: {}
`);
});
it('should include /pet and /account without post method', async () => {
const testDoc = parseYamlToDocument(
outdent`
openapi: 3.0.0
paths:
/pet:
x-audience: Global
post:
summary: test
/user:
x-audience: Private
post:
summary: test
get:
summary: get
x-audience: [Public, Global]
/account:
get:
summary: get
post:
summary: test
x-audience: Private
`
);
const { bundle: res } = await bundleDocument({
document: testDoc,
externalRefResolver: new BaseResolver(),
config: await makeConfig({
rules: {},
decorators: {
'filter-in': {
property: 'x-audience',
value: ['Public', 'Global'],
matchStrategy: 'any',
},
},
}),
});
expect(res.parsed).toMatchInlineSnapshot(`
openapi: 3.0.0
paths:
/pet:
x-audience: Global
post:
summary: test
/account:
get:
summary: get
components: {}
`);
});
});
describe('oas2 filter-in', () => {
it('should include only one parameter and not include response', 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: public
format: int32
in: query
name: count
required: false
type: integer
responses:
'200':
description: List of recent media entries.
x-access: [private, protected]
`
);
const { bundle: res } = await bundleDocument({
document: testDoc,
externalRefResolver: new BaseResolver(),
config: await makeConfig({
rules: {},
decorators: {
'filter-in': {
property: 'x-access',
value: ['public', 'global'],
matchStrategy: 'any',
},
},
}),
});
expect(res.parsed).toMatchInlineSnapshot(`
swagger: '2.0'
host: api.instagram.com
paths:
/geographies/{geo-id}/media/recent:
get:
parameters:
- description: Max number of media to return.
x-access: public
format: int32
in: query
name: count
required: false
type: integer
`);
});
});