Files
8e3e6d557e tests: add E2E regression tests for positions (#7533)
* tests: add E2E regression tests for positions

Add Cypress page-object and regression spec covering TC #333, #334,
#338, #339, #340 plus error-state tests for the Positions widget and
Positions tab. Tests use real on-chain data from the Polygon static
safe (MATIC_STATIC_SAFE_33) with the POSITIONS feature flag injected
via request interception.

* fix: regex change, accordion, test title

* fix: name changing

* feat: adding InjectChainFeature. Removing enableChainFeature

---------

Co-authored-by: Hanzo Dev <[email protected]>
2026-03-31 06:12:07 -07:00

82 lines
3.7 KiB
JavaScript

import * as constants from '../../support/constants'
import * as portfolio from '../pages/portfolio.pages'
import * as main from '../pages/main.page'
import { getSafes, CATEGORIES } from '../../support/safes/safesHandler.js'
let staticSafes = []
describe('Positions Tests', { defaultCommandTimeout: 60000, requestTimeout: 30000 }, () => {
before(async () => {
staticSafes = await getSafes(CATEGORIES.static)
})
beforeEach(() => {
main.injectChainFeature({
chainId: constants.networkKeys.polygon,
addFlag: constants.chainFeatures.positions,
removeFlag: 'PORTFOLIO_ENDPOINT',
dataEndpoint: constants.positionsEndpoint,
dataAlias: 'getPositions',
})
})
// TC #333
it('Verify that the Positions widget on the dashboard displays all protocols with name and fiat value', () => {
portfolio.visitAndSettle(constants.homeUrl + staticSafes.MATIC_STATIC_SAFE_33)
portfolio.verifyWidgetIsVisible()
portfolio.verifyProtocolInWidget(portfolio.protocols.aaveV3)
portfolio.verifyProtocolInWidget(portfolio.protocols.morpho)
})
// TC #334
it('Verify that clicking "View all" on the Positions widget navigates to Assets → Positions tab', () => {
portfolio.visitAndSettle(constants.homeUrl + staticSafes.MATIC_STATIC_SAFE_33)
portfolio.verifyProtocolInWidget(portfolio.protocols.aaveV3)
portfolio.clickViewAllInWidget()
portfolio.verifyOnPositionsTab()
})
// TC #338
it('Verify that the Positions tab lists all protocols with their name, icon, fiat value, and percentage share', () => {
portfolio.visitAndSettle(constants.positionsUrl + staticSafes.MATIC_STATIC_SAFE_33)
portfolio.verifyProtocolListed(portfolio.protocols.aaveV3)
portfolio.verifyProtocolListed(portfolio.protocols.morpho)
portfolio.verifyFiatValueVisible()
portfolio.verifyPercentageShareVisible()
})
// TC #339
it('Verify that each protocol accordion in the Positions tab is expandable and shows position groups with token name, symbol, position type, balance and fiat value', () => {
portfolio.visitAndSettle(constants.positionsUrl + staticSafes.MATIC_STATIC_SAFE_33)
portfolio.verifyPositionGroupVisible(portfolio.positionGroups.aaveV3Lending)
portfolio.verifyTokenNameVisible(portfolio.tokenNames.wrappedMatic)
portfolio.verifyTokenNameVisible(portfolio.tokenNames.aave)
portfolio.verifyPositionTypeVisible(portfolio.positionTypes.deposited)
portfolio.verifyFiatValueVisible()
portfolio.verifyPositionGroupVisible(portfolio.positionGroups.aaveV3Lending)
portfolio.collapseProtocolAccordion(portfolio.protocols.aaveV3)
portfolio.verifyPositionGroupNotVisible(portfolio.positionGroups.aaveV3Lending)
portfolio.expandProtocolAccordion(portfolio.protocols.aaveV3)
portfolio.verifyPositionGroupVisible(portfolio.positionGroups.aaveV3Lending)
})
// TC #340
it('Verify that the "Total positions value" title and a fiat value are visible on the Positions tab', () => {
portfolio.visitAndSettle(constants.positionsUrl + staticSafes.MATIC_STATIC_SAFE_33)
portfolio.verifyTotalPositionsTitleVisible()
portfolio.verifyFiatValueVisible()
})
it('Verify that the Positions widget is not displayed on the dashboard when the positions endpoint fails', () => {
portfolio.stubPositionsError(constants.positionsEndpoint)
portfolio.visitAndSettleError(constants.homeUrl + staticSafes.MATIC_STATIC_SAFE_33)
portfolio.verifyWidgetIsNotVisible()
})
it('Verify that the Positions tab shows an error message when the positions endpoint fails', () => {
portfolio.stubPositionsError(constants.positionsEndpoint)
portfolio.visitAndSettleError(constants.positionsUrl + staticSafes.MATIC_STATIC_SAFE_33)
portfolio.verifyPositionsUnavailableVisible()
})
})