This update required changing the configuration and test directory structure. Some tests needed to be amended as well to compensate for new Cypress APIs.
292 lines
9.4 KiB
JavaScript
292 lines
9.4 KiB
JavaScript
describe("Deep linking feature", () => {
|
|
describe("in Swagger 2", () => {
|
|
const swagger2BaseUrl = "/?deepLinking=true&url=/documents/features/deep-linking.swagger.yaml"
|
|
|
|
describe("regular Operation", () => {
|
|
OperationDeeplinkTestFactory({
|
|
baseUrl: swagger2BaseUrl,
|
|
elementToGet: ".opblock-get",
|
|
correctElementId: "operations-myTag-myOperation",
|
|
correctFragment: "#/myTag/myOperation",
|
|
correctHref: "#/myTag/myOperation"
|
|
})
|
|
})
|
|
|
|
describe("Operation with whitespace in tag+id", () => {
|
|
const elementToGet = ".opblock-post"
|
|
const correctFragment = "#/my%20Tag/my%20Operation"
|
|
|
|
OperationDeeplinkTestFactory({
|
|
baseUrl: swagger2BaseUrl,
|
|
elementToGet,
|
|
correctElementId: "operations-my_Tag-my_Operation",
|
|
correctFragment,
|
|
correctHref: "#/my%20Tag/my%20Operation"
|
|
})
|
|
|
|
const legacyFragment = "#/my_Tag/my_Operation"
|
|
|
|
it("should expand the operation when reloaded and provided the legacy fragment", () => {
|
|
cy.visit(`${swagger2BaseUrl}${legacyFragment}`)
|
|
.reload()
|
|
.get(`${elementToGet}.is-open`)
|
|
.should("exist")
|
|
})
|
|
|
|
it.skip("should rewrite to the correct fragment when provided the legacy fragment", () => {
|
|
cy.visit(`${swagger2BaseUrl}${legacyFragment}`)
|
|
.reload()
|
|
.window()
|
|
.should("have.deep.property", "location.hash", correctFragment)
|
|
})
|
|
})
|
|
|
|
describe("Operation with underscores in tag+id", () => {
|
|
OperationDeeplinkTestFactory({
|
|
baseUrl: swagger2BaseUrl,
|
|
elementToGet: ".opblock-patch",
|
|
correctElementId: "operations-underscore_Tag-underscore_Operation",
|
|
correctFragment: "#/underscore_Tag/underscore_Operation",
|
|
correctHref: "#/underscore_Tag/underscore_Operation"
|
|
})
|
|
})
|
|
|
|
describe("Operation with UTF-16 characters", () => {
|
|
OperationDeeplinkTestFactory({
|
|
baseUrl: swagger2BaseUrl,
|
|
elementToGet: ".opblock-head",
|
|
correctElementId: "operations-шеллы-пошел",
|
|
correctFragment: "#/%D1%88%D0%B5%D0%BB%D0%BB%D1%8B/%D0%BF%D0%BE%D1%88%D0%B5%D0%BB",
|
|
correctHref: "#/шеллы/пошел"
|
|
})
|
|
})
|
|
|
|
describe("Operation with no operationId", () => {
|
|
OperationDeeplinkTestFactory({
|
|
baseUrl: swagger2BaseUrl,
|
|
elementToGet: ".opblock-put",
|
|
correctElementId: "operations-tagTwo-put_noOperationId",
|
|
correctFragment: "#/tagTwo/put_noOperationId",
|
|
correctHref: "#/tagTwo/put_noOperationId"
|
|
})
|
|
})
|
|
|
|
describe("regular Tag", () => {
|
|
TagDeeplinkTestFactory({
|
|
isTagCase: true,
|
|
baseUrl: swagger2BaseUrl,
|
|
elementToGet: `.opblock-tag[data-tag="myTag"][data-is-open="true"]`,
|
|
correctElementId: "operations-tag-myTag",
|
|
correctFragment: "#/myTag",
|
|
correctHref: "#/myTag"
|
|
})
|
|
})
|
|
|
|
describe("Tag with whitespace", () => {
|
|
TagDeeplinkTestFactory({
|
|
isTagCase: true,
|
|
baseUrl: swagger2BaseUrl,
|
|
elementToGet: `.opblock-tag[data-tag="my Tag"][data-is-open="true"]`,
|
|
correctElementId: "operations-tag-my_Tag",
|
|
correctFragment: "#/my%20Tag",
|
|
correctHref: "#/my%20Tag"
|
|
})
|
|
})
|
|
})
|
|
describe("in OpenAPI 3", () => {
|
|
const openAPI3BaseUrl = "/?deepLinking=true&url=/documents/features/deep-linking.openapi.yaml"
|
|
|
|
describe("regular Operation", () => {
|
|
OperationDeeplinkTestFactory({
|
|
baseUrl: openAPI3BaseUrl,
|
|
elementToGet: ".opblock-get",
|
|
correctElementId: "operations-myTag-myOperation",
|
|
correctFragment: "#/myTag/myOperation",
|
|
correctHref: "#/myTag/myOperation"
|
|
})
|
|
})
|
|
|
|
describe("Operation with whitespace in tag+id", () => {
|
|
const elementToGet = ".opblock-post"
|
|
const correctFragment = "#/my%20Tag/my%20Operation"
|
|
|
|
OperationDeeplinkTestFactory({
|
|
baseUrl: openAPI3BaseUrl,
|
|
elementToGet: ".opblock-post",
|
|
correctElementId: "operations-my_Tag-my_Operation",
|
|
correctFragment,
|
|
correctHref: "#/my%20Tag/my%20Operation"
|
|
})
|
|
|
|
const legacyFragment = "#/my_Tag/my_Operation"
|
|
|
|
it("should expand the operation when reloaded and provided the legacy fragment", () => {
|
|
cy.visit(`${openAPI3BaseUrl}${legacyFragment}`)
|
|
.reload()
|
|
.get(`${elementToGet}.is-open`)
|
|
.should("exist")
|
|
})
|
|
|
|
|
|
it.skip("should rewrite to the correct fragment when provided the legacy fragment", () => {
|
|
cy.visit(`${openAPI3BaseUrl}${legacyFragment}`)
|
|
.reload()
|
|
.window()
|
|
.should("have.deep.property", "location.hash", correctFragment)
|
|
})
|
|
})
|
|
|
|
describe("Operation with underscores in tag+id", () => {
|
|
OperationDeeplinkTestFactory({
|
|
baseUrl: openAPI3BaseUrl,
|
|
elementToGet: ".opblock-patch",
|
|
correctElementId: "operations-underscore_Tag-underscore_Operation",
|
|
correctFragment: "#/underscore_Tag/underscore_Operation",
|
|
correctHref: "#/underscore_Tag/underscore_Operation"
|
|
})
|
|
})
|
|
|
|
describe("Operation with UTF-16 characters", () => {
|
|
OperationDeeplinkTestFactory({
|
|
baseUrl: openAPI3BaseUrl,
|
|
elementToGet: ".opblock-head",
|
|
correctElementId: "operations-шеллы-пошел",
|
|
correctFragment: "#/%D1%88%D0%B5%D0%BB%D0%BB%D1%8B/%D0%BF%D0%BE%D1%88%D0%B5%D0%BB",
|
|
correctHref: "#/шеллы/пошел"
|
|
})
|
|
})
|
|
|
|
describe("Operation with no operationId", () => {
|
|
OperationDeeplinkTestFactory({
|
|
baseUrl: openAPI3BaseUrl,
|
|
elementToGet: ".opblock-put",
|
|
correctElementId: "operations-tagTwo-put_noOperationId",
|
|
correctFragment: "#/tagTwo/put_noOperationId",
|
|
correctHref: "#/tagTwo/put_noOperationId"
|
|
})
|
|
})
|
|
|
|
describe("regular Tag", () => {
|
|
TagDeeplinkTestFactory({
|
|
isTagCase: true,
|
|
baseUrl: openAPI3BaseUrl,
|
|
elementToGet: `.opblock-tag[data-tag="myTag"][data-is-open="true"]`,
|
|
correctElementId: "operations-tag-myTag",
|
|
correctFragment: "#/myTag",
|
|
correctHref: "#/myTag"
|
|
})
|
|
})
|
|
|
|
describe("Tag with whitespace", () => {
|
|
TagDeeplinkTestFactory({
|
|
isTagCase: true,
|
|
baseUrl: openAPI3BaseUrl,
|
|
elementToGet: `.opblock-tag[data-tag="my Tag"][data-is-open="true"]`,
|
|
correctElementId: "operations-tag-my_Tag",
|
|
correctFragment: "#/my%20Tag",
|
|
correctHref: "#/my%20Tag"
|
|
})
|
|
})
|
|
})
|
|
})
|
|
|
|
function OperationDeeplinkTestFactory({ baseUrl, elementToGet, correctElementId, correctFragment, correctHref }) {
|
|
it("should generate a correct element ID", () => {
|
|
cy.visit(baseUrl)
|
|
.get(elementToGet)
|
|
.should("have.id", correctElementId)
|
|
})
|
|
|
|
it("should add the correct element fragment to the URL when expanded", () => {
|
|
cy.visit(baseUrl)
|
|
.get(elementToGet)
|
|
.click()
|
|
cy.location().should((loc) => {
|
|
expect(loc.hash).to.eq(correctFragment)
|
|
})
|
|
})
|
|
|
|
it("should provide an anchor link that has the correct fragment as href", () => {
|
|
cy.visit(baseUrl)
|
|
.get(elementToGet)
|
|
.find("a")
|
|
.should("have.attr", "href", correctHref)
|
|
.click()
|
|
cy.location().should((loc) => {
|
|
expect(loc.hash).to.eq(correctFragment)
|
|
})
|
|
})
|
|
|
|
it("should expand the operation when reloaded", () => {
|
|
cy.visit(`${baseUrl}${correctFragment}`)
|
|
.get(`${elementToGet}.is-open`)
|
|
.should("exist")
|
|
})
|
|
|
|
it("should retain the correct fragment when reloaded", () => {
|
|
cy.visit(`${baseUrl}${correctFragment}`)
|
|
.reload()
|
|
.should("exist")
|
|
cy.location().should((loc) => {
|
|
expect(loc.hash).to.eq(correctFragment)
|
|
})
|
|
})
|
|
|
|
it("should expand a tag with docExpansion disabled", () => {
|
|
cy.visit(`${baseUrl}&docExpansion=none${correctFragment}`)
|
|
.get(`.opblock-tag-section.is-open`)
|
|
.should("have.length", 1)
|
|
})
|
|
|
|
it("should expand an operation with docExpansion disabled", () => {
|
|
cy.visit(`${baseUrl}&docExpansion=none${correctFragment}`)
|
|
.get(`.opblock.is-open`)
|
|
.should("have.length", 1)
|
|
})
|
|
}
|
|
|
|
function TagDeeplinkTestFactory({ baseUrl, elementToGet, correctElementId, correctFragment, correctHref, isTagCase = false }) {
|
|
it("should generate a correct element ID", () => {
|
|
cy.visit(baseUrl)
|
|
.get(elementToGet)
|
|
.should("have.id", correctElementId)
|
|
})
|
|
|
|
it("should add the correct element fragment to the URL when expanded", () => {
|
|
cy.visit(baseUrl)
|
|
.get(elementToGet)
|
|
.click()
|
|
.click() // tags need two clicks because they're expanded by default
|
|
cy.location().should((loc) => {
|
|
expect(loc.hash).to.eq(correctFragment)
|
|
})
|
|
})
|
|
|
|
it("should provide an anchor link that has the correct fragment as href", () => {
|
|
cy.visit(baseUrl)
|
|
.get(elementToGet)
|
|
.find("a")
|
|
.should("have.attr", "href", correctHref)
|
|
})
|
|
|
|
it("should expand the tag when reloaded", () => {
|
|
cy.visit(`${baseUrl}${correctFragment}`)
|
|
.get(`${elementToGet}[data-is-open="true"]`)
|
|
.should("exist")
|
|
})
|
|
|
|
it("should retain the correct fragment when reloaded", () => {
|
|
cy.visit(`${baseUrl}${correctFragment}`)
|
|
.reload()
|
|
.should("exist")
|
|
cy.location().should((loc) => {
|
|
expect(loc.hash).to.eq(correctFragment)
|
|
})
|
|
})
|
|
|
|
it("should expand a tag with docExpansion disabled", () => {
|
|
cy.visit(`${baseUrl}&docExpansion=none${correctFragment}`)
|
|
.get(`.opblock-tag-section.is-open`)
|
|
.should("have.length", 1)
|
|
})
|
|
} |