feat(sample-gen): infer implicit type and validation constraint types (#7117)

* this closes some dead ends of sample generation where no sample can be generated
This commit is contained in:
Mahtis Michel
2021-03-30 23:28:51 +02:00
committed by GitHub
parent 75865f31ec
commit 032bd71e0a
4 changed files with 127 additions and 151 deletions

View File

@@ -314,7 +314,7 @@ describe("OpenAPI 3.0 Multiple Examples - core features", () => {
.get(".json-schema-form-item-add")
.click()
.get(".json-schema-form-item:last-of-type > input")
.type("5")
.type("{selectall}5")
// Assert against the input fields
.get(".json-schema-form-item > input")
.then((inputs) => {
@@ -345,7 +345,7 @@ describe("OpenAPI 3.0 Multiple Examples - core features", () => {
.get(".json-schema-form-item-add")
.click()
.get(".json-schema-form-item:last-of-type > input")
.type("5")
.type("{selectall}5")
// Reset to an example
.get(".parameters-col_description .examples-select > select")
.select("ArrayExampleB")

View File

@@ -6,36 +6,28 @@ 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"
)
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"
)
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"
)
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"
)
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")
@@ -44,36 +36,28 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
})
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"
)
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"
)
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"
)
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"
)
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")
@@ -98,10 +82,10 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.get(".json-schema-form-item-add")
.click()
.get(".json-schema-form-item:last-of-type > input")
.type("5")
.type("{selectall}5")
// Assert against the input fields
.get(".json-schema-form-item > input")
.then(inputs => {
.then((inputs) => {
expect(inputs.map((i, el) => el.value).toArray()).to.deep.equal([
"1",
"2",
@@ -129,10 +113,10 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.get(".json-schema-form-item-add")
.click()
.get(".json-schema-form-item:last-of-type > input")
.type("5")
.type("{selectall}5")
// Assert against the input fields
.get(".json-schema-form-item > input")
.then(inputs => {
.then((inputs) => {
expect(inputs.map((i, el) => el.value).toArray()).to.deep.equal([
"1",
"2",
@@ -145,10 +129,12 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.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")
.get(
".json-schema-form-item:last-of-type > .json-schema-form-item-remove"
)
.click()
.get(".json-schema-form-item > input")
.then(inputs => {
.then((inputs) => {
expect(inputs.map((i, el) => el.value).toArray()).to.deep.equal([
"1",
"2",
@@ -172,10 +158,10 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.get(".json-schema-form-item-add")
.click()
.get(".json-schema-form-item:last-of-type > input")
.type("5")
.type("{selectall}5")
// Assert against the input fields
.get(".json-schema-form-item > input")
.then(inputs => {
.then((inputs) => {
expect(inputs.map((i, el) => el.value).toArray()).to.deep.equal([
"1",
"2",
@@ -188,15 +174,17 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.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")
.get(
".json-schema-form-item:nth-child(2) > .json-schema-form-item-remove"
)
.click()
.get(".json-schema-form-item > input")
.then(inputs => {
.then((inputs) => {
expect(inputs.map((i, el) => el.value).toArray()).to.deep.equal([
"1",
"3",
"4",
"5"
"5",
])
})
})
@@ -244,9 +232,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
describe("Petstore", () => {
describe("/pet/findByStatus", () => {
it("should render the operation, execute with default value", () => {
cy.visit(
"/?url=/documents/features/schema-form-core.yaml"
)
cy.visit("/?url=/documents/features/schema-form-core.yaml")
.get("#operations-default-findPetsByStatus")
.click()
// Expand operation
@@ -266,9 +252,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.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"
)
cy.visit("/?url=/documents/features/schema-form-core.yaml")
.get("#operations-default-findPetsByStatus")
.click()
// Expand operation
@@ -286,16 +270,14 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
// Expect new element to be visible after Execute
.get(".btn-clear.opblock-control__btn")
.should("have.text", "Clear")
// Compare Request URL
// 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"
)
cy.visit("/?url=/documents/features/schema-form-core.yaml")
.get("#operations-pet-findPetsByTags")
.click()
// Expand Try It Out
@@ -308,16 +290,14 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.type("{selectall}spotted")
// Assert against the input fields
.get(".json-schema-form-item > input")
.then(inputs => {
.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"
)
cy.visit("/?url=/documents/features/schema-form-core.yaml")
.get("#operations-pet-findPetsByTags")
.click()
// Expand Try It Out
@@ -330,21 +310,21 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.type("{selectall}spotted")
// Assert against the input fields
.get(".json-schema-form-item > input")
.then(inputs => {
.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")
.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"
)
cy.visit("/?url=/documents/features/schema-form-core.yaml")
.get("#operations-pet-findPetsByTags")
.click()
// Expand Try It Out
@@ -357,7 +337,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.type("{selectall}spotted")
// Assert against the input fields
.get(".json-schema-form-item > input")
.then(inputs => {
.then((inputs) => {
expect(inputs.map((i, el) => el.value).toArray()).to.deep.equal([
"spotted",
])
@@ -369,10 +349,10 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.type("{selectall}large")
// Assert against the input fields
.get(".json-schema-form-item > input")
.then(inputs => {
.then((inputs) => {
expect(inputs.map((i, el) => el.value).toArray()).to.deep.equal([
"spotted",
"large"
"large",
])
})
// Add a 3rd new item
@@ -382,28 +362,28 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.type("{selectall}puppy")
// Assert against the input fields
.get(".json-schema-form-item > input")
.then(inputs => {
.then((inputs) => {
expect(inputs.map((i, el) => el.value).toArray()).to.deep.equal([
"spotted",
"large",
"puppy"
"puppy",
])
})
// Remove the second item in list
.get(".json-schema-form-item:nth-child(2) > .json-schema-form-item-remove")
.get(
".json-schema-form-item:nth-child(2) > .json-schema-form-item-remove"
)
.click()
.get(".json-schema-form-item > input")
.then(inputs => {
.then((inputs) => {
expect(inputs.map((i, el) => el.value).toArray()).to.deep.equal([
"spotted",
"puppy"
"puppy",
])
})
})
it("should allow execution of operation without modifications in Try-It-Out (debounce)", () => {
cy.visit(
"/?url=/documents/features/schema-form-core.yaml"
)
cy.visit("/?url=/documents/features/schema-form-core.yaml")
.get("#operations-pet-findPetsByTags")
.click()
// Expand Try It Out
@@ -420,9 +400,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.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"
)
cy.visit("/?url=/documents/features/schema-form-core.yaml")
.get("#operations-pet-findPetsByTags")
.click()
// Expand Try It Out
@@ -442,9 +420,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.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"
)
cy.visit("/?url=/documents/features/schema-form-core.yaml")
.get("#operations-pet-findPetsByTags")
.click()
// Expand Try It Out
@@ -457,7 +433,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.type("{selectall}spotted")
// Assert against the input fields
.get(".json-schema-form-item > input")
.then(inputs => {
.then((inputs) => {
expect(inputs.map((i, el) => el.value).toArray()).to.deep.equal([
"spotted",
])
@@ -473,9 +449,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.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"
)
cy.visit("/?url=/documents/features/schema-form-core.yaml")
.get("#operations-pet-findPetsByTags")
.click()
// Expand Try It Out
@@ -488,7 +462,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.type("{selectall}spotted")
// Assert against the input fields
.get(".json-schema-form-item > input")
.then(inputs => {
.then((inputs) => {
expect(inputs.map((i, el) => el.value).toArray()).to.deep.equal([
"spotted",
])
@@ -500,10 +474,10 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.type("{selectall}large")
// Assert against the input fields
.get(".json-schema-form-item > input")
.then(inputs => {
.then((inputs) => {
expect(inputs.map((i, el) => el.value).toArray()).to.deep.equal([
"spotted",
"large"
"large",
])
})
// Add a 3rd new item
@@ -513,21 +487,23 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.type("{selectall}puppy")
// Assert against the input fields
.get(".json-schema-form-item > input")
.then(inputs => {
.then((inputs) => {
expect(inputs.map((i, el) => el.value).toArray()).to.deep.equal([
"spotted",
"large",
"puppy"
"puppy",
])
})
// Remove the second item in list
.get(".json-schema-form-item:nth-child(2) > .json-schema-form-item-remove")
.get(
".json-schema-form-item:nth-child(2) > .json-schema-form-item-remove"
)
.click()
.get(".json-schema-form-item > input")
.then(inputs => {
.then((inputs) => {
expect(inputs.map((i, el) => el.value).toArray()).to.deep.equal([
"spotted",
"puppy"
"puppy",
])
})
// Execute
@@ -545,9 +521,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
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"
)
cy.visit("/?url=/documents/features/schema-form-core.yaml")
.get("#operations-petOwner-getPetOwnerById")
.click()
// Expand operation
@@ -567,9 +541,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.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"
)
cy.visit("/?url=/documents/features/schema-form-core.yaml")
.get("#operations-petOwner-getPetOwnerById")
.click()
// Expand operation
@@ -594,9 +566,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
})
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"
)
cy.visit("/?url=/documents/features/schema-form-core.yaml")
.get("#operations-petOwner-listOfServiceTrainer")
.click()
// Expand Try It Out
@@ -618,9 +588,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.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"
)
cy.visit("/?url=/documents/features/schema-form-core.yaml")
.get("#operations-petOwner-listOfServiceTrainer")
.click()
// Expand Try It Out
@@ -642,9 +610,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.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"
)
cy.visit("/?url=/documents/features/schema-form-core.yaml")
.get("#operations-petOwner-listOfServiceTrainer")
.click()
// Expand Try It Out
@@ -671,9 +637,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.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"
)
cy.visit("/?url=/documents/features/schema-form-core.yaml")
.get("#operations-petOwner-listOfServiceTrainer")
.click()
// Expand Try It Out
@@ -690,7 +654,9 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.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")
.get(
".json-schema-form-item:nth-child(1) > .json-schema-form-item-remove"
)
.click()
// Execute
.get(".execute.opblock-control__btn")
@@ -703,9 +669,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.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"
)
cy.visit("/?url=/documents/features/schema-form-core.yaml")
.get("#operations-petOwner-listOfServiceTrainer")
.click()
// Expand Try It Out
@@ -724,9 +688,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
})
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"
)
cy.visit("/?url=/documents/features/schema-form-core.yaml")
.get("#operations-petOwner-findByPreference")
.click()
// Expand Try It Out
@@ -743,9 +705,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.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"
)
cy.visit("/?url=/documents/features/schema-form-core.yaml")
.get("#operations-petOwner-findByPreference")
.click()
// Expand Try It Out
@@ -766,9 +726,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.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"
)
cy.visit("/?url=/documents/features/schema-form-core.yaml")
.get("#operations-petOwner-findByPreference")
.click()
// Expand Try It Out
@@ -792,9 +750,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
})
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"
)
cy.visit("/?url=/documents/features/schema-form-core.yaml")
.get("#operations-petOwner-petOwnerCreateWithList")
.click()
// Expand Try It Out
@@ -811,9 +767,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.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"
)
cy.visit("/?url=/documents/features/schema-form-core.yaml")
.get("#operations-petOwner-petOwnerCreateWithList")
.click()
// Expand Try It Out
@@ -832,9 +786,7 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.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"
)
cy.visit("/?url=/documents/features/schema-form-core.yaml")
.get("#operations-petOwner-petOwnerCreateWithList")
.click()
// Expand Try It Out
@@ -843,7 +795,8 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
.get(".body-param__text")
.clear()
// note: adding this much type adds 6+ seconds to test
.type(`[
.type(
`[
{
"id": 10,
"petId": 201,
@@ -875,5 +828,3 @@ describe("OpenAPI 3.0 Additional JsonSchemaForm in a Parameter", () => {
})
})
})