- module.exports = {
- ParameterPrimitiveTestCases,
- RequestBodyPrimitiveTestCases,
- ResponsePrimitiveTestCases,
- }
-
- function ParameterPrimitiveTestCases({
- operationDomId,
- parameterName,
- exampleA, // { value, key }
- exampleB, // { value, key }
- exampleC,
- customUserInput,
- customExpectedUrlSubstring,
- }) {
- it("should render examples options without Modified Value by default", () => {
- cy.visit("/?url=/documents/features/multiple-examples-core.openapi.yaml")
- .get(operationDomId)
- .click()
- .get(`tr[data-param-name="${parameterName}"]`)
- .find(".examples-select option")
- .should("have.length", exampleC ? 3 : 2)
- // Ensure the relevant input is disabled
- .get(
- `tr[data-param-name="${parameterName}"] input, tr[data-param-name="${parameterName}"] textarea`
- )
- .should("have.attr", "disabled")
- // Switch to Try-It-Out
- .get(".try-out__btn")
- .click()
- .get(`.opblock-section-request-body`)
- .find(".examples-select option")
- .should("have.length", exampleC ? 3 : 2)
- })
-
- it("should set default static and Try-It-Out values based on the first member", () => {
- cy.visit("/?url=/documents/features/multiple-examples-core.openapi.yaml")
- // Expand the operation
- .get(operationDomId)
- .click()
- // Assert on the static docs value
- .get(
- `tr[data-param-name="${parameterName}"] input,tr[data-param-name="${parameterName}"] textarea`
- )
- .should("have.value", exampleA.value)
- // Switch to Try-It-Out
- .get(".try-out__btn")
- .click()
- // Assert on the Try-It-Out value
- .get(
- `tr[data-param-name="${parameterName}"] input,tr[data-param-name="${parameterName}"] textarea`
- )
- .should("have.value", exampleA.value)
- // Execute the operation
- .get(".execute")
- .click()
- // Assert on the request URL
- .get(".request-url")
- .contains(
- exampleA.serializedValue || `?message=${escape(exampleA.value)}`
- )
- })
-
- it("should set static and Try-It-Out values based on the second member", () => {
- cy.visit("/?url=/documents/features/multiple-examples-core.openapi.yaml")
- // Expand the operation
- .get(operationDomId)
- .click()
- // Choose the second example
- .get("table.parameters .examples-select > select")
- .select(exampleB.key)
- // Assert on the static docs value
- .get(
- `tr[data-param-name="${parameterName}"] input,tr[data-param-name="${parameterName}"] textarea`
- )
- .should("have.value", exampleB.value)
- // Switch to Try-It-Out
- .get(".try-out__btn")
- .click()
- // Assert on the Try-It-Out value
- .get(
- `tr[data-param-name="${parameterName}"] input,tr[data-param-name="${parameterName}"] textarea`
- )
- .should("have.value", exampleB.value)
- // Execute the operation
- .get(".execute")
- .click()
- // Assert on the request URL
- .get(".request-url")
- .contains(
- exampleB.serializedValue
- ? `?${exampleB.serializedValue}`
- : `?message=${escape(exampleB.value)}`
- )
- })
-
- it("should handle user-entered values correctly", () => {
- cy.visit("/?url=/documents/features/multiple-examples-core.openapi.yaml")
- // Expand the operation
- .get(operationDomId)
- .click()
- // Switch to Try-It-Out
- .get(".try-out__btn")
- .click()
- // Modify the input value
- .get(
- `tr[data-param-name="${parameterName}"] input,tr[data-param-name="${parameterName}"] textarea`
- )
- .clear()
- .type(customUserInput)
- // Assert on the active select menu item
- .get("table.parameters .examples-select > select")
- .find(":selected")
- .should("have.text", "[Modified value]")
- // Execute the operation
- .get(".execute")
- .click()
- // Assert on the request URL
- .get(".request-url")
- .contains(
- customExpectedUrlSubstring || `?message=${escape(customUserInput)}`
- )
- })
-
- it("should retain user-entered values correctly", () => {
- cy.visit("/?url=/documents/features/multiple-examples-core.openapi.yaml")
- // Expand the operation
- .get(operationDomId)
- .click()
- // Switch to Try-It-Out
- .get(".try-out__btn")
- .click()
- // Modify the input value
- .get(
- `tr[data-param-name="${parameterName}"] input,tr[data-param-name="${parameterName}"] textarea`
- )
- .clear()
- .type(customUserInput)
- // Select the first example
- .get("table.parameters .examples-select > select")
- .select(exampleA.key)
- // Execute the operation
- .get(".execute")
- .click()
- // Assert on the request URL
- .get(".request-url")
- .contains(
- exampleA.serializedValue
- ? `?${exampleA.serializedValue}`
- : `?message=${escape(exampleA.value)}`
- )
- // Select the modified value
- .get("table.parameters .examples-select > select")
- .select("__MODIFIED__VALUE__")
- // Execute the operation
- .get(".execute")
- .click()
- // Assert on the request URL
- .get(".request-url")
- .contains(
- customExpectedUrlSubstring || `?message=${escape(customUserInput)}`
- )
- })
- }
-
- function RequestBodyPrimitiveTestCases({
- operationDomId,
- exampleA, // { value, key, summary }
- exampleB, // { value, key, summary }
- exampleC,
- customUserInput,
- customUserInputExpectedCurlSubstring,
- primaryMediaType = "text/plain",
- secondaryMediaType = "text/plain+other",
- }) {
- it("should render examples options without Modified Value by default", () => {
- cy.visit("/?url=/documents/features/multiple-examples-core.openapi.yaml")
- .get(operationDomId)
- .click()
- .get(`.opblock-section-request-body`)
- .find(".examples-select option")
- .should("have.length", exampleC ? 3 : 2)
- // Switch to Try-It-Out
- .get(".try-out__btn")
- .click()
- .get(`.opblock-section-request-body`)
- .find(".examples-select option")
- .should("have.length", exampleC ? 3 : 2)
- })
-
- it("should set default static and Try-It-Out values based on the first member", () => {
- cy.visit("/?url=/documents/features/multiple-examples-core.openapi.yaml")
- // Expand the operation
- .get(operationDomId)
- .click()
- // Assert on the static docs value
- .get(`.opblock-section-request-body .microlight`)
- .should("include.text", exampleA.value)
- // Switch to Try-It-Out
- .get(".try-out__btn")
- .click()
- // Assert on the Try-It-Out value
- .get(`.opblock-section-request-body textarea`)
- .should("have.value", exampleA.value)
- // Execute the operation
- .get(".execute")
- .click()
- // Assert on the curl body
- // TODO: use an interceptor instead of curl
- .get(".curl")
- .contains(`-d "${exampleA.serializedValue || exampleA.value}"`)
- })
-
- it("should set default static and Try-It-Out values based on choosing the second member in static mode", () => {
- cy.visit("/?url=/documents/features/multiple-examples-core.openapi.yaml")
- // Expand the operation
- .get(operationDomId)
- .click()
- // Choose the second example
- .get(".opblock-section-request-body .examples-select > select")
- .select(exampleB.key)
- // Assert on the static docs value
- .get(`.opblock-section-request-body .microlight`)
- .should("include.text", exampleB.value)
- // Switch to Try-It-Out
- .get(".try-out__btn")
- .click()
- // Assert on the Try-It-Out value
- .get(`.opblock-section-request-body textarea`)
- .should("have.value", exampleB.value)
- // Execute the operation
- .get(".execute")
- .click()
- // Assert on the request URL
- // TODO: use an interceptor instead of curl
- .get(".curl")
- .contains(`-d "${exampleB.serializedValue || exampleB.value}"`)
- })
-
- it("should set default static and Try-It-Out values based on choosing the second member in Try-It-Out mode", () => {
- cy.visit("/?url=/documents/features/multiple-examples-core.openapi.yaml")
- // Expand the operation
- .get(operationDomId)
- .click()
- // Switch to Try-It-Out
- .get(".try-out__btn")
- .click()
- // Choose the second example
- .get(".opblock-section-request-body .examples-select > select")
- .select(exampleB.key)
- // Assert on the Try-It-Out value
- .get(`.opblock-section-request-body textarea`)
- .should("have.value", exampleB.value)
- // Execute the operation
- .get(".execute")
- .click()
- // Assert on the request URL
- // TODO: use an interceptor instead of curl
- .get(".curl")
- .contains(`-d "${exampleB.serializedValue || exampleB.value}"`)
- // Switch to static docs
- .get(".try-out__btn")
- .click()
- // Assert on the static docs value
- .get(`.opblock-section-request-body .microlight`)
- .should("include.text", exampleB.value)
- })
-
- it("should return the dropdown entry for an example when manually returning to its value", () => {
- cy.visit("/?url=/documents/features/multiple-examples-core.openapi.yaml")
- // Expand the operation
- .get(operationDomId)
- .click()
- // Assert on the static docs value
- .get(`.opblock-section-request-body .microlight`)
- .should("include.text", exampleA.value)
- // Switch to Try-It-Out
- .get(".try-out__btn")
- .click()
- // Assert on the Try-It-Out value
- .get(`.opblock-section-request-body textarea`)
- .should("have.value", exampleA.value)
- // Clear the Try-It-Out value, replace it with custom value
- .clear()
- .type(customUserInput)
- // Assert on the dropdown value
- .get(".opblock-section-request-body .examples-select > select")
- .find(":selected")
- .should("have.text", "[Modified value]")
- // Modify the value again, going back to the example value
- .get(`.opblock-section-request-body textarea`)
- .clear()
- .type(exampleA.value)
- // Assert on the dropdown value returning to the example value
- .get(".opblock-section-request-body .examples-select > select")
- .find(":selected")
- .should("include.text", exampleA.summary)
- })
-
- it("should retain choosing a member in static docs when changing the media type", () => {
- cy.visit("/?url=/documents/features/multiple-examples-core.openapi.yaml")
- // Expand the operation
- .get(operationDomId)
- .click()
- // Choose the second example
- .get(".opblock-section-request-body .examples-select > select")
- .select(exampleB.key)
- // Change the media type
- .get(".opblock-section-request-body .content-type")
- .select(secondaryMediaType)
- // Assert on the static docs value
- .get(`.opblock-section-request-body .microlight`)
- .should("include.text", exampleB.value)
- // Switch to Try-It-Out
- .get(".try-out__btn")
- .click()
- // Assert on the Try-It-Out value
- .get(`.opblock-section-request-body textarea`)
- .should("have.value", exampleB.value)
- // Execute the operation
- .get(".execute")
- .click()
- // Assert on the request URL
- // TODO: use an interceptor instead of curl
- .get(".curl")
- .contains(`-d "${exampleB.serializedValue || exampleB.value}"`)
- })
-
- it("should use the first example for the media type when changing the media type without prior interactions with the value", () => {
- cy.visit("/?url=/documents/features/multiple-examples-core.openapi.yaml")
- // Expand the operation
- .get(operationDomId)
- .click()
- // Change the media type
- .get(".opblock-section-request-body .content-type")
- .select(secondaryMediaType)
- // Assert on the static docs value
- .get(`.opblock-section-request-body .microlight`)
- .should("include.text", exampleA.value)
- // Switch to Try-It-Out
- .get(".try-out__btn")
- .click()
- // Assert on the Try-It-Out value
- .get(`.opblock-section-request-body textarea`)
- .should("have.value", exampleA.value)
- // Execute the operation
- .get(".execute")
- .click()
- // Assert on the request URL
- // TODO: use an interceptor instead of curl
- .get(".curl")
- .contains(`-d "${exampleA.serializedValue || exampleA.value}"`)
- })
-
- it("static mode toggling: mediaType -> example -> mediaType -> example", () => {
- cy.visit("/?url=/documents/features/multiple-examples-core.openapi.yaml")
- // Expand the operation
- .get(operationDomId)
- .click()
- // Change the media type
- .get(".opblock-section-request-body .content-type")
- .select(secondaryMediaType)
- // Assert on the static docs value
- .get(`.opblock-section-request-body .microlight`)
- .should("include.text", exampleA.value)
- // Assert on the dropdown value
- .get(".opblock-section-request-body .examples-select > select")
- .find(":selected")
- .should("include.text", exampleA.summary)
-
- // Choose exampleB
- .get(".opblock-section-request-body .examples-select > select")
- .select(exampleB.key)
- // Assert on the static docs value
- .get(`.opblock-section-request-body .microlight`)
- .should("include.text", exampleB.value)
- // Assert on the dropdown value
- .get(".opblock-section-request-body .examples-select > select")
- .find(":selected")
- .should("include.text", exampleB.summary)
-
- // Change the media type
- .get(".opblock-section-request-body .content-type")
- .select(primaryMediaType)
- // Assert that the static docs value didn't change
- .get(`.opblock-section-request-body .microlight`)
- .should("include.text", exampleB.value)
- // Assert that the dropdown value didn't change
- .get(".opblock-section-request-body .examples-select > select")
- .find(":selected")
- .should("include.text", exampleB.summary)
-
- // Choose exampleA
- .get(".opblock-section-request-body .examples-select > select")
- .select(exampleA.key)
- // Assert on the static docs value
- .get(`.opblock-section-request-body .microlight`)
- .should("include.text", exampleA.value)
- // Assert on the dropdown value
- .get(".opblock-section-request-body .examples-select > select")
- .find(":selected")
- .should("include.text", exampleA.summary)
- })
-
- it("Try-It-Out toggling: mediaType -> example -> mediaType -> example", () => {
- cy.visit("/?url=/documents/features/multiple-examples-core.openapi.yaml")
- // Expand the operation
- .get(operationDomId)
- .click()
- // Switch to Try-It-Out
- .get(".try-out__btn")
- .click()
- // Change the media type
- .get(".opblock-section-request-body .content-type")
- .select(secondaryMediaType)
- // Assert on the static docs value
- .get(`.opblock-section-request-body textarea`)
- .should("include.text", exampleA.value)
- // Assert on the dropdown value
- .get(".opblock-section-request-body .examples-select > select")
- .find(":selected")
- .should("include.text", exampleA.summary)
-
- // Choose exampleB
- .get(".opblock-section-request-body .examples-select > select")
- .select(exampleB.key)
- // Assert on the static docs value
- .get(`.opblock-section-request-body textarea`)
- .should("include.text", exampleB.value)
- // Assert on the dropdown value
- .get(".opblock-section-request-body .examples-select > select")
- .find(":selected")
- .should("include.text", exampleB.summary)
-
- // Change the media type
- .get(".opblock-section-request-body .content-type")
- .select(primaryMediaType)
- // Assert that the static docs value didn't change
- .get(`.opblock-section-request-body textarea`)
- .should("include.text", exampleB.value)
- // Assert that the dropdown value didn't change
- .get(".opblock-section-request-body .examples-select > select")
- .find(":selected")
- .should("include.text", exampleB.summary)
-
- // Choose exampleA
- .get(".opblock-section-request-body .examples-select > select")
- .select(exampleA.key)
- // Assert on the static docs value
- .get(`.opblock-section-request-body textarea`)
- .should("include.text", exampleA.value)
- // Assert on the dropdown value
- .get(".opblock-section-request-body .examples-select > select")
- .find(":selected")
- .should("include.text", exampleA.summary)
- })
-
- it("Try-It-Out toggling and execution with modified values: mediaType -> modified value -> example -> mediaType -> example", () => {
- cy.visit("/?url=/documents/features/multiple-examples-core.openapi.yaml")
- // Expand the operation
- .get(operationDomId)
- .click()
- // Switch to Try-It-Out
- .get(".try-out__btn")
- .click()
- // Change the media type
- .get(".opblock-section-request-body .content-type")
- .select(secondaryMediaType)
- // Assert on the static docs value
- .get(`.opblock-section-request-body textarea`)
- .should("include.text", exampleA.value)
- // Assert on the dropdown value
- .get(".opblock-section-request-body .examples-select > select")
- .find(":selected")
- .should("include.text", exampleA.summary)
-
- // Modify the value
- .get(`.opblock-section-request-body textarea`)
- .clear()
- .type(customUserInput)
- // Assert on the dropdown value
- .get(".opblock-section-request-body .examples-select > select")
- .find(":selected")
- .should("have.text", "[Modified value]")
- // Fire the operation
- .get(".execute")
- .click()
- // Assert on the curl body
- // TODO: use an interceptor instead of curl
- .get(".curl")
- .contains(
- `-d "${customUserInputExpectedCurlSubstring || customUserInput}"`
- )
-
- // Choose exampleB
- .get(".opblock-section-request-body .examples-select > select")
- .select(exampleB.key)
- // Assert on the static docs value
- .get(`.opblock-section-request-body textarea`)
- .should("include.text", exampleB.value)
- // Assert on the dropdown value
- .get(".opblock-section-request-body .examples-select > select")
- .find(":selected")
- .should("include.text", exampleB.summary)
- // Fire the operation
- .get(".execute")
- .click()
- // Assert on the curl body
- // TODO: use an interceptor instead of curl
- .get(".curl")
- .contains(`-d "${exampleB.serializedValue || exampleB.value}"`)
-
- // Ensure the modified value is still accessible
- .get(".opblock-section-request-body .examples-select > select")
- .contains("[Modified value]")
-
- // Change the media type to text/plain
- .get(".opblock-section-request-body .content-type")
- .select(primaryMediaType)
- // Assert that the static docs value didn't change
- .get(`.opblock-section-request-body textarea`)
- .should("include.text", exampleB.value)
- // Assert that the dropdown value didn't change
- .get(".opblock-section-request-body .examples-select > select")
- .find(":selected")
- .should("include.text", exampleB.summary)
- // Fire the operation
- .get(".execute")
- .click()
- // Assert on the curl body
- // TODO: use an interceptor instead of curl
- .get(".curl")
- .contains(`-d "${exampleB.serializedValue || exampleB.value}"`)
-
- // Ensure the modified value is still accessible
- .get(".opblock-section-request-body .examples-select > select")
- .contains("[Modified value]")
-
- // Choose exampleA
- .get(".opblock-section-request-body .examples-select > select")
- .select(exampleA.key)
- // Assert on the static docs value
- .get(`.opblock-section-request-body textarea`)
- .should("include.text", exampleA.value)
- // Assert on the dropdown value
- .get(".opblock-section-request-body .examples-select > select")
- .find(":selected")
- .should("include.text", exampleA.summary)
- // Fire the operation
- .get(".execute")
- .click()
- // Assert on the curl body
- // TODO: use an interceptor instead of curl
- .get(".curl")
- .contains(`-d "${exampleA.serializedValue || exampleA.value}"`)
-
- // Ensure the modified value is still the same value
- .get(".opblock-section-request-body .examples-select > select")
- .select("__MODIFIED__VALUE__")
- // Assert on the static docs value
- .get(`.opblock-section-request-body textarea`)
- .should("have.text", customUserInput.replace(/{{}/g, "{"))
- // Assert on the dropdown value
- .get(".opblock-section-request-body .examples-select > select")
- .find(":selected")
- .should("have.text", "[Modified value]")
- // Fire the operation
- .get(".execute")
- .click()
- // Assert on the curl body
- // TODO: use an interceptor instead of curl
- .get(".curl")
- .contains(
- `-d "${customUserInputExpectedCurlSubstring || customUserInput}"`
- )
- })
-
- // TODO: Try-It-Out + Try-It-Out media type changes
- }
-
- function ResponsePrimitiveTestCases({
- operationDomId,
- exampleA, // { value, key, summary }
- exampleB, // { value, key, summary }
- exampleC, // { value, key, summary }
- }) {
- it("should render the first example by default", () => {
- cy.visit("/?url=/documents/features/multiple-examples-core.openapi.yaml")
- .get(operationDomId)
- .click()
- .get(".responses-wrapper")
- .within(() => {
- cy.get(".examples-select > select")
- .find(":selected")
- .should("include.text", exampleA.summary)
- .get(".microlight")
- .should("include.text", exampleA.value)
- })
- })
- it("should render the second example", () => {
- cy.visit("/?url=/documents/features/multiple-examples-core.openapi.yaml")
- .get(operationDomId)
- .click()
- .get(".responses-wrapper")
- .within(() => {
- cy.get(".examples-select > select")
- .select(exampleB.key)
- .find(":selected")
- .should("include.text", exampleB.summary)
- .get(".microlight")
- .should("include.text", exampleB.value)
- })
- })
-
- it("should retain an example choice across media types if they share the same example", () => {
- cy.visit("/?url=/documents/features/multiple-examples-core.openapi.yaml")
- .get(operationDomId)
- .click()
- .get(".responses-wrapper")
- .within(() => {
- cy
- // Change examples
- .get(".examples-select > select")
- .select(exampleB.key)
- // Assert against dropdown value
- .find(":selected")
- .should("include.text", exampleB.summary)
- // Assert against example value
- .get(".microlight")
- .should("include.text", exampleB.value)
-
- // Change media types
- .get(".content-type")
- .select("text/plain+other")
- // Assert against dropdown value
- .get(".examples-select > select")
- .find(":selected")
- .should("include.text", exampleB.summary)
- // Assert against example value
- .get(".microlight")
- .should("include.text", exampleB.value)
- })
- })
- ;(exampleC ? it : it.skip)(
- "should reset to the first example if the new media type lacks the current example",
- () => {
- cy.visit("/?url=/documents/features/multiple-examples-core.openapi.yaml")
- .get(operationDomId)
- .click()
- .get(".responses-wrapper")
- .within(() => {
- cy
- // Change media types
- .get(".content-type")
- .select("text/plain+other")
- // Change examples
- .get(".examples-select > select")
- .select(exampleC.key)
- // Assert against dropdown value
- .find(":selected")
- .should("include.text", exampleC.summary || exampleC.key)
- // Assert against example value
- .get(".microlight")
- .should("include.text", exampleC.value)
-
- // Change media types
- .get(".content-type")
- .select("text/plain")
- // Assert against dropdown value
- .get(".examples-select > select")
- .find(":selected")
- .should("include.text", exampleA.summary)
- // Assert against example value
- .get(".microlight")
- .should("include.text", exampleA.value)
- })
- }
- )
- }
|