Skip to content

Commit

Permalink
feat(test): add schema tests and schema
Browse files Browse the repository at this point in the history
* fixup `target` json path
  • Loading branch information
jeremyfiel committed Nov 12, 2024
1 parent 413fe0d commit 4b9a9d2
Show file tree
Hide file tree
Showing 23 changed files with 207 additions and 2 deletions.
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
```
71 changes: 70 additions & 1 deletion schemas/v1.0/schema.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,74 @@
$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
allOf:
- if:
properties:
remove:
const: true
required:
- remove
then:
not:
required:
- update
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-no-update-with-remove.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
overlay: 1.0.0
info:
title: No `update` with `remove`
version: 1.0.0
actions:
- target: $.info
update:
description: An updated description
remove: true
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
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: []
File renamed without changes.
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: {}

0 comments on commit 4b9a9d2

Please sign in to comment.