Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(rulesets): add oas3_1-servers-in-webhook and oas3_1-callbacks-in… #2581

Merged
merged 8 commits into from May 3, 2024
63 changes: 63 additions & 0 deletions docs/reference/openapi-rules.md
Expand Up @@ -920,3 +920,66 @@ servers:
```

In this example, both **`{region}`** and **`{version}`** variables are properly defined and used in the server URL. Also, the default value for **`region`** is within the allowed values.

### oas3_callbacks_in_callbacks

A callback should not be defined within another callback.

**Recommended:** Yes

**Bad Example**

```yaml
paths:
/path:
get:
callbacks:
onData:
/data:
post:
callbacks: ...
```

### oas3_1-servers-in-webhook

Servers should not be defined in a webhook.

**Recommended:** Yes

**Bad Example**

At the path item object level:

```yaml
webhooks:
servers:
- url: https://example.com/
- url: https://example.com/api/
```

or

At the operation level:

```yaml
webhooks:
newPet:
post:
servers:
-url: https://example.com/
```

### oas3_1-callbacks-in-webhook

Callbacks should not be defined in a webhook.

**Recommended:** Yes

**Bad Example**

```yaml
webhooks:
newPet:
post:
callbacks: ...
```
@@ -0,0 +1,33 @@
import { DiagnosticSeverity } from '@stoplight/types';
import testRule from '../../__tests__/__helpers__/tester';

testRule('oas3-callbacks-in-callbacks', [
{
name: 'callbacks defined within a callback',
document: {
openapi: '3.0.0',
paths: {
'/path': {
get: {
callbacks: {
onData: {
'/data': {
post: {
callbacks: {},
},
},
},
},
},
},
},
},
errors: [
{
message: 'Callbacks should not be defined within a callback',
path: ['paths', '/path', 'get', 'callbacks', 'onData', '/data', 'post', 'callbacks'],
severity: DiagnosticSeverity.Warning,
},
],
},
]);
@@ -0,0 +1,25 @@
import { DiagnosticSeverity } from '@stoplight/types';
import testRule from '../../__tests__/__helpers__/tester';

testRule('oas3_1-callbacks-in-webhook', [
{
name: 'callbacks defined in webhook',
document: {
openapi: '3.1.0',
webhooks: {
newPet: {
post: {
callbacks: {},
},
},
},
},
errors: [
{
message: 'Callbacks should not be defined in a webhook.',
path: ['webhooks', 'newPet', 'post', 'callbacks'],
severity: DiagnosticSeverity.Warning,
},
],
},
]);
@@ -0,0 +1,31 @@
import { DiagnosticSeverity } from '@stoplight/types';
import testRule from '../../__tests__/__helpers__/tester';

testRule('oas3_1-servers-in-webhook', [
{
name: 'servers defined in webhook',
document: {
openapi: '3.1.0',
webhooks: {
servers: [],
newPet: {
post: {
servers: [],
},
},
},
},
errors: [
{
message: 'Servers should not be defined in a webhook.',
path: ['webhooks', 'servers'],
severity: DiagnosticSeverity.Warning,
},
{
message: 'Servers should not be defined in a webhook.',
path: ['webhooks', 'newPet', 'post', 'servers'],
severity: DiagnosticSeverity.Warning,
},
],
},
]);
27 changes: 27 additions & 0 deletions packages/rulesets/src/oas/index.ts
Expand Up @@ -707,5 +707,32 @@ const ruleset = {
},
},
},
'oas3-callbacks-in-callbacks': {
message: 'Callbacks should not be defined within a callback',
formats: [oas3],
recommended: true,
given: ['#OperationObject.callbacks[*][*][*].callbacks'],
then: {
function: undefined,
},
},
'oas3_1-servers-in-webhook': {
message: 'Servers should not be defined in a webhook.',
formats: [oas3_1],
recommended: true,
given: ['$.webhooks.servers', '$.webhooks[*][*].servers'],
then: {
function: undefined,
},
},
'oas3_1-callbacks-in-webhook': {
message: 'Callbacks should not be defined in a webhook.',
formats: [oas3_1],
recommended: true,
given: ['$.webhooks[*][*].callbacks'],
then: {
function: undefined,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

are these required?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are you referring to the function: undefined part? That function is checking if callbacks is undefined and if it's not then it'll show the warning.

},
},
},
};