From 60b46631decb9c1a44bf67d21ac4253165ff58da Mon Sep 17 00:00:00 2001 From: a-arias Date: Thu, 26 Mar 2026 16:22:52 -0700 Subject: [PATCH 1/4] fix fleet-clusters error missing sub-row element --- .../tests/pages/fleet/fleet-clusters.spec.ts | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/cypress/e2e/tests/pages/fleet/fleet-clusters.spec.ts b/cypress/e2e/tests/pages/fleet/fleet-clusters.spec.ts index 133037a2c61..66ceb187cc6 100644 --- a/cypress/e2e/tests/pages/fleet/fleet-clusters.spec.ts +++ b/cypress/e2e/tests/pages/fleet/fleet-clusters.spec.ts @@ -2,14 +2,15 @@ import { FleetClusterListPagePo, FleetClusterDetailsPo } from '@/cypress/e2e/po/ import ClusterManagerListPagePo from '@/cypress/e2e/po/pages/cluster-manager/cluster-manager-list.po'; import { MenuActions } from '@/cypress/support/types/menu-actions'; import { gitRepoTargetAllClustersRequest } from '@/cypress/e2e/blueprints/fleet/gitrepos'; -import { FleetApplicationListPagePo, FleetGitRepoCreateEditPo, FleetApplicationCreatePo } from '~/cypress/e2e/po/pages/fleet/fleet.cattle.io.application.po'; +import { FleetApplicationListPagePo, FleetGitRepoCreateEditPo, FleetApplicationCreatePo } from '@/cypress/e2e/po/pages/fleet/fleet.cattle.io.application.po'; import { WorkloadsDeploymentsListPagePo } from '@/cypress/e2e/po/pages/explorer/workloads/workloads-deployments.po'; import * as path from 'path'; import * as jsyaml from 'js-yaml'; import { HeaderPo } from '@/cypress/e2e/po/components/header.po'; -import { LONG_TIMEOUT_OPT, MEDIUM_TIMEOUT_OPT, VERY_LONG_TIMEOUT_OPT } from '@/cypress/support/utils/timeouts'; +import { EXTRA_LONG_TIMEOUT_OPT, LONG_TIMEOUT_OPT, MEDIUM_TIMEOUT_OPT, VERY_LONG_TIMEOUT_OPT } from '@/cypress/support/utils/timeouts'; import { FeatureFlagsPagePo } from '@/cypress/e2e/po/pages/global-settings/feature-flags.po'; import LoadingPo from '@/cypress/e2e/po/components/loading.po'; +import { qase } from '@/cypress/support/qase'; const fleetClusterListPage = new FleetClusterListPagePo(); const fleetAppBundlesListPage = new FleetApplicationListPagePo(); @@ -81,7 +82,7 @@ describe('Fleet Clusters - bundle manifests are deployed from the BundleDeployme cy.updateNamespaceFilter('local', 'none', '{"local":["all://user"]}'); }); - it('data is populated in fleet cluster list and detail view', () => { + qase(9691, it('data is populated in fleet cluster list and detail view', () => { ClusterManagerListPagePo.navTo(); clusterList.waitForPage(); clusterList.list().state(clusterName).contains('Active', VERY_LONG_TIMEOUT_OPT); @@ -108,7 +109,7 @@ describe('Fleet Clusters - bundle manifests are deployed from the BundleDeployme fleetClusterListPage.resourceTableDetails(clusterName, 2).should('be.visible'); // check cluster state in fleet fleetClusterListPage.resourceTableDetails(clusterName, 1).contains('Not Ready', MEDIUM_TIMEOUT_OPT); - fleetClusterListPage.resourceTableDetails(clusterName, 1).contains('Active', LONG_TIMEOUT_OPT); + fleetClusterListPage.resourceTableDetails(clusterName, 1).contains('Active', EXTRA_LONG_TIMEOUT_OPT); // check Git Repos ready fleetClusterListPage.resourceTableDetails(clusterName, 3).should('have.text', '1'); // check Helm Ops ready @@ -117,10 +118,6 @@ describe('Fleet Clusters - bundle manifests are deployed from the BundleDeployme fleetClusterListPage.resourceTableDetails(clusterName, 5).should('have.text', '2'); // check resources: testing https://github.com/rancher/dashboard/issues/11154 fleetClusterListPage.resourceTableDetails(clusterName, 6).contains( ' 7 ', MEDIUM_TIMEOUT_OPT); - // check cluster labels - fleetClusterListPage.list().resourceTable().sortableTable() - .subRows() - .should('contain.text', 'foo=bar'); const fleetClusterDetailsPage = new FleetClusterDetailsPo(namespace, clusterName); @@ -129,6 +126,9 @@ describe('Fleet Clusters - bundle manifests are deployed from the BundleDeployme fleetClusterDetailsPage.waitForPage(null, 'applications'); fleetClusterDetailsPage.clusterTabs().clickTabWithSelector('[data-testid="btn-applications"]'); + // check cluster labels + fleetClusterDetailsPage.clusterLabels().contains('foo: bar').scrollIntoView().should('be.visible'); + // check state fleetClusterDetailsPage.appBundlesList().resourceTableDetails(gitRepo, 1).contains('Active'); // check name @@ -140,8 +140,8 @@ describe('Fleet Clusters - bundle manifests are deployed from the BundleDeployme // check target fleetClusterDetailsPage.appBundlesList().resourceTableDetails(gitRepo, 5).contains('All'); // check cluster resources - fleetClusterDetailsPage.appBundlesList().resourceTableDetails(gitRepo, 7).should('have.text', ' 1 '); - }); + fleetClusterDetailsPage.appBundlesList().resourceTableDetails(gitRepo, 7).should('contain.text', '—'); + })); it('check all tabs are available in the details view', () => { // testing https://github.com/rancher/dashboard/issues/11155 @@ -421,6 +421,10 @@ describe('Fleet CLuster List - resources', { tags: ['@fleet', '@adminUser'] }, ( }); it('should only display action menu with allowed actions only', () => { + // Ensure table is fully loaded before interacting with action menu + fleetClusterListPage.list().resourceTable().sortableTable().checkVisible(); + fleetClusterListPage.list().resourceTable().sortableTable().checkLoadingIndicatorNotVisible(); + const constActionMenu = fleetClusterListPage.list().resourceTable().sortableTable() .rowActionMenuOpen('local'); From 88f95bff5b4a95fb74abcc3a9124670af92bacad Mon Sep 17 00:00:00 2001 From: a-arias Date: Wed, 1 Apr 2026 16:45:43 -0700 Subject: [PATCH 2/4] add clusterLabels method --- cypress/e2e/po/pages/fleet/fleet.cattle.io.cluster.po.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cypress/e2e/po/pages/fleet/fleet.cattle.io.cluster.po.ts b/cypress/e2e/po/pages/fleet/fleet.cattle.io.cluster.po.ts index 5f49cf0436d..97d8478bff5 100644 --- a/cypress/e2e/po/pages/fleet/fleet.cattle.io.cluster.po.ts +++ b/cypress/e2e/po/pages/fleet/fleet.cattle.io.cluster.po.ts @@ -65,6 +65,10 @@ export class FleetClusterDetailsPo extends BaseDetailPagePo { addAppButton() { return this.self().get('.btn').contains('Create App Bundle'); } + + clusterLabels(): Cypress.Chainable { + return this.self().find('.tag-data'); + } } export class FleetClusterEditPo extends BaseDetailPagePo { From 6ba6d8881ee51c8fcee74c9ff77b7065850832f6 Mon Sep 17 00:00:00 2001 From: a-arias Date: Wed, 1 Apr 2026 16:46:09 -0700 Subject: [PATCH 3/4] adding qase --- package.json | 1 + yarn.lock | 130 ++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 129 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 282a40de26a..631109b752d 100644 --- a/package.json +++ b/package.json @@ -188,6 +188,7 @@ "cypress-axe": "1.6.0", "cypress-delete-downloads-folder": "0.0.4", "cypress-mochawesome-reporter": "3.8.4", + "cypress-qase-reporter": "3.0.0", "cypress-real-events": "1.14.0", "cypress-terminal-report": "^7.2.0", "eslint": "7.32.0", diff --git a/yarn.lock b/yarn.lock index 78069cd0971..3943eab5014 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4867,6 +4867,16 @@ ajv@^8.0.0, ajv@^8.0.1, ajv@^8.6.2, ajv@^8.9.0: json-schema-traverse "^1.0.0" require-from-string "^2.0.2" +ajv@^8.17.1: + version "8.18.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.18.0.tgz#8864186b6738d003eb3a933172bb3833e10cefbc" + integrity sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A== + dependencies: + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + ansi-colors@^4.1.1: version "4.1.3" resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" @@ -5152,6 +5162,13 @@ astral-regex@^2.0.0: resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== +async-mutex@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/async-mutex/-/async-mutex-0.5.0.tgz#353c69a0b9e75250971a64ac203b0ebfddd75482" + integrity sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA== + dependencies: + tslib "^2.4.0" + async@^2.6.4: version "2.6.4" resolved "https://registry.npmjs.org/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" @@ -5222,6 +5239,13 @@ axios-retry@3.1.9: dependencies: is-retry-allowed "^1.1.0" +axios-retry@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/axios-retry/-/axios-retry-4.5.0.tgz#441fdc32cedf63d6abd5de5d53db3667afd4c39b" + integrity sha512-aR99oXhpEDGo0UuAlYcn2iGRds30k366Zfa05XWScR9QaQD4JYiP3/1Qt1u7YlefUOK+cn0CcwoL1oefavQUlQ== + dependencies: + is-retry-allowed "^2.2.0" + axios@1.13.2, axios@^1.7.9: version "1.13.2" resolved "https://registry.yarnpkg.com/axios/-/axios-1.13.2.tgz#9ada120b7b5ab24509553ec3e40123521117f687" @@ -5231,6 +5255,15 @@ axios@1.13.2, axios@^1.7.9: form-data "^4.0.4" proxy-from-env "^1.1.0" +axios@^1.13.5: + version "1.14.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.14.0.tgz#7c29f4cf2ea91ef05018d5aa5399bf23ed3120eb" + integrity sha512-3Y8yrqLSwjuzpXuZ0oIYZ/XGgLwUIBU3uLvbcpb0pidD9ctpShJd43KSlEEkVQg6DS0G9NKyzOvBfUtDKEyHvQ== + dependencies: + follow-redirects "^1.15.11" + form-data "^4.0.5" + proxy-from-env "^2.1.0" + babel-core@7.0.0-bridge.0: version "7.0.0-bridge.0" resolved "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" @@ -6789,6 +6822,14 @@ cypress-mochawesome-reporter@3.8.4: mochawesome-merge "^4.2.1" mochawesome-report-generator "^6.2.0" +cypress-qase-reporter@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cypress-qase-reporter/-/cypress-qase-reporter-3.0.0.tgz#21a397979ac8ab4158f8d340cd7a68c90e9f1077" + integrity sha512-Xn9S6wTPPtzUUfZs1lXIcRDj547VxxX6pCvHYbAF3esu3X4lic0LWmEldAvBrqa31TfslAOJmGOkyYq30ZfW6g== + dependencies: + qase-javascript-commons "~2.4.0" + uuid "^9.0.1" + cypress-real-events@1.14.0: version "1.14.0" resolved "https://registry.yarnpkg.com/cypress-real-events/-/cypress-real-events-1.14.0.tgz#c5495db50a2bd247f4accde983af7153566945d3" @@ -7507,6 +7548,11 @@ dot-case@^3.0.4: no-case "^3.0.4" tslib "^2.0.3" +dotenv-expand@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-10.0.0.tgz#12605d00fb0af6d0a592e6558585784032e4ef37" + integrity sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A== + dotenv-expand@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" @@ -7517,6 +7563,11 @@ dotenv@^10.0.0: resolved "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== +dotenv@^16.0.0: + version "16.6.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.6.1.tgz#773f0e69527a8315c7285d5ee73c4459d20a8020" + integrity sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow== + dunder-proto@^1.0.0, dunder-proto@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" @@ -7669,6 +7720,15 @@ entities@~2.1.0: resolved "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== +env-schema@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/env-schema/-/env-schema-5.2.1.tgz#7af7d5464690f18c862c21f9b1fe662d3ae6485a" + integrity sha512-gWMNrQ3dVHAZcCx7epiFwgXcyfBh4heD/6+OK3bEbke3uL+KqwYA9nUOwzJyRZh1cJOFcwdPuY1n0GKSFlSWAg== + dependencies: + ajv "^8.0.0" + dotenv "^16.0.0" + dotenv-expand "^10.0.0" + error-ex@^1.3.1: version "1.3.2" resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -8800,6 +8860,11 @@ follow-redirects@^1.0.0, follow-redirects@^1.15.6: resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== +follow-redirects@^1.15.11: + version "1.15.11" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340" + integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ== + for-each@^0.3.3: version "0.3.3" resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" @@ -8874,6 +8939,17 @@ form-data@^4.0.4: hasown "^2.0.2" mime-types "^2.1.12" +form-data@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.5.tgz#b49e48858045ff4cbf6b03e1805cebcad3679053" + integrity sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + hasown "^2.0.2" + mime-types "^2.1.12" + form-data@~2.3.2: version "2.3.3" resolved "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" @@ -10213,6 +10289,11 @@ is-retry-allowed@^1.1.0: resolved "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== +is-retry-allowed@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz#88f34cbd236e043e71b6932d09b0c65fb7b4d71d" + integrity sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg== + is-set@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" @@ -11471,6 +11552,11 @@ lodash.merge@^4.6.2: resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== +lodash.mergewith@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55" + integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ== + lodash.once@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" @@ -11746,7 +11832,7 @@ mime-db@1.52.0: resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz#3cb63cd820fc29896d9d4e8c32ab4fcd74ccb447" integrity sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg== -mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@^2.1.34, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@^2.1.34, mime-types@^2.1.35, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -13304,6 +13390,11 @@ proxy-from-env@^1.1.0: resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== +proxy-from-env@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-2.1.0.tgz#a7487568adad577cfaaa7e88c49cab3ab3081aba" + integrity sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA== + ps-tree@1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz#5e7425b89508736cdd4f2224d028f7bb3f722ebd" @@ -13356,6 +13447,41 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== +qase-api-client@~1.1.1: + version "1.1.5" + resolved "https://registry.yarnpkg.com/qase-api-client/-/qase-api-client-1.1.5.tgz#95faaac65a8cd13e2fb510af9134240845cd5593" + integrity sha512-Ketwqmx2WURSFtMflIbwHM6naJZjssFPX0uBU6Xbdwi33i8pZLeJZFhL2cWFvELDNJdUSod7G8wMt84e+6cyeg== + dependencies: + axios "^1.13.5" + axios-retry "^4.5.0" + +qase-api-v2-client@~1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/qase-api-v2-client/-/qase-api-v2-client-1.0.6.tgz#706a9d8eec6ce093fc443f05b85ccceee68ef947" + integrity sha512-wAZLIvJHwnhfurCBMCF8Rubzk9fcQgsYCPthSF7hYVCbArsUlfAsroBat8AIC1dcE7YP/8P2bb9RijDED06laA== + dependencies: + axios "^1.13.5" + axios-retry "^4.5.0" + +qase-javascript-commons@~2.4.0: + version "2.4.18" + resolved "https://registry.yarnpkg.com/qase-javascript-commons/-/qase-javascript-commons-2.4.18.tgz#cf799f6293cac372c64465f1f302199e2660d61f" + integrity sha512-H/oU3AP/rD6AXh0O/bG52r/La5jrGV39HpZOvFzI7b7+G8Uuh1wip7HGSSpi/Tp9EI2gAPrx2IWAeH9gG6tKrw== + dependencies: + ajv "^8.17.1" + async-mutex "~0.5.0" + chalk "^4.1.2" + env-schema "^5.2.1" + form-data "^4.0.5" + lodash.get "^4.4.2" + lodash.merge "^4.6.2" + lodash.mergewith "^4.6.2" + mime-types "^2.1.35" + qase-api-client "~1.1.1" + qase-api-v2-client "~1.0.4" + strip-ansi "^6.0.1" + uuid "^9.0.1" + qs@6.11.0: version "6.11.0" resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" @@ -15119,7 +15245,7 @@ tslib@^1.8.1: resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.6.2: +tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.6.2: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== From 3322ceca01518a1eca744da132e40330fc9bf03b Mon Sep 17 00:00:00 2001 From: a-arias Date: Wed, 1 Apr 2026 16:46:27 -0700 Subject: [PATCH 4/4] adding qase.ts file --- cypress/support/qase.ts | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 cypress/support/qase.ts diff --git a/cypress/support/qase.ts b/cypress/support/qase.ts new file mode 100644 index 00000000000..75ddb24ca68 --- /dev/null +++ b/cypress/support/qase.ts @@ -0,0 +1,37 @@ +/* global Mocha */ +/* eslint-disable no-console */ +let qaseImport: any; + +try { + // Try to use the qase function from the reporter if available + // This is the recommended way for cypress-qase-reporter 3.0.0+ + qaseImport = require('cypress-qase-reporter/mocha').qase; +} catch (e) { + // Fallback to custom implementation if the import fails +} + +/** + * Custom wrapper for Qase ID integration. + * If the official reporter is available, it delegates to it. + * Otherwise, it appends the Qase ID to the test title manually. + */ +export const qase = (caseId: number | number[], test: Mocha.Test): Mocha.Test => { + if (qaseImport) { + try { + return qaseImport(caseId, test); + } catch (e) { + console.warn('Qase reporter import failed at runtime, falling back to manual title update.'); + } + } + + // Custom fallback implementation + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + if (!test || !test.title) { + return test; + } + const caseIds = Array.isArray(caseId) ? caseId : [caseId]; + + test.title = `${ test.title } (Qase ID: ${ caseIds.join(',') })`; + + return test; +};