Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

E2E | Limit order - Able to select token #2294

Merged
merged 9 commits into from
Oct 13, 2023
24 changes: 24 additions & 0 deletions cypress/e2e/pages/limit-order.po.cy.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { LimitOrderLocators } from "../selectors/selectors.cy"
import { TokenCatalog } from "./swap-page.po.cy"
export interface myCallbackType<T> {
(myArgument: T): void
}
export const LimitOder = {

selectTokenSell(): TokenCatalog {
cy.selectToken(LimitOrderLocators.dropdownTokenSell)
return new TokenCatalog()
},
selectTokenBuy(): TokenCatalog {
cy.selectToken(LimitOrderLocators.dropdownTokenBuy)
return new TokenCatalog()
},

getCurrentTokenSell(text: myCallbackType<string>) {
cy.getContent(LimitOrderLocators.dropdownTokenSell, text)
},

getCurrentTokenBuy(text: myCallbackType<string>) {
cy.getContent(LimitOrderLocators.dropdownTokenBuy, text)
},
}
20 changes: 13 additions & 7 deletions cypress/e2e/pages/swap-page.po.cy.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { HeaderLocators, NetworkLocators, SwapPageLocators, TokenCatalogLocators, WalletLocators } from "../selectors/selectors.cy"
import { HeaderLocators, LimitOrderLocators, NetworkLocators, SwapPageLocators, TokenCatalogLocators, WalletLocators } from "../selectors/selectors.cy"

export interface myCallbackType<T> {
(myArgument: T): void
Expand All @@ -12,11 +12,11 @@ export const SwapPage = {
},

selectTokenIn(): TokenCatalog {
cy.selectTokenIn()
cy.selectToken(SwapPageLocators.dropdownTokenIn)
return new TokenCatalog()
},
selectTokenOut(): TokenCatalog {
cy.selectTokenOut()
cy.selectToken(SwapPageLocators.dropdownTokenOut)
return new TokenCatalog()
},

Expand All @@ -37,6 +37,10 @@ export const SwapPage = {
cy.get(WalletLocators.statusConnected, { timeout: 10000 }).should('be.visible')
},

goToLimitOrder() {
cy.get(LimitOrderLocators.btnLimit).click()
},

goToFarmPage() {
cy.get(HeaderLocators.dropdownEarn).click({ force: true })
cy.get(HeaderLocators.lblFarms).click({ force: true })
Expand Down Expand Up @@ -78,10 +82,12 @@ export class TokenCatalog {
cy.selectTokenBySymbol(tokenSymbol)
}

addFavoriteToken(tokenSymbol: string) {
this.searchToken(tokenSymbol)
cy.wait(2000)
cy.addFavoriteToken()
addFavoriteToken(tokenSymbol: Array<string>) {
tokenSymbol.forEach(element => {
this.searchToken(element)
cy.wait(2000)
cy.addFavoriteToken()
});
}

removeFavoriteToken(tokenSymbol: string) {
Expand Down
6 changes: 6 additions & 0 deletions cypress/e2e/selectors/selectors.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,12 @@ export const SwapPageLocators = {
btnSkipTutorial: '[data-testid=button-skip-tutorial]',
}

export const LimitOrderLocators = {
dropdownTokenSell: '[data-testid=limit-order-input-tokena] [data-testid=token-symbol-container]',
dropdownTokenBuy: '[data-testid=limit-order-input-tokenb] [data-testid=token-symbol-container]',
btnLimit: '[data-testid=limit-button]'
}

export const WalletLocators = {
btnConnectWallet: '[data-testid=button-connect-wallet]',
btnMetaMask: '[data-testid=connect-METAMASK]',
Expand Down
86 changes: 86 additions & 0 deletions cypress/e2e/specs/limit-order.e2e.cy.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
import { LimitOder } from "../pages/limit-order.po.cy"
import { SwapPage, TokenCatalog } from "../pages/swap-page.po.cy"
import { DEFAULT_URL, NETWORK, NORESULTS_TEXT, NOTOKENS_TEXT, TAG, TOKEN_SYMBOLS, UNWHITELIST_SYMBOL_TOKENS, UNWHITELIST_TOKENS } from "../selectors/constants.cy"

const unWhitelistTokens = UNWHITELIST_TOKENS[NETWORK]
const tokenSymbols = TOKEN_SYMBOLS[NETWORK]

const arrAddress = [unWhitelistTokens[0].address, unWhitelistTokens[1].address, unWhitelistTokens[2].address]
const arrSymbol = [unWhitelistTokens[0].symbol, unWhitelistTokens[1].symbol, unWhitelistTokens[2].symbol]


const tokenCatalog = new TokenCatalog();


describe(`Token Catalog on ${NETWORK}`, { tags: TAG.regression }, () => {
beforeEach(() => {
SwapPage.open(DEFAULT_URL)
SwapPage.goToLimitOrder()
})

describe('Add/remove/select token with favorite tokens list', () => {
it('Should be added, selected and removed favorite token sell', () => {
LimitOder.selectTokenSell().addFavoriteToken([tokenSymbols[0], tokenSymbols[1]])
tokenCatalog.getFavoriteTokens((list) => {
expect(list).to.include.members([tokenSymbols[1]])
})

tokenCatalog.selectFavoriteToken(tokenSymbols[1])
LimitOder.getCurrentTokenSell((text) => {
expect(text).to.equal(tokenSymbols[1])
})
LimitOder.selectTokenSell()
tokenCatalog.removeFavoriteToken(tokenSymbols[0])
tokenCatalog.getFavoriteTokens((list) => {
expect(list).not.to.include.members([tokenSymbols[0]])
})
})

it('Should be added, selected and removed favorite token buy', () => {
LimitOder.selectTokenBuy().addFavoriteToken([tokenSymbols[0], tokenSymbols[1]])
tokenCatalog.getFavoriteTokens((list) => {
expect(list).to.include.members([tokenSymbols[1]])
})

tokenCatalog.selectFavoriteToken(tokenSymbols[1])
LimitOder.getCurrentTokenBuy((text) => {
expect(text).to.equal(tokenSymbols[1])
})
LimitOder.selectTokenBuy()
tokenCatalog.removeFavoriteToken(tokenSymbols[0])
tokenCatalog.getFavoriteTokens((list) => {
expect(list).not.to.include.members([tokenSymbols[0]])
})
})
})

describe('Select token by symbol', () => {
it('Should be selected token sell by symbol successfully', () => {
LimitOder.selectTokenSell().selectTokenBySymbol(tokenSymbols[0])
LimitOder.getCurrentTokenSell((text) => {
expect(text).to.equal(tokenSymbols[0])
})
})

it('Should be selected token buy by symbol successfully', () => {
LimitOder.selectTokenBuy().selectTokenBySymbol(tokenSymbols[1])
LimitOder.getCurrentTokenBuy((text) => {
expect(text).to.equal(tokenSymbols[1])
})
})

it('Should be unselected tokenIn not exist in whitelist', () => {
LimitOder.selectTokenSell().searchToken(UNWHITELIST_SYMBOL_TOKENS[0])
tokenCatalog.getNoResultsFound((text) => {
expect(text).to.equal(NORESULTS_TEXT)
})
})

it('Should be unselected tokenOut not exist in whitelist', () => {
LimitOder.selectTokenBuy().searchToken(UNWHITELIST_SYMBOL_TOKENS[0])
tokenCatalog.getNoResultsFound((text) => {
expect(text).to.equal(NORESULTS_TEXT)
})
})
})
})
4 changes: 2 additions & 2 deletions cypress/e2e/specs/swap-page.e2e.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ describe(`Token Catalog on ${NETWORK}`, { tags: TAG.regression }, () => {
})

it('Should be added tokenIn to favorite tokens list', () => {
SwapPage.selectTokenIn().addFavoriteToken(tokenSymbols[0])
SwapPage.selectTokenIn().addFavoriteToken([tokenSymbols[0]])
tokenCatalog.getFavoriteTokens((list) => {
expect(list).to.include.members([tokenSymbols[0]])
})
Expand All @@ -63,7 +63,7 @@ describe(`Token Catalog on ${NETWORK}`, { tags: TAG.regression }, () => {
})

it('Should be added tokenOut to favorite tokens list', () => {
SwapPage.selectTokenOut().addFavoriteToken(tokenSymbols[0])
SwapPage.selectTokenOut().addFavoriteToken([tokenSymbols[0]])
tokenCatalog.getFavoriteTokens((list) => {
expect(list).to.include.members([tokenSymbols[0]])
})
Expand Down
12 changes: 4 additions & 8 deletions cypress/support/selectTokenCommands.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@ declare global {
interface Chainable {
closeTutorialPopup(): Chainable<void>
searchToken(value: string): Chainable<void>
selectTokenIn(): Chainable<void>
selectTokenOut(): Chainable<void>
selectToken(selector: string): Chainable<void>
selectTokenBySymbol(value: string): Chainable<void>
removeFavoriteToken(value: string): Chainable<void>
addFavoriteToken(): Chainable<void>
Expand All @@ -30,15 +29,12 @@ Cypress.Commands.add('closeTutorialPopup', () => {
cy.get(SwapPageLocators.btnSkipTutorial, { timeout: 30000 }).should('be.visible').click()
})

Cypress.Commands.add('selectTokenIn', () => {
cy.get(SwapPageLocators.dropdownTokenIn, { timeout: 30000 }).should('be.visible').click()
})

Cypress.Commands.add('selectTokenOut', () => {
cy.get(SwapPageLocators.dropdownTokenOut, { timeout: 30000 }).should('be.visible').click()
Cypress.Commands.add('selectToken', (selector: string) => {
cy.get(selector, { timeout: 30000 }).should('be.visible').click()
})

Cypress.Commands.add('searchToken', (value) => {
cy.get(TokenCatalogLocators.txtToken).clear()
cy.get(TokenCatalogLocators.txtToken).should('be.visible').type(value)
})

Expand Down
2 changes: 2 additions & 0 deletions src/components/swapv2/LimitOrder/LimitOrderForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -676,6 +676,7 @@ const LimitOrderForm = forwardRef<LimitOrderFormHandle, Props>(function LimitOrd
currency={currencyIn}
showCommonBases
id="create-limit-order-input-tokena"
dataTestId="limit-order-input-tokena"
maxCurrencySymbolLength={6}
filterWrap
onClickSelect={trackingTouchSelectToken}
Expand Down Expand Up @@ -703,6 +704,7 @@ const LimitOrderForm = forwardRef<LimitOrderFormHandle, Props>(function LimitOrd
estimatedUsd={estimateUSD.output}
onFocus={trackingTouchInput}
id="create-limit-order-input-tokenb"
dataTestId="limit-order-input-tokenb"
onCurrencySelect={handleOutputSelect}
positionMax="top"
showCommonBases
Expand Down
2 changes: 1 addition & 1 deletion src/pages/SwapV3/Tabs/LimitTab.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ export default function LimitTab({ onClick }: Props) {
}

return (
<Tab id="limit-button" onClick={onClick} isActive={isLimitPage}>
<Tab id="limit-button" data-testid="limit-button" onClick={onClick} isActive={isLimitPage}>
<Text fontSize={20} fontWeight={500}>
<Trans>Limit</Trans>{' '}
{numberOfInsufficientFundOrders ? (
Expand Down
Loading