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: add schema tests and official JSON Schema #94

Merged
merged 1 commit into from
Dec 3, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions schemas/v1.0/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# OpenAPI Overlay 1.0.x JSON Schema

Here you can find the JSON Schema for validating Overlays of versions 1.0.x.

As a reminder, the JSON Schema is not the source of truth for the Specification.
In cases of conflicts between the Specification itself and the JSON Schema, the
Specification wins. Also, some Specification constraints cannot be represented
with the JSON Schema so it's highly recommended to employ other methods to
ensure compliance.

The iteration version of the JSON Schema can be found in the `$id` field.
For example, the value of `$id: https://spec.openapis.org/overlay/1.0/schema/2024-10-17` means this iteration was created on October 17, 2024.

## Contributing

To submit improvements to the schema, modify the `schema.yaml` and add test cases for your changes.

The TSC will then:
- Run tests on the updated schema
- Update the iteration version
- Publish the new version

## Tests

The [test suite](../../tests/v1.0) is part of this package.

```bash
npm install
npm test
```

You can also validate a document individually.

```bash
node scripts/validate.mjs path/to/document/to/validate.yaml
```
60 changes: 59 additions & 1 deletion schemas/v1.0/schema.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,63 @@
$id: https://spec.openapis.org/overlay/1.0/schema/WORK-IN-PROGRESS
$schema: https://json-schema.org/draft/2020-12/schema
description: The description of Overlay v1.0.x documents

type: object
properties:
overlay:
type: string
pattern: ^1\.0\.\d+$
info:
$ref: "#/$defs/info-object"
extends:
type: string
format: uri-reference
actions:
type: array
minItems: 1
uniqueItems: true
items:
$ref: "#/$defs/action-object"
required:
- overlay
- info
- actions
$ref: "#/$defs/specification-extensions"
unevaluatedProperties: false
$defs:
info-object:
type: object
properties:
title:
type: string
version:
type: string
required:
- title
- version
$ref: "#/$defs/specification-extensions"
unevaluatedProperties: false
action-object:
properties:
target:
type: string
pattern: ^\$
description:
type: string
update:
type:
- string
- boolean
- object
- array
- number
- "null"
remove:
type: boolean
default: false
required:
- target
$ref: "#/$defs/specification-extensions"
unevaluatedProperties: false
specification-extensions:
patternProperties:
^x-: true
7 changes: 7 additions & 0 deletions tests/v1.0/fail/actions-invalid-description.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
overlay: 1.0.0
info:
title: Actions invalid description
version: 1.0.0
actions:
- target: '$' # Root of document
description: 10
7 changes: 7 additions & 0 deletions tests/v1.0/fail/actions-invalid-target.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
overlay: 1.0.0
info:
title: Invalid `target`, must begin with `$`
version: 1.0.0
actions:
- target: info.description
update: An updated description
5 changes: 5 additions & 0 deletions tests/v1.0/fail/actions-minimal.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
overlay: 1.0.0
info:
title: Minimal actions
version: 1.0.0
actions: []
6 changes: 6 additions & 0 deletions tests/v1.0/fail/actions-missing-target.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
overlay: 1.0.0
info:
title: Missing actions `target`
version: 1.0.0
actions:
- update: my description
5 changes: 5 additions & 0 deletions tests/v1.0/fail/actions-missing.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
overlay: 1.0.0
info:
title: Missing `actions`
version: 1.0.0
extends: '/openapi.yaml'
9 changes: 9 additions & 0 deletions tests/v1.0/fail/actions-not-unique.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
overlay: 1.0.0
info:
title: Actions not unique
version: 1.0.0
actions:
- target: '$.info.title'
update: 'My New title'
- target: '$.info.title'
update: 'My New title'
7 changes: 7 additions & 0 deletions tests/v1.0/fail/extends-invalid-type.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
overlay: 1.0.0
info:
title: Invalid `extends` type
version: 1.0.0
extends: {}
actions:
- target: '$' # Root of document
5 changes: 5 additions & 0 deletions tests/v1.0/fail/info-missing-title.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
overlay: 1.0.0
info:
version: 1.0.0
actions:
- target: '$' # Root of document
5 changes: 5 additions & 0 deletions tests/v1.0/fail/info-missing-version.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
overlay: 1.0.0
info:
title: Missing Info version
actions:
- target: '$' # Root of document
6 changes: 6 additions & 0 deletions tests/v1.0/fail/invalid-overlay-version.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
overlay: 2
info:
title: Invalid Overlay version
version: 1.0.0
actions:
- target: '$' # Root of document
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,5 @@ actions:
update:
name: newParam
in: query
schema:
type: string
7 changes: 7 additions & 0 deletions tests/v1.0/pass/actions-description.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
overlay: 1.0.0
info:
title: Actions Description
version: 1.0.0
actions:
- target: '$' # Root of document
description: this is an action description
7 changes: 7 additions & 0 deletions tests/v1.0/pass/actions-extensions.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
overlay: 1.0.0
info:
title: Actions Extensions
version: 1.0.0
actions:
- target: '$' # Root of document
x-myActionsExtension: {}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ overlay: 1.0.0
info:
title: Structured Overlay
version: 1.0.0
extends: '/openapi.yaml'
actions:
- target: '$' # Root of document
update:
Expand All @@ -18,4 +19,4 @@ actions:
summary: 'Retrieve a list of pets'
x-rate-limit: 100
components:
tags:
tags: []
12 changes: 12 additions & 0 deletions tests/v1.0/pass/actions-update-with-remove.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
overlay: 1.0.0
info:
title: Actions Remove and Update defined
version: 1.0.0
actions:
- target: $.paths.*.get.parameters
update:
name: newParam
in: query
schema:
type: string
remove: true
7 changes: 7 additions & 0 deletions tests/v1.0/pass/info-extensions.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
overlay: 1.0.0
info:
title: Info Extensions
version: 1.0.0
x-myInfoExtension: {}
actions:
- target: '$' # Root of document
7 changes: 7 additions & 0 deletions tests/v1.0/pass/root-extensions.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
overlay: 1.0.0
info:
title: Root Extensions
version: 1.0.0
actions:
- target: '$' # Root of document
x-myExtension: {}