|
- /**
- * @prettier
- */
-
- const {
- ParameterPrimitiveTestCases,
- RequestBodyPrimitiveTestCases,
- ResponsePrimitiveTestCases,
- } = require("../../helpers/multiple-examples")
- describe("OpenAPI 3.0 Multiple Examples - core features", () => {
- describe("/String", () => {
- describe("in a parameter", () => {
- ParameterPrimitiveTestCases({
- operationDomId: "#operations-default-post_String",
- parameterName: "message",
- exampleA: {
- key: "StringExampleA",
- value: "hello world",
- },
- exampleB: {
- key: "StringExampleB",
- value: "The quick brown fox jumps over the lazy dog",
- },
- customUserInput: "OpenAPIs.org <3",
- })
- })
- describe("in a Request Body", () => {
- RequestBodyPrimitiveTestCases({
- operationDomId: "#operations-default-post_String",
- exampleA: {
- key: "StringExampleA",
- value: "hello world",
- serializedValue: "hello world",
- summary: "Don't just string me along...",
- },
- exampleB: {
- key: "StringExampleB",
- value: "The quick brown fox jumps over the lazy dog",
- serializedValue: "The quick brown fox jumps over the lazy dog",
- summary: "I'm a pangram!",
- },
- customUserInput: "OpenAPIs.org <3",
- })
- })
- describe("in a Response", () => {
- ResponsePrimitiveTestCases({
- operationDomId: "#operations-default-post_String",
- exampleA: {
- key: "StringExampleA",
- value: "hello world",
- summary: "Don't just string me along...",
- },
- exampleB: {
- key: "StringExampleB",
- value: "The quick brown fox jumps over the lazy dog",
- summary: "I'm a pangram!",
- },
- exampleC: {
- key: "StringExampleC",
- value: "JavaScript rules",
- summary: "A third example, for use in special places...",
- },
- })
- })
- })
- describe("/Number", () => {
- describe("in a parameter", () => {
- ParameterPrimitiveTestCases({
- operationDomId: "#operations-default-post_Number",
- parameterName: "message",
- exampleA: {
- key: "NumberExampleA",
- value: "7710263025",
- },
- exampleB: {
- key: "NumberExampleB",
- value: "9007199254740991",
- },
- exampleC: {
- key: "NumberExampleC",
- value: "0",
- },
- customUserInput: "9001",
- })
- })
- describe("in a Request Body", () => {
- RequestBodyPrimitiveTestCases({
- operationDomId: "#operations-default-post_Number",
- exampleA: {
- key: "NumberExampleA",
- value: "7710263025",
- summary: "World population",
- },
- exampleB: {
- key: "NumberExampleB",
- value: "9007199254740991",
- summary: "Number.MAX_SAFE_INTEGER",
- },
- exampleC: {
- key: "NumberExampleC",
- value: "0",
- },
- customUserInput: "1337",
- })
- })
- describe("in a Response", () => {
- ResponsePrimitiveTestCases({
- operationDomId: "#operations-default-post_Number",
- exampleA: {
- key: "NumberExampleA",
- value: "7710263025",
- summary: "World population",
- },
- exampleB: {
- key: "NumberExampleB",
- value: "9007199254740991",
- summary: "Number.MAX_SAFE_INTEGER",
- },
- exampleC: {
- key: "NumberExampleC",
- value: "0",
- },
- })
- })
- })
- describe("/Boolean", () => {
- describe("in a parameter", () => {
- it("should render and apply the first example and value by default", () => {
- cy.visit(
- "/?url=/documents/features/multiple-examples-core.openapi.yaml"
- )
- .get("#operations-default-post_Boolean")
- .click()
- // Assert on the initial dropdown value
- .get("table.parameters .examples-select > select")
- .find(":selected")
- .should("have.text", "The truth will set you free")
- // Assert on the initial JsonSchemaForm value
- .get(".parameters-col_description > select")
- .should("have.attr", "disabled")
- .get(".parameters-col_description > select")
- .find(":selected")
- .should("have.text", "true")
- // Execute
- .get(".try-out__btn")
- .click()
- .get(".execute")
- .click()
- // Assert on the request URL
- .get(".request-url")
- .contains(`?message=true`)
- })
- it("should render and apply the second value when chosen", () => {
- cy.visit(
- "/?url=/documents/features/multiple-examples-core.openapi.yaml"
- )
- .get("#operations-default-post_Boolean")
- .click()
- // Set the dropdown value, then assert on it
- .get("table.parameters .examples-select > select")
- .select("BooleanExampleB")
- .find(":selected")
- .should("have.text", "Friends don't lie to friends")
- // Set the JsonSchemaForm value, then assert on it
- .get(".parameters-col_description > select")
- .find(":selected")
- .should("have.text", "false")
- // Execute
- .get(".try-out__btn")
- .click()
- .get(".execute")
- .click()
- // Assert on the request URL
- .get(".request-url")
- .contains(`?message=false`)
- })
- it("should track value changes against valid examples", () => {
- cy.visit(
- "/?url=/documents/features/multiple-examples-core.openapi.yaml"
- )
- .get("#operations-default-post_Boolean")
- .click()
- .get(".try-out__btn")
- .click()
- // Set the JsonSchemaForm value, then assert on it
- .get(".parameters-col_description > select")
- .select("false")
- .find(":selected")
- .should("have.text", "false")
- // Assert on the dropdown value
- .get("table.parameters .examples-select > select")
- .find(":selected")
- .should("have.text", "Friends don't lie to friends")
- // Execute
- .get(".execute")
- .click()
- // Assert on the request URL
- .get(".request-url")
- .contains(`?message=false`)
- })
- })
- describe("in a Request Body", () => {
- RequestBodyPrimitiveTestCases({
- operationDomId: "#operations-default-post_Boolean",
- exampleA: {
- key: "BooleanExampleA",
- value: "true",
- summary: "The truth will set you free",
- },
- exampleB: {
- key: "BooleanExampleB",
- value: "false",
- summary: "Friends don't lie to friends",
- },
- customUserInput: "tralse",
- })
- })
- describe("in a Response", () => {
- it("should render and apply the first example and value by default", () => {
- cy.visit(
- "/?url=/documents/features/multiple-examples-core.openapi.yaml"
- )
- .get("#operations-default-post_Boolean")
- .click()
- // Assert on the initial dropdown value
- .get(".responses-wrapper .examples-select > select")
- .find(":selected")
- .should("have.text", "The truth will set you free")
- // Assert on the example value
- .get(".example.microlight")
- .should("have.text", "true")
- })
- it("should render and apply the second value when chosen", () => {
- cy.visit(
- "/?url=/documents/features/multiple-examples-core.openapi.yaml"
- )
- .get("#operations-default-post_Boolean")
- .click()
- // Set the dropdown value, then assert on it
- .get(".responses-wrapper .examples-select > select")
- .select("BooleanExampleB")
- .find(":selected")
- .should("have.text", "Friends don't lie to friends")
- // Assert on the example value
- .get(".example.microlight")
- .should("have.text", "false")
- })
- })
- })
- describe("/Array", () => {
- describe("in a Parameter", () => {
- it("should have the first example's array entries by default", () => {
- cy.visit(
- "/?url=/documents/features/multiple-examples-core.openapi.yaml"
- )
- .get("#operations-default-post_Array")
- .click()
- .get(".json-schema-form-item > input")
- .then(inputs => {
- expect(inputs.map((i, el) => el.value).toArray()).to.deep.equal([
- "a",
- "b",
- "c",
- ])
- })
- .get(".parameters-col_description .examples-select > select")
- .find(":selected")
- .should("have.text", "A lowly array of strings")
- })
- it("should switch to the second array's entries via dropdown", () => {
- cy.visit(
- "/?url=/documents/features/multiple-examples-core.openapi.yaml"
- )
- .get("#operations-default-post_Array")
- .click()
- .get(".parameters-col_description .examples-select > select")
- .select("ArrayExampleB")
- .get(".json-schema-form-item > input")
- .then(inputs => {
- expect(inputs.map((i, el) => el.value).toArray()).to.deep.equal([
- "1",
- "2",
- "3",
- "4",
- ])
- })
- .get(".parameters-col_description .examples-select > select")
- .find(":selected")
- .should("have.text", "A lowly array of numbers")
- })
- it("should not allow modification of values in static mode", () => {
- cy.visit(
- "/?url=/documents/features/multiple-examples-core.openapi.yaml"
- )
- .get("#operations-default-post_Array")
- .click()
- .get(".parameters-col_description .examples-select > select")
- .select("ArrayExampleB")
- // Add a new item
- .get(".json-schema-form-item > input")
- .should("have.attr", "disabled")
- })
- 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()
- .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 retain a modified value, and support returning to it", () => {
- cy.visit(
- "/?url=/documents/features/multiple-examples-core.openapi.yaml"
- )
- .get("#operations-default-post_Array")
- .click()
- .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")
- // Reset to an example
- .get(".parameters-col_description .examples-select > select")
- .select("ArrayExampleB")
- // 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",
- ])
- })
- .get(".parameters-col_description .examples-select > select")
- .find(":selected")
- .should("have.text", "A lowly array of numbers")
- // Return to the modified value
- .get(".parameters-col_description .examples-select > select")
- .select("__MODIFIED__VALUE__")
- // Assert that our modified value is back
- .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]")
- })
- })
- describe("in a Request Body", () => {
- it("should have the first example's array entries by default", () => {
- cy.visit(
- "/?url=/documents/features/multiple-examples-core.openapi.yaml"
- )
- .get("#operations-default-post_Array")
- .click()
- // Check HighlightCode value
- .get(".opblock-section-request-body .highlight-code")
- .should("include.text", JSON.stringify(["a", "b", "c"], null, 2))
- // Check dropdown value
- .get(".opblock-section-request-body .examples-select > select")
- .find(":selected")
- .should("have.text", "A lowly array of strings")
- // Switch to Try-It-Out
- .get(".try-out__btn")
- .click()
- // Check textarea value
- .get(".opblock-section-request-body textarea")
- .should("have.value", JSON.stringify(["a", "b", "c"], null, 2))
- // Check dropdown value
- .get(".opblock-section-request-body .examples-select > select")
- .find(":selected")
- .should("have.text", "A lowly array of strings")
- })
- it("should switch to the second array's entries via dropdown", () => {
- cy.visit(
- "/?url=/documents/features/multiple-examples-core.openapi.yaml"
- )
- .get("#operations-default-post_Array")
- .click()
- .get(".opblock-section-request-body .examples-select > select")
- .select("ArrayExampleB")
- .get(".opblock-section-request-body .highlight-code")
- .should("include.text", JSON.stringify([1, 2, 3, 4], null, 2))
- .get(".opblock-section-request-body .examples-select > select")
- .find(":selected")
- .should("have.text", "A lowly array of numbers")
- // Switch to Try-It-Out
- .get(".try-out__btn")
- .click()
- // Check textarea value
- .get(".opblock-section-request-body textarea")
- .should("include.text", JSON.stringify([1, 2, 3, 4], null, 2))
- // Check dropdown value
- .get(".opblock-section-request-body .examples-select > select")
- .find(":selected")
- .should("have.text", "A lowly array of numbers")
- })
- it("should allow modification of values", () => {
- cy.visit(
- "/?url=/documents/features/multiple-examples-core.openapi.yaml"
- )
- .get("#operations-default-post_Array")
- .click()
- // Switch to Try-It-Out
- .get(".try-out__btn")
- .click()
- // Choose the second example
- .get(".opblock-section-request-body .examples-select > select")
- .select("ArrayExampleB")
- // Change the value
- .get(".opblock-section-request-body textarea")
- .type(`{leftarrow}{leftarrow},{enter} 5`)
- // Check that [Modified value] is displayed in dropdown
- .get(".opblock-section-request-body .examples-select > select")
- .find(":selected")
- .should("have.text", "[Modified value]")
- // Check textarea value
- .get(".opblock-section-request-body textarea")
- .should("include.text", JSON.stringify([1, 2, 3, 4, 5], null, 2))
- })
-
- it("should retain a modified value, and support returning to it", () => {
- cy.visit(
- "/?url=/documents/features/multiple-examples-core.openapi.yaml"
- )
- .get("#operations-default-post_Array")
- .click()
- // Switch to Try-It-Out
- .get(".try-out__btn")
- .click()
- // Choose the second example as the example to start with
- .get(".opblock-section-request-body .examples-select > select")
- .select("ArrayExampleB")
- // Change the value
- .get(".opblock-section-request-body textarea")
- .type(`{leftarrow}{leftarrow},{enter} 5`)
- // Check that [Modified value] is displayed in dropdown
- .get(".opblock-section-request-body .examples-select > select")
- .find(":selected")
- .should("have.text", "[Modified value]")
- // Check textarea value
- .get(".opblock-section-request-body textarea")
- .should("include.text", JSON.stringify([1, 2, 3, 4, 5], null, 2))
- // Choose the second example
- .get(".opblock-section-request-body .examples-select > select")
- .select("ArrayExampleB")
- // Check that the example is displayed in dropdown
- .get(".opblock-section-request-body .examples-select > select")
- .find(":selected")
- .should("have.text", "A lowly array of numbers")
- // Check textarea value
- .get(".opblock-section-request-body textarea")
- .should("include.text", JSON.stringify([1, 2, 3, 4], null, 2))
- // Switch back to the modified value
- .get(".opblock-section-request-body .examples-select > select")
- .select("__MODIFIED__VALUE__")
- // Check textarea value
- .get(".opblock-section-request-body textarea")
- .should("include.text", JSON.stringify([1, 2, 3, 4, 5], null, 2))
- })
- })
- describe("in a Response", () => {
- it("should render and apply the first example and value by default", () => {
- cy.visit(
- "/?url=/documents/features/multiple-examples-core.openapi.yaml"
- )
- .get("#operations-default-post_Array")
- .click()
- // Assert on the initial dropdown value
- .get(".responses-wrapper .examples-select > select")
- .find(":selected")
- .should("have.text", "A lowly array of strings")
- // Assert on the example value
- .get(".example.microlight")
- .should("include.text", JSON.stringify(["a", "b", "c"], null, 2))
- })
- it("should render and apply the second value when chosen", () => {
- cy.visit(
- "/?url=/documents/features/multiple-examples-core.openapi.yaml"
- )
- .get("#operations-default-post_Array")
- .click()
- // Set the dropdown value, then assert on it
- .get(".responses-wrapper .examples-select > select")
- .select("ArrayExampleB")
- .find(":selected")
- .should("have.text", "A lowly array of numbers")
- // Assert on the example value
- .get(".example.microlight")
- .should("include.text", JSON.stringify([1, 2, 3, 4], null, 2))
- })
- })
- })
- describe("/Object", () => {
- describe("in a Parameter", () => {
- ParameterPrimitiveTestCases({
- operationDomId: "#operations-default-post_Object",
- parameterName: "data",
- customUserInput: `{{} "openapiIsCool": true }`,
- customExpectedUrlSubstring: "?openapiIsCool=true",
- exampleA: {
- key: "ObjectExampleA",
- serializedValue:
- "firstName=Kyle&lastName=Shockey&email=kyle.shockey%40smartbear.com",
- value: JSON.stringify(
- {
- firstName: "Kyle",
- lastName: "Shockey",
- email: "kyle.shockey@smartbear.com",
- },
- null,
- 2
- ),
- },
- exampleB: {
- key: "ObjectExampleB",
- serializedValue:
- "name=Abbey&type=kitten&color=calico&gender=female&age=11%20weeks",
- value: JSON.stringify(
- {
- name: "Abbey",
- type: "kitten",
- color: "calico",
- gender: "female",
- age: "11 weeks",
- },
- null,
- 2
- ),
- },
- })
- })
- describe("in a Request Body", () => {
- RequestBodyPrimitiveTestCases({
- operationDomId: "#operations-default-post_Object",
- primaryMediaType: "application/json",
- // ↓ not a typo, Cypress requires escaping { when using `cy.type`
- customUserInput: `{{} "openapiIsCool": true }`,
- customExpectedUrlSubstring: "?openapiIsCool=true",
- customUserInputExpectedCurlSubstring: `{\\"openapiIsCool\\":true}`,
- exampleA: {
- key: "ObjectExampleA",
- serializedValue: `{\\"firstName\\":\\"Kyle\\",\\"lastName\\":\\"Shockey\\",\\"email\\":\\"kyle.shockey@smartbear.com\\"}`,
- value: JSON.stringify(
- {
- firstName: "Kyle",
- lastName: "Shockey",
- email: "kyle.shockey@smartbear.com",
- },
- null,
- 2
- ),
- summary: "A user's contact info",
- },
- exampleB: {
- key: "ObjectExampleB",
- serializedValue: `{\\"name\\":\\"Abbey\\",\\"type\\":\\"kitten\\",\\"color\\":\\"calico\\",\\"gender\\":\\"female\\",\\"age\\":\\"11 weeks\\"}`,
- value: JSON.stringify(
- {
- name: "Abbey",
- type: "kitten",
- color: "calico",
- gender: "female",
- age: "11 weeks",
- },
- null,
- 2
- ),
- summary: "A wonderful kitten's info",
- },
- })
- })
- describe("in a Response", () => {
- ResponsePrimitiveTestCases({
- operationDomId: "#operations-default-post_Object",
- exampleA: {
- key: "ObjectExampleA",
- value: JSON.stringify(
- {
- firstName: "Kyle",
- lastName: "Shockey",
- email: "kyle.shockey@smartbear.com",
- },
- null,
- 2
- ),
- summary: "A user's contact info",
- },
- exampleB: {
- key: "ObjectExampleB",
- value: JSON.stringify(
- {
- name: "Abbey",
- type: "kitten",
- color: "calico",
- gender: "female",
- age: "11 weeks",
- },
- null,
- 2
- ),
- summary: "A wonderful kitten's info",
- },
- })
- })
- })
- })
|