ft: JsonSchema components are now ImmutableJS compliant (#5952)

bug: JsonSchema components should validate schema properties exists
  - schema
  - type
  - format
  - enum
bug: fix a debounce error in JsonSchema_string if value is null
ft: new simplified JsonSchemaArrayItemText component
test: use immutableJS for `json-schema-form` test
test: add dev scripts to run `cypress open`
test: new cypress `schema-form` tests
This commit is contained in:
Tim Lai
2020-05-06 13:57:58 -07:00
committed by GitHub
parent b38203e21a
commit 5eb23cdd48
9 changed files with 1508 additions and 113 deletions

View File

@@ -0,0 +1,339 @@
openapi: 3.0.0
info:
title: "Schema in Parameters"
description: |-
This document has examples for examining the `schema` within a set of parameters
* String Enum (/pet/findByStatus)
* Array of Strings (/pet/findByTags)
* Array of Boolean (/petOwner/listOfServiceTrainer)
* Array of Objects (/petOwners/createWithList)
* Array of Enum (/petOwner/findByPreference)
This document also covers a debounce test for `schema` type `string
* String (/petOwner)
This documents does not cover:
* Array of Arrays
Additional notes
* Provides additional coverage and examples not covered in the Multiple Examples Core Document (Test)
* Code component reference `JsonSchemaForm`
* `pet` and `tag` schemas are reduced from Swagger Petstore
version: "1.0.0"
paths:
/pet/findByStatus:
get:
summary: Finds Pets by status
description: Multiple status values can be provided with comma separated strings
operationId: findPetsByStatus
parameters:
- name: status
in: query
description: Status values that need to be considered for filter
required: false
explode: true
schema:
type: string
enum:
- available
- pending
- sold
default: available
responses:
'200':
description: successful operation
content:
application/xml:
schema:
type: array
items:
$ref: '#/components/schemas/Pet'
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Pet'
'400':
description: Invalid status value
security:
- petstore_auth:
- 'write:pets'
- 'read:pets'
/pet/findByTags:
get:
tags:
- pet
summary: Finds Pets by tags
description: >-
Multiple tags can be provided with comma separated strings. Use tag1,
tag2, tag3 for testing.
operationId: findPetsByTags
parameters:
- name: tags
in: query
description: Tags to filter by
required: false
explode: true
schema:
type: array
items:
type: string
responses:
'200':
description: successful operation
content:
application/xml:
schema:
type: array
items:
$ref: '#/components/schemas/Pet'
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Pet'
'400':
description: Invalid tag value
security:
- petstore_auth:
- 'write:pets'
- 'read:pets'
'/petOwner/{petOwnerId}':
get:
tags:
- petOwner
summary: Find pet owner by ID
description: Returns a single pet owner if ID found, list if no ID provided
operationId: getPetOwnerById
parameters:
- name: petOwnerId
in: path
description: ID of pet owner to return
required: false
schema:
type: integer
format: int64
responses:
'200':
description: successful operation
content:
application/xml:
schema:
$ref: '#/components/schemas/PetOwner'
application/json:
schema:
$ref: '#/components/schemas/PetOwner'
'400':
description: Invalid ID supplied
'404':
description: Pet not found
/petOwner/listOfServiceTrainer:
get:
tags:
- petOwner
summary: List of Service Trainers
description: >-
Expect boolean, but allow both true and false
operationId: listOfServiceTrainer
parameters:
- name: tags
in: query
description: Boolean to filter by
required: false
explode: true
schema:
type: array
items:
type: boolean
responses:
'200':
description: successful operation
content:
application/xml:
schema:
type: array
items:
$ref: '#/components/schemas/PetOwner'
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/PetOwner'
'400':
description: Invalid tag value
/petOwner/findByPreference:
get:
tags:
- petOwner
summary: Find by Pet Owner Preferences
description: >-
Expect enum
operationId: findByPreference
parameters:
- name: tags
in: query
description: Enum to filter by
required: false
explode: true
schema:
type: array
items:
type: string
enum:
- dog
- cat
- bird
- fish
- other
default: dog
responses:
'200':
description: successful operation
content:
application/xml:
schema:
type: array
items:
$ref: '#/components/schemas/PetOwner'
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/PetOwner'
'400':
description: Invalid tag value
components:
/petOwner/createWithList:
post:
tags:
- petOwner
summary: Creates list of pet owners with given input array
operationId: petOwnerCreateWithList
requestBody:
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/PetOwner'
responses:
'200':
description: successful operation
content:
application/xml:
schema:
type: array
items:
$ref: '#/components/schemas/PetOwner'
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/PetOwner'
'400':
description: Invalid values
schemas:
Pet:
x-swagger-router-model: io.swagger.petstore.model.Pet
required:
- name
- photoUrls
properties:
id:
type: integer
format: int64
example: 10
name:
type: string
example: doggie
# remove category property
petOwners:
type: array
items:
$ref: '#/components/schemas/PetOwner'
photoUrls:
type: array
xml:
wrapped: true
items:
type: string
xml:
name: photoUrl
tags:
type: array
xml:
wrapped: true
items:
$ref: '#/components/schemas/Tag'
xml:
name: tag
status:
type: string
description: pet status in the store
enum:
- available
- pending
- sold
xml:
name: pet
type: object
# remove ApiResponse
PetOwner:
type: "object"
properties:
id:
type: "integer"
format: "int64"
example: 10
petId:
type: "integer"
format: "int64"
example: 201
petOwnerFirstName:
type: "string"
example: "John"
petOwnerLastName:
type: "string"
example: "Smith"
petOwnerContact:
type: "string"
example: "john.smith@fakeemail.co"
petOwnerStatus:
type: "integer"
format: "int32"
description: "Pet Owner Status"
example: 302
petOwnerPreferences:
type: "string"
description: "Pet Owner Preferred Pet Types"
enum:
- "dog"
- "cat"
- "bird"
- "fish"
- "other"
petOwnerServiceTrainer:
type: "boolean"
description: "Pet Onwer is Service Trainer"
default: false
Tag:
x-swagger-router-model: io.swagger.petstore.model.Tag
properties:
id:
type: integer
format: int64
name:
type: string
xml:
name: tag
type: object
requestBodies:
Pet:
content:
application/json:
schema:
$ref: '#/components/schemas/Pet'
application/xml:
schema:
$ref: '#/components/schemas/Pet'
description: Pet object that needs to be added to the store

View File

@@ -0,0 +1,119 @@
openapi: 3.0.0
info:
description: No type for schema
version: "1"
title: "No type"
paths:
/case-one-no-schema:
parameters:
- name: namespace
description: The custom resource's namespace
# schema:
in: path
required: true
get:
description: sf
responses:
default:
description: one
/case-one-no-type-or-format:
parameters:
- name: namespace
description: The custom resource's namespace
schema:
in: path
required: true
get:
description: sf
responses:
default:
description: one
/case-one-type-only-no-format:
parameters:
- name: namespace
description: The custom resource's namespace
schema:
type: integer
in: path
required: true
get:
description: sf
responses:
default:
description: one
/case-one-format-only-no-type:
parameters:
- name: namespace
description: The custom resource's namespace
schema:
format: int64
in: path
required: true
get:
description: sf
responses:
default:
description: one
/case-two-no-schema:
get:
description: sf
responses:
default:
description: one
parameters:
- name: namespace
in: path
description: The custom resource's namespace
required: true
# schema:
/case-two-no-type-or-format:
get:
description: sf
responses:
default:
description: one
parameters:
- name: namespace
in: path
description: The custom resource's namespace
required: true
schema:
/case-two-type-only-no-format:
get:
description: sf
responses:
default:
description: one
parameters:
- name: namespace
in: path
description: The custom resource's namespace
required: true
schema:
type: integer
/case-two-format-only-no-type:
get:
description: sf
responses:
default:
description: one
parameters:
- name: namespace
in: path
description: The custom resource's namespace
required: true
schema:
format: int64
/case-two-not-a-real-type:
get:
description: sf
responses:
default:
description: one
parameters:
- name: namespace
in: path
description: The custom resource's namespace
required: true
schema:
type: "NotARealType"

View File

@@ -0,0 +1,879 @@
/**
* @prettier
*/
describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
describe("incomplete API definition with missing schema key or schema value(s)", () => {
describe("parameter exists as global", () => {
it("should render when parameter exists as global, but missing schema key", () => {
cy.visit(
"/?url=/documents/features/schema-form-missing-values.yaml"
)
.get("#operations-default-get_case_one_no_schema")
.click()
.get(".opblock-description .renderedMarkdown p")
.should("have.text", "sf")
})
it("should render when parameter exists as global, but missing all schema values", () => {
cy.visit(
"/?url=/documents/features/schema-form-missing-values.yaml"
)
.get("#operations-default-get_case_one_no_type_or_format")
.click()
.get(".opblock-description .renderedMarkdown p")
.should("have.text", "sf")
})
it("should render when parameter exists as global, schema key exists, but missing schema values: format", () => {
cy.visit(
"/?url=/documents/features/schema-form-missing-values.yaml"
)
.get("#operations-default-get_case_one_format_only_no_type")
.click()
.get(".opblock-description .renderedMarkdown p")
.should("have.text", "sf")
})
it("should render when parameter exists as global, schema key exists, but missing schema value: type", () => {
cy.visit(
"/?url=/documents/features/schema-form-missing-values.yaml"
)
.get("#operations-default-get_case_one_type_only_no_format")
.click()
.get(".opblock-description .renderedMarkdown p")
.should("have.text", "sf")
})
})
describe("parameter exists in method", () => {
it("should render when parameter exists in method, but missing schema key", () => {
cy.visit(
"/?url=/documents/features/schema-form-missing-values.yaml"
)
.get("#operations-default-get_case_two_no_schema")
.click()
.get(".opblock-description .renderedMarkdown p")
.should("have.text", "sf")
})
it("should render when parameter exists in method, schema key exists, but missing all schema values", () => {
cy.visit(
"/?url=/documents/features/schema-form-missing-values.yaml"
)
.get("#operations-default-get_case_two_no_type_or_format")
.click()
.get(".opblock-description .renderedMarkdown p")
.should("have.text", "sf")
})
it("should render when parameter exists in method, schema key exists, but missing schema value: format", () => {
cy.visit(
"/?url=/documents/features/schema-form-missing-values.yaml"
)
.get("#operations-default-get_case_one_type_only_no_format")
.click()
.get(".opblock-description .renderedMarkdown p")
.should("have.text", "sf")
})
it("should render when parameter exists in method, schema key exists, but missing schema value: type", () => {
cy.visit(
"/?url=/documents/features/schema-form-missing-values.yaml"
)
.get("#operations-default-get_case_one_format_only_no_type")
.click()
.get(".opblock-description .renderedMarkdown p")
.should("have.text", "sf")
})
})
})
describe("/Array", () => {
describe("in a Parameter", () => {
it("should allow modification of values in Try-It-Out", () => {
cy.visit(
"/?url=/documents/features/multiple-examples-core.openapi.yaml"
)
.get("#operations-default-post_Array")
.click()
// Expand Try It Out
.get(".try-out__btn")
.click()
.get(".parameters-col_description .examples-select > select")
.select("ArrayExampleB")
// Add a new item
.get(".json-schema-form-item-add")
.click()
.get(".json-schema-form-item:last-of-type > input")
.type("5")
// Assert against the input fields
.get(".json-schema-form-item > input")
.then(inputs => {
expect(inputs.map((i, el) => el.value).toArray()).to.deep.equal([
"1",
"2",
"3",
"4",
"5",
])
})
.get(".parameters-col_description .examples-select > select")
.find(":selected")
.should("have.text", "[Modified value]")
})
it("should allow removal of added value in Try-It-Out", () => {
cy.visit(
"/?url=/documents/features/multiple-examples-core.openapi.yaml"
)
.get("#operations-default-post_Array")
.click()
// Expand Try It Out
.get(".try-out__btn")
.click()
.get(".parameters-col_description .examples-select > select")
.select("ArrayExampleB")
// Add a new item
.get(".json-schema-form-item-add")
.click()
.get(".json-schema-form-item:last-of-type > input")
.type("5")
// Assert against the input fields
.get(".json-schema-form-item > input")
.then(inputs => {
expect(inputs.map((i, el) => el.value).toArray()).to.deep.equal([
"1",
"2",
"3",
"4",
"5",
])
})
.get(".parameters-col_description .examples-select > select")
.find(":selected")
.should("have.text", "[Modified value]")
// Remove the last item that was just added
.get(".json-schema-form-item:last-of-type > .json-schema-form-item-remove")
.click()
.get(".json-schema-form-item > input")
.then(inputs => {
expect(inputs.map((i, el) => el.value).toArray()).to.deep.equal([
"1",
"2",
"3",
"4",
])
})
})
it("should allow removal of nth of values in Try-It-Out", () => {
cy.visit(
"/?url=/documents/features/multiple-examples-core.openapi.yaml"
)
.get("#operations-default-post_Array")
.click()
// Expand Try It Out
.get(".try-out__btn")
.click()
.get(".parameters-col_description .examples-select > select")
.select("ArrayExampleB")
// Add a new item
.get(".json-schema-form-item-add")
.click()
.get(".json-schema-form-item:last-of-type > input")
.type("5")
// Assert against the input fields
.get(".json-schema-form-item > input")
.then(inputs => {
expect(inputs.map((i, el) => el.value).toArray()).to.deep.equal([
"1",
"2",
"3",
"4",
"5",
])
})
.get(".parameters-col_description .examples-select > select")
.find(":selected")
.should("have.text", "[Modified value]")
// Remove the second item in list
.get(".json-schema-form-item:nth-child(2) > .json-schema-form-item-remove")
.click()
.get(".json-schema-form-item > input")
.then(inputs => {
expect(inputs.map((i, el) => el.value).toArray()).to.deep.equal([
"1",
"3",
"4",
"5"
])
})
})
it("should allow execution of operation in Try-It-Out", () => {
cy.visit(
"/?url=/documents/features/multiple-examples-core.openapi.yaml"
)
.get("#operations-default-post_Array")
.click()
// Expand Try It Out
.get(".try-out__btn")
.click()
.get(".parameters-col_description .examples-select > select")
.select("ArrayExampleB")
// Execute
.get(".execute.opblock-control__btn")
.click()
// Expect new element to be visible after Execute
.get(".btn-clear.opblock-control__btn")
.should("have.text", "Clear")
})
it("should add empty item and allow execution of operation in Try-It-Out", () => {
cy.visit(
"/?url=/documents/features/multiple-examples-core.openapi.yaml"
)
.get("#operations-default-post_Array")
.click()
// Expand Try It Out
.get(".try-out__btn")
.click()
.get(".parameters-col_description .examples-select > select")
.select("ArrayExampleB")
// Add a new item
.get(".json-schema-form-item-add")
.click()
// Execute without prior typing a value
.get(".execute.opblock-control__btn")
.click()
// Expect new element to be visible after Execute
.get(".btn-clear.opblock-control__btn")
.should("have.text", "Clear")
})
})
})
describe("Petstore", () => {
describe("/pet/findByStatus", () => {
it("should render the operation, execute with default value", () => {
cy.visit(
"/?url=/documents/features/schema-form-core.yaml"
)
.get("#operations-default-findPetsByStatus")
.click()
// Expand operation
.get(".opblock-title span")
.should("have.text", "Parameters")
// Expand Try It Out
.get(".try-out__btn")
.click()
// Execute
.get(".execute.opblock-control__btn")
.click()
// Expect new element to be visible after Execute
.get(".btn-clear.opblock-control__btn")
.should("have.text", "Clear")
// Compare Request URL
.get(".request-url pre.microlight")
.should("contain.text", "available")
})
it("should render the operation, modify value, and execute with modfied value", () => {
cy.visit(
"/?url=/documents/features/schema-form-core.yaml"
)
.get("#operations-default-findPetsByStatus")
.click()
// Expand operation
.get(".opblock-title span")
.should("have.text", "Parameters")
// Expand Try It Out
.get(".try-out__btn")
.click()
// Select
.get(".parameters-col_description > select")
.select("pending")
// Execute
.get(".execute.opblock-control__btn")
.click()
// Expect new element to be visible after Execute
.get(".btn-clear.opblock-control__btn")
.should("have.text", "Clear")
// Compare Request URL
.get(".request-url pre.microlight")
.should("contain.text", "pending")
})
})
describe("/pet/findByTags", () => {
it("should allow modification of values in Try-It-Out", () => {
cy.visit(
"/?url=/documents/features/schema-form-core.yaml"
)
.get("#operations-pet-findPetsByTags")
.click()
// Expand Try It Out
.get(".try-out__btn")
.click()
// Add a new item
.get(".json-schema-form-item-add")
.click()
.get(".json-schema-form-item > input")
.type("spotted")
// Assert against the input fields
.get(".json-schema-form-item > input")
.then(inputs => {
expect(inputs.map((i, el) => el.value).toArray()).to.deep.equal([
"spotted",
])
})
})
it("should allow removal of added value in Try-It-Out", () => {
cy.visit(
"/?url=/documents/features/schema-form-core.yaml"
)
.get("#operations-pet-findPetsByTags")
.click()
// Expand Try It Out
.get(".try-out__btn")
.click()
// Add a new item
.get(".json-schema-form-item-add")
.click()
.get(".json-schema-form-item:last-of-type > input")
.type("spotted")
// Assert against the input fields
.get(".json-schema-form-item > input")
.then(inputs => {
expect(inputs.map((i, el) => el.value).toArray()).to.deep.equal([
"spotted",
])
})
// Remove the last item that was just added
.get(".json-schema-form-item:last-of-type > .json-schema-form-item-remove")
.click()
.get(".json-schema-form-item > input")
.should("not.exist")
})
it("should allow removal of nth of values in Try-It-Out", () => {
cy.visit(
"/?url=/documents/features/schema-form-core.yaml"
)
.get("#operations-pet-findPetsByTags")
.click()
// Expand Try It Out
.get(".try-out__btn")
.click()
// Add a new item
.get(".json-schema-form-item-add")
.click()
.get(".json-schema-form-item:last-of-type > input")
.type("spotted")
// Assert against the input fields
.get(".json-schema-form-item > input")
.then(inputs => {
expect(inputs.map((i, el) => el.value).toArray()).to.deep.equal([
"spotted",
])
})
// Add a 2nd new item
.get(".json-schema-form-item-add")
.click()
.get(".json-schema-form-item:last-of-type > input")
.type("large")
// Assert against the input fields
.get(".json-schema-form-item > input")
.then(inputs => {
expect(inputs.map((i, el) => el.value).toArray()).to.deep.equal([
"spotted",
"large"
])
})
// Add a 3rd new item
.get(".json-schema-form-item-add")
.click()
.get(".json-schema-form-item:last-of-type > input")
.type("puppy")
// Assert against the input fields
.get(".json-schema-form-item > input")
.then(inputs => {
expect(inputs.map((i, el) => el.value).toArray()).to.deep.equal([
"spotted",
"large",
"puppy"
])
})
// Remove the second item in list
.get(".json-schema-form-item:nth-child(2) > .json-schema-form-item-remove")
.click()
.get(".json-schema-form-item > input")
.then(inputs => {
expect(inputs.map((i, el) => el.value).toArray()).to.deep.equal([
"spotted",
"puppy"
])
})
})
it("should allow execution of operation without modifications in Try-It-Out (debounce)", () => {
cy.visit(
"/?url=/documents/features/schema-form-core.yaml"
)
.get("#operations-pet-findPetsByTags")
.click()
// Expand Try It Out
.get(".try-out__btn")
.click()
// Execute
.get(".execute.opblock-control__btn")
.click()
// Expect new element to be visible after Execute
.get(".btn-clear.opblock-control__btn")
.should("have.text", "Clear")
// Compare Request URL
.get(".request-url pre.microlight")
.should("contain.text", "findByTags")
})
it("should add empty item and allow execution of operation in Try-It-Out (debounce)", () => {
cy.visit(
"/?url=/documents/features/schema-form-core.yaml"
)
.get("#operations-pet-findPetsByTags")
.click()
// Expand Try It Out
.get(".try-out__btn")
.click()
// Add a new item
.get(".json-schema-form-item-add")
.click()
// Execute without prior typing a value
.get(".execute.opblock-control__btn")
.click()
// Expect new element to be visible after Execute
.get(".btn-clear.opblock-control__btn")
.should("have.text", "Clear")
// Compare Request URL
.get(".request-url pre.microlight")
.should("contain.text", "findByTags")
})
it("should add modified item and allow execution of operation in Try-It-Out", () => {
cy.visit(
"/?url=/documents/features/schema-form-core.yaml"
)
.get("#operations-pet-findPetsByTags")
.click()
// Expand Try It Out
.get(".try-out__btn")
.click()
// Add a new item
.get(".json-schema-form-item-add")
.click()
.get(".json-schema-form-item > input")
.type("spotted")
// Assert against the input fields
.get(".json-schema-form-item > input")
.then(inputs => {
expect(inputs.map((i, el) => el.value).toArray()).to.deep.equal([
"spotted",
])
})
// Execute
.get(".execute.opblock-control__btn")
.click()
// Expect new element to be visible after Execute
.get(".btn-clear.opblock-control__btn")
.should("have.text", "Clear")
// Compare Request URL
.get(".request-url pre.microlight")
.should("contain.text", "spotted")
})
it("should add 3 modified items, remove the middle child, and allow execution of operation Try-It-Out", () => {
cy.visit(
"/?url=/documents/features/schema-form-core.yaml"
)
.get("#operations-pet-findPetsByTags")
.click()
// Expand Try It Out
.get(".try-out__btn")
.click()
// Add a new item
.get(".json-schema-form-item-add")
.click()
.get(".json-schema-form-item:last-of-type > input")
.type("spotted")
// Assert against the input fields
.get(".json-schema-form-item > input")
.then(inputs => {
expect(inputs.map((i, el) => el.value).toArray()).to.deep.equal([
"spotted",
])
})
// Add a 2nd new item
.get(".json-schema-form-item-add")
.click()
.get(".json-schema-form-item:last-of-type > input")
.type("large")
// Assert against the input fields
.get(".json-schema-form-item > input")
.then(inputs => {
expect(inputs.map((i, el) => el.value).toArray()).to.deep.equal([
"spotted",
"large"
])
})
// Add a 3rd new item
.get(".json-schema-form-item-add")
.click()
.get(".json-schema-form-item:last-of-type > input")
.type("puppy")
// Assert against the input fields
.get(".json-schema-form-item > input")
.then(inputs => {
expect(inputs.map((i, el) => el.value).toArray()).to.deep.equal([
"spotted",
"large",
"puppy"
])
})
// Remove the second item in list
.get(".json-schema-form-item:nth-child(2) > .json-schema-form-item-remove")
.click()
.get(".json-schema-form-item > input")
.then(inputs => {
expect(inputs.map((i, el) => el.value).toArray()).to.deep.equal([
"spotted",
"puppy"
])
})
// Execute
.get(".execute.opblock-control__btn")
.click()
// Expect new element to be visible after Execute
.get(".btn-clear.opblock-control__btn")
.should("have.text", "Clear")
// Compare Request URL
.get(".request-url pre.microlight")
.should("contain.text", "tags=spotted&tags=puppy")
.should("not.have.text", "large")
})
})
describe("/petOwner/{petOwnerId}", () => {
// This is a (GET) debounce test for schema type: string
it("should render the operation, and allow execute of operation with empty value (debounce)", () => {
cy.visit(
"/?url=/documents/features/schema-form-core.yaml"
)
.get("#operations-petOwner-getPetOwnerById")
.click()
// Expand operation
.get(".opblock-title span")
.should("have.text", "Parameters")
// Expand Try It Out
.get(".try-out__btn")
.click()
// Execute
.get(".execute.opblock-control__btn")
.click()
// Expect new element to be visible after Execute
.get(".btn-clear.opblock-control__btn")
.should("have.text", "Clear")
// Compare Request URL
.get(".request-url pre.microlight")
.should("contain.text", "petOwner")
})
it("should render the operation, and input field, and allow execute of operation", () => {
cy.visit(
"/?url=/documents/features/schema-form-core.yaml"
)
.get("#operations-petOwner-getPetOwnerById")
.click()
// Expand operation
.get(".opblock-title span")
.should("have.text", "Parameters")
// Expand Try It Out
.get(".try-out__btn")
.click()
.get(".parameters-col_description > input")
.type("123")
// Execute
.get(".execute.opblock-control__btn")
.click()
// Expect new element to be visible after Execute
.get(".btn-clear.opblock-control__btn")
.should("have.text", "Clear")
// Compare Request URL
.get(".request-url pre.microlight")
.should("contain.text", "petOwner")
.should("contain.text", "123")
})
})
describe("/petOwner/listOfServiceTrainer", () => {
it("should allow execution of operation with value=true in Try-It-Out", () => {
cy.visit(
"/?url=/documents/features/schema-form-core.yaml"
)
.get("#operations-petOwner-listOfServiceTrainer")
.click()
// Expand Try It Out
.get(".try-out__btn")
.click()
// add 1st item
.get(".json-schema-form-item-add")
.click()
.get(".json-schema-form-item > select")
.select("true")
// Execute
.get(".execute.opblock-control__btn")
.click()
// Expect new element to be visible after Execute
.get(".btn-clear.opblock-control__btn")
.should("have.text", "Clear")
// Compare Request URL
.get(".request-url pre.microlight")
.should("contain.text", "tags=true")
})
it("should allow execution of operation with value=false in Try-It-Out", () => {
cy.visit(
"/?url=/documents/features/schema-form-core.yaml"
)
.get("#operations-petOwner-listOfServiceTrainer")
.click()
// Expand Try It Out
.get(".try-out__btn")
.click()
// add 1st item
.get(".json-schema-form-item-add")
.click()
.get(".json-schema-form-item > select")
.select("false")
// Execute
.get(".execute.opblock-control__btn")
.click()
// Expect new element to be visible after Execute
.get(".btn-clear.opblock-control__btn")
.should("have.text", "Clear")
// Compare Request URL
.get(".request-url pre.microlight")
.should("contain.text", "tags=false")
})
it("should allow execution of operation with value=true&value=false in Try-It-Out", () => {
cy.visit(
"/?url=/documents/features/schema-form-core.yaml"
)
.get("#operations-petOwner-listOfServiceTrainer")
.click()
// Expand Try It Out
.get(".try-out__btn")
.click()
// add 1st item
.get(".json-schema-form-item-add")
.click()
.get(".json-schema-form-item > select")
.select("true")
// add 2nd item
.get(".json-schema-form-item-add")
.click()
.get(".json-schema-form-item:last-of-type > select")
.select("false")
// Execute
.get(".execute.opblock-control__btn")
.click()
// Expect new element to be visible after Execute
.get(".btn-clear.opblock-control__btn")
.should("have.text", "Clear")
// Compare Request URL
.get(".request-url pre.microlight")
.should("contain.text", "tags=true&tags=false")
})
it("should allow execution of operation with value=false after removing value=true in Try-It-Out", () => {
cy.visit(
"/?url=/documents/features/schema-form-core.yaml"
)
.get("#operations-petOwner-listOfServiceTrainer")
.click()
// Expand Try It Out
.get(".try-out__btn")
.click()
// add 1st item
.get(".json-schema-form-item-add")
.click()
.get(".json-schema-form-item > select")
.select("true")
// add 2nd item
.get(".json-schema-form-item-add")
.click()
.get(".json-schema-form-item:last-of-type > select")
.select("false")
// remove 1st item
.get(".json-schema-form-item:nth-child(1) > .json-schema-form-item-remove")
.click()
// Execute
.get(".execute.opblock-control__btn")
.click()
// Expect new element to be visible after Execute
.get(".btn-clear.opblock-control__btn")
.should("have.text", "Clear")
// Compare Request URL
.get(".request-url pre.microlight")
.should("contain.text", "tags=false")
})
it("should allow execution of operation with value=(empty) in Try-It-Out", () => {
cy.visit(
"/?url=/documents/features/schema-form-core.yaml"
)
.get("#operations-petOwner-listOfServiceTrainer")
.click()
// Expand Try It Out
.get(".try-out__btn")
.click()
// Execute
.get(".execute.opblock-control__btn")
.click()
// Expect new element to be visible after Execute
.get(".btn-clear.opblock-control__btn")
.should("have.text", "Clear")
// Compare Request URL
.get(".request-url pre.microlight")
.should("contain.text", "listOfServiceTrainer")
})
})
describe("/petOwner/findByPreference", () => {
it("should allow execution of operation with value=(empty) in Try-It-Out", () => {
cy.visit(
"/?url=/documents/features/schema-form-core.yaml"
)
.get("#operations-petOwner-findByPreference")
.click()
// Expand Try It Out
.get(".try-out__btn")
.click()
// Execute
.get(".execute.opblock-control__btn")
.click()
// Expect new element to be visible after Execute
.get(".btn-clear.opblock-control__btn")
.should("have.text", "Clear")
// Compare Request URL
.get(".request-url pre.microlight")
.should("contain.text", "findByPreference")
})
it("should allow execution of operation with selected value in Try-It-Out", () => {
cy.visit(
"/?url=/documents/features/schema-form-core.yaml"
)
.get("#operations-petOwner-findByPreference")
.click()
// Expand Try It Out
.get(".try-out__btn")
.click()
// Select
.get(".parameters-col_description > select")
.select("dog")
// Execute
.get(".execute.opblock-control__btn")
.click()
// Expect new element to be visible after Execute
.get(".btn-clear.opblock-control__btn")
.should("have.text", "Clear")
// Compare Request URL
.get(".request-url pre.microlight")
.should("contain.text", "findByPreference")
.should("contain.text", "dog")
})
it("should allow execution of operation with multiple selected values in Try-It-Out", () => {
cy.visit(
"/?url=/documents/features/schema-form-core.yaml"
)
.get("#operations-petOwner-findByPreference")
.click()
// Expand Try It Out
.get(".try-out__btn")
.click()
// Select
.get(".parameters-col_description > select")
.select(["dog", "cat"])
// Execute
.get(".execute.opblock-control__btn")
.click()
// Expect new element to be visible after Execute
.get(".btn-clear.opblock-control__btn")
.should("have.text", "Clear")
// Compare Request URL
.get(".request-url pre.microlight")
.should("contain.text", "findByPreference")
.should("contain.text", "dog")
.should("contain.text", "cat")
})
})
describe("/petOwner/createWithList", () => {
it("should allow execution of operation with default text in textArea in Try-It-Out", () => {
cy.visit(
"/?url=/documents/features/schema-form-core.yaml"
)
.get("#operations-petOwner-petOwnerCreateWithList")
.click()
// Expand Try It Out
.get(".try-out__btn")
.click()
// Execute
.get(".execute.opblock-control__btn")
.click()
// Expect new element to be visible after Execute
.get(".btn-clear.opblock-control__btn")
.should("have.text", "Clear")
// Compare Request URL
.get(".request-url pre.microlight")
.should("contain.text", "createWithList")
})
it("should allow execution of operation with cleared textArea in Try-It-Out", () => {
cy.visit(
"/?url=/documents/features/schema-form-core.yaml"
)
.get("#operations-petOwner-petOwnerCreateWithList")
.click()
// Expand Try It Out
.get(".try-out__btn")
.click()
.get(".body-param__text")
.clear()
// Execute
.get(".execute.opblock-control__btn")
.click()
// Expect new element to be visible after Execute
.get(".btn-clear.opblock-control__btn")
.should("have.text", "Clear")
// Compare Request URL
.get(".request-url pre.microlight")
.should("contain.text", "createWithList")
})
it("should allow execution of operation with modified textArea in Try-It-Out", () => {
cy.visit(
"/?url=/documents/features/schema-form-core.yaml"
)
.get("#operations-petOwner-petOwnerCreateWithList")
.click()
// Expand Try It Out
.get(".try-out__btn")
.click()
.get(".body-param__text")
.clear()
// note: adding this much type adds 6+ seconds to test
.type(`[
{
"id": 10,
"petId": 201,
"petOwnerFirstName": "John",
},
{
"id": 11,
"petId": 201,
"petOwnerFirstName": "Jane",
}
]`
)
.should("contain.text", "Jane")
.should("contain.text", "201")
// Execute
.get(".execute.opblock-control__btn")
.click()
// Expect new element to be visible after Execute
.get(".btn-clear.opblock-control__btn")
.should("have.text", "Clear")
// Compare Request URL
.get(".request-url pre.microlight")
.should("contain.text", "createWithList")
// Compare Curl
.get(".curl")
.should("contain.text", "Jane")
.should("contain.text", "201")
})
})
})
})

View File

@@ -1,6 +1,6 @@
/* eslint-env mocha */
import React from "react"
import { List } from "immutable"
import Immutable, { List } from "immutable"
import expect, { createSpy } from "expect"
import { Select, Input, TextArea } from "components/layout-utils"
import { mount, render } from "enzyme"
@@ -25,10 +25,10 @@ describe("<JsonSchemaForm/>", function(){
onChange: () => {},
keyName: "",
fn: {},
schema: {
schema: Immutable.fromJS({
type: "string",
enum: ["one", "two"]
}
})
}
let wrapper = render(<JsonSchemaForm {...props}/>)
@@ -48,10 +48,10 @@ describe("<JsonSchemaForm/>", function(){
onChange: () => {},
keyName: "",
fn: {},
schema: {
schema: Immutable.fromJS({
type: "string",
enum: ["one", "two"]
},
}),
disabled: true
}
@@ -70,10 +70,10 @@ describe("<JsonSchemaForm/>", function(){
keyName: "",
fn: {},
required: true,
schema: {
schema: Immutable.fromJS({
type: "string",
enum: ["one", "two"]
}
})
}
let wrapper = render(<JsonSchemaForm {...props}/>)
@@ -93,9 +93,9 @@ describe("<JsonSchemaForm/>", function(){
onChange: () => {},
keyName: "",
fn: {},
schema: {
schema: Immutable.fromJS({
type: "boolean"
}
})
}
let wrapper = render(<JsonSchemaForm {...props}/>)
@@ -116,10 +116,10 @@ describe("<JsonSchemaForm/>", function(){
onChange: () => {},
keyName: "",
fn: {},
schema: {
schema: Immutable.fromJS({
type: "boolean",
enum: ["true"]
}
})
}
let wrapper = render(<JsonSchemaForm {...props}/>)
@@ -139,10 +139,10 @@ describe("<JsonSchemaForm/>", function(){
onChange: () => {},
keyName: "",
fn: {},
schema: {
schema: Immutable.fromJS({
type: "boolean",
required: true
}
})
}
let wrapper = render(<JsonSchemaForm {...props}/>)
@@ -164,10 +164,10 @@ describe("<JsonSchemaForm/>", function(){
keyName: "",
fn: {},
required: true,
schema: {
schema: Immutable.fromJS({
type: "boolean",
enum: ["true"]
}
})
}
let wrapper = render(<JsonSchemaForm {...props}/>)
@@ -191,7 +191,7 @@ describe("<JsonSchemaForm/>", function(){
keyName: "",
fn: {},
errors: List(),
schema: {
schema: Immutable.fromJS({
type: "object",
properties: {
id: {
@@ -199,7 +199,7 @@ describe("<JsonSchemaForm/>", function(){
example: "abc123"
}
}
}
})
}
let wrapper = mount(<JsonSchemaForm {...props}/>)
@@ -219,9 +219,9 @@ describe("<JsonSchemaForm/>", function(){
onChange: () => {},
keyName: "",
fn: {},
schema: {
schema: Immutable.fromJS({
type: "NotARealType"
}
})
}
@@ -240,10 +240,10 @@ describe("<JsonSchemaForm/>", function(){
onChange: () => {},
keyName: "",
fn: {},
schema: {
schema: Immutable.fromJS({
type: "NotARealType",
format: "NotARealFormat"
}
})
}