Skip to content

Commit

Permalink
Rewrite convert stables tests (#517)
Browse files Browse the repository at this point in the history
  • Loading branch information
oskarvu authored Dec 21, 2024
1 parent 070568f commit 3a8aa84
Show file tree
Hide file tree
Showing 10 changed files with 684 additions and 663 deletions.
Original file line number Diff line number Diff line change
@@ -1,123 +1,124 @@
// import { DialogPageObject, TxOverviewWithRoute } from '@/features/dialogs/common/Dialog.PageObject'
// import { testIds } from '@/ui/utils/testIds'
// import { Locator, Page, expect } from '@playwright/test'

// export class ConvertStablesDialogPageObject extends DialogPageObject {
// constructor(page: Page) {
// super(page, /Convert Tokens/)
// }

// // # region locators
// locateAssetInSelector(): Locator {
// return this.region.getByTestId(testIds.component.AssetSelector.trigger).first()
// }

// locateAssetOutSelector(): Locator {
// return this.region.getByTestId(testIds.component.AssetSelector.trigger).last()
// }

// locateAssetInInput(): Locator {
// return this.region.getByTestId(testIds.component.AssetInput.input).first()
// }

// locateAssetOutInput(): Locator {
// return this.region.getByTestId(testIds.component.AssetInput.input).last()
// }

// locateAssetInMaxButton(): Locator {
// return this.region.getByTestId(testIds.component.AssetInput.maxButton).first()
// }

// locateAssetOutMaxButton(): Locator {
// return this.region.getByTestId(testIds.component.AssetInput.maxButton).last()
// }
// // #endregion locators

// // #region actions
// async selectAssetInAction(asset: string): Promise<void> {
// const selector = this.locateAssetInSelector()
// await this.selectOptionByLabelAction(selector, asset)
// }

// async selectAssetOutAction(asset: string): Promise<void> {
// const selector = this.locateAssetOutSelector()
// await this.selectOptionByLabelAction(selector, asset)
// }

// async openAssetInSelectorAction(): Promise<void> {
// await this.locateAssetInSelector().click()
// }

// async openAssetOutSelectorAction(): Promise<void> {
// await this.locateAssetOutSelector().click()
// }

// async fillAmountInAction(amount: number): Promise<void> {
// await this.locateAssetInInput().fill(amount.toString())
// }

// async fillAmountOutAction(amount: number): Promise<void> {
// await this.locateAssetOutInput().fill(amount.toString())
// }

// async clickMaxAmountInAction(): Promise<void> {
// await this.locateAssetInMaxButton().click()
// }

// async clickMaxAmountOutAction(): Promise<void> {
// await this.locateAssetOutMaxButton().click()
// }

// async clickBackToSavingsButton(): Promise<void> {
// await this.page.getByRole('button', { name: 'Back to Savings' }).click()
// await this.region.waitFor({
// state: 'detached',
// })
// }
// // #endregion actions

// // #region assertions
// async expectSuccessPage(): Promise<void> {
// await expect(this.page.getByText('Congrats, all done!')).toBeVisible()
// }

// async expectTransactionOverview(transactionOverview: TxOverviewWithRoute): Promise<void> {
// await this.expectTransactionOverviewRoute(transactionOverview.routeItems)
// await this.expectOutcomeText(transactionOverview.outcome)
// if (transactionOverview.outcomeUsd) {
// await this.expectOutcomeUsdText(transactionOverview.outcomeUsd)
// }
// }

// async expectAssetInSelectorSelectedOption(option: string): Promise<void> {
// await expect(this.locateAssetInSelector()).toHaveText(option)
// }

// async expectAssetOutSelectorSelectedOption(option: string): Promise<void> {
// await expect(this.locateAssetOutSelector()).toHaveText(option)
// }

// async expectSelectorOptions(options: string[]): Promise<void> {
// const selectorOptions = await this.page.getByTestId(testIds.component.AssetSelector.option).all()
// expect(selectorOptions).toHaveLength(options.length)

// for (const [index, option] of selectorOptions.entries()) {
// await expect(option).toContainText(options[index]!)
// }
// }

// async expectAssetInInputValue(value: string): Promise<void> {
// await expect(this.locateAssetInInput()).toHaveValue(value)
// }

// async expectAssetOutInputValue(value: string): Promise<void> {
// await expect(this.locateAssetOutInput()).toHaveValue(value)
// }

// async expectSingleInputError(error: string): Promise<void> {
// const inputError = this.page.getByTestId(testIds.component.AssetInput.error)
// await expect(inputError).toHaveCount(1)
// await expect(inputError).toHaveText(error)
// }
// // #endregion assertions
// }
import { DialogPageObject, TxOverviewWithRoute } from '@/features/dialogs/common/Dialog.PageObject'
import { TestContext } from '@/test/e2e/setup'
import { testIds } from '@/ui/utils/testIds'
import { Locator, expect } from '@playwright/test'

export class ConvertStablesDialogPageObject extends DialogPageObject {
constructor(testContext: TestContext<any>) {
super({ testContext, header: /Convert Tokens/ })
}

// # region locators
locateAssetInSelector(): Locator {
return this.region.getByTestId(testIds.component.AssetSelector.trigger).first()
}

locateAssetOutSelector(): Locator {
return this.region.getByTestId(testIds.component.AssetSelector.trigger).last()
}

locateAssetInInput(): Locator {
return this.region.getByTestId(testIds.component.AssetInput.input).first()
}

locateAssetOutInput(): Locator {
return this.region.getByTestId(testIds.component.AssetInput.input).last()
}

locateAssetInMaxButton(): Locator {
return this.region.getByTestId(testIds.component.AssetInput.maxButton).first()
}

locateAssetOutMaxButton(): Locator {
return this.region.getByTestId(testIds.component.AssetInput.maxButton).last()
}
// #endregion locators

// #region actions
async selectAssetInAction(asset: string): Promise<void> {
const selector = this.locateAssetInSelector()
await this.selectOptionByLabelAction(selector, asset)
}

async selectAssetOutAction(asset: string): Promise<void> {
const selector = this.locateAssetOutSelector()
await this.selectOptionByLabelAction(selector, asset)
}

async openAssetInSelectorAction(): Promise<void> {
await this.locateAssetInSelector().click()
}

async openAssetOutSelectorAction(): Promise<void> {
await this.locateAssetOutSelector().click()
}

async fillAmountInAction(amount: number): Promise<void> {
await this.locateAssetInInput().fill(amount.toString())
}

async fillAmountOutAction(amount: number): Promise<void> {
await this.locateAssetOutInput().fill(amount.toString())
}

async clickMaxAmountInAction(): Promise<void> {
await this.locateAssetInMaxButton().click()
}

async clickMaxAmountOutAction(): Promise<void> {
await this.locateAssetOutMaxButton().click()
}

async clickBackToSavingsButton(): Promise<void> {
await this.page.getByRole('button', { name: 'Back to Savings' }).click()
await this.region.waitFor({
state: 'detached',
})
}
// #endregion actions

// #region assertions
async expectSuccessPage(): Promise<void> {
await expect(this.page.getByText('Congrats, all done!')).toBeVisible()
}

async expectTransactionOverview(transactionOverview: TxOverviewWithRoute): Promise<void> {
await this.expectTransactionOverviewRoute(transactionOverview.routeItems)
await this.expectOutcomeText(transactionOverview.outcome)
if (transactionOverview.outcomeUsd) {
await this.expectOutcomeUsdText(transactionOverview.outcomeUsd)
}
}

async expectAssetInSelectorSelectedOption(option: string): Promise<void> {
await expect(this.locateAssetInSelector()).toHaveText(option)
}

async expectAssetOutSelectorSelectedOption(option: string): Promise<void> {
await expect(this.locateAssetOutSelector()).toHaveText(option)
}

async expectSelectorOptions(options: string[]): Promise<void> {
const selectorOptions = await this.page.getByTestId(testIds.component.AssetSelector.option).all()
expect(selectorOptions).toHaveLength(options.length)

for (const [index, option] of selectorOptions.entries()) {
await expect(option).toContainText(options[index]!)
}
}

async expectAssetInInputValue(value: string): Promise<void> {
await expect(this.locateAssetInInput()).toHaveValue(value)
}

async expectAssetOutInputValue(value: string): Promise<void> {
await expect(this.locateAssetOutInput()).toHaveValue(value)
}

async expectSingleInputError(error: string): Promise<void> {
const inputError = this.page.getByTestId(testIds.component.AssetInput.error)
await expect(inputError).toHaveCount(1)
await expect(inputError).toHaveText(error)
}
// #endregion assertions
}
Original file line number Diff line number Diff line change
@@ -1,75 +1,77 @@
// import { SavingsPageObject } from '@/pages/Savings.PageObject'
// import { DEFAULT_BLOCK_NUMBER } from '@/test/e2e/constants'
// import { setupFork } from '@/test/e2e/forking/setupFork'
// import { setup } from '@/test/e2e/setup'
// import { test } from '@playwright/test'
// import { mainnet } from 'viem/chains'
// import { ConvertStablesDialogPageObject } from './ConvertStablesDialog.PageObject'
import { SavingsPageObject } from '@/pages/Savings.PageObject'
import { DEFAULT_BLOCK_NUMBER } from '@/test/e2e/constants'
import { setup } from '@/test/e2e/setup'
import { test } from '@playwright/test'
import { mainnet } from 'viem/chains'
import { ConvertStablesDialogPageObject } from './ConvertStablesDialog.PageObject'

// test.describe('Convert Stables Dialog', () => {
// const fork = setupFork({ blockNumber: DEFAULT_BLOCK_NUMBER, chainId: mainnet.id, useTenderlyVnet: true })
// let savingsPage: SavingsPageObject
// let convertStablesDialog: ConvertStablesDialogPageObject
test.describe('Convert Stables Dialog', () => {
let savingsPage: SavingsPageObject
let convertStablesDialog: ConvertStablesDialogPageObject

// test.beforeEach(async ({ page }) => {
// await setup(page, fork, {
// initialPage: 'savings',
// account: {
// type: 'connected-random',
// assetBalances: {
// ETH: 1,
// DAI: 10_000,
// },
// },
// })
test.beforeEach(async ({ page }) => {
const testContext = await setup(page, {
blockchain: {
blockNumber: DEFAULT_BLOCK_NUMBER,
chainId: mainnet.id,
},
initialPage: 'savings',
account: {
type: 'connected-random',
assetBalances: {
ETH: 1,
DAI: 10_000,
},
},
})

// savingsPage = new SavingsPageObject(page)
// await savingsPage.clickConvertStablesButtonAction()
// convertStablesDialog = new ConvertStablesDialogPageObject(page)
// })
savingsPage = new SavingsPageObject(testContext)
await savingsPage.clickConvertStablesButtonAction()
convertStablesDialog = new ConvertStablesDialogPageObject(testContext)
})

// test('has correct selectors configuration', async ({ page }) => {
// await convertStablesDialog.expectAssetInSelectorSelectedOption('DAI')
// await convertStablesDialog.openAssetInSelectorAction()
// await convertStablesDialog.expectSelectorOptions(['USDC', 'USDS'])
// await page.keyboard.press('Escape') // closing selector
test('has correct selectors configuration', async ({ page }) => {
await convertStablesDialog.expectAssetInSelectorSelectedOption('DAI')
await convertStablesDialog.openAssetInSelectorAction()
await convertStablesDialog.expectSelectorOptions(['USDC', 'USDS'])
await page.keyboard.press('Escape') // closing selector

// await convertStablesDialog.expectAssetOutSelectorSelectedOption('USDC')
// await convertStablesDialog.openAssetOutSelectorAction()
// await convertStablesDialog.expectSelectorOptions(['USDS']) // no DAI option cause already selected in first selector
// })
await convertStablesDialog.expectAssetOutSelectorSelectedOption('USDC')
await convertStablesDialog.openAssetOutSelectorAction()
await convertStablesDialog.expectSelectorOptions(['USDS']) // no DAI option cause already selected in first selector
})

// test('first selector can override second selector', async () => {
// await convertStablesDialog.expectAssetInSelectorSelectedOption('DAI')
// await convertStablesDialog.expectAssetOutSelectorSelectedOption('USDC')
test('first selector can override second selector', async () => {
await convertStablesDialog.expectAssetInSelectorSelectedOption('DAI')
await convertStablesDialog.expectAssetOutSelectorSelectedOption('USDC')

// await convertStablesDialog.selectAssetInAction('USDC') // choosing already selected in second selector option
await convertStablesDialog.selectAssetInAction('USDC') // choosing already selected in second selector option

// await convertStablesDialog.expectAssetOutSelectorSelectedOption('DAI') // fist selector can override second
// await convertStablesDialog.openAssetOutSelectorAction()
// await convertStablesDialog.expectSelectorOptions(['USDS'])
// })
await convertStablesDialog.expectAssetOutSelectorSelectedOption('DAI') // fist selector can override second
await convertStablesDialog.openAssetOutSelectorAction()
await convertStablesDialog.expectSelectorOptions(['USDS'])
})

// test('changing value of any input updates both inputs', async () => {
// await convertStablesDialog.fillAmountInAction(5000)
// await convertStablesDialog.expectAssetInInputValue('5000')
// await convertStablesDialog.expectAssetOutInputValue('5000')
test('changing value of any input updates both inputs', async () => {
await convertStablesDialog.fillAmountInAction(5000)
await convertStablesDialog.expectAssetInInputValue('5000')
await convertStablesDialog.expectAssetOutInputValue('5000')

// await convertStablesDialog.clickMaxAmountInAction()
// await convertStablesDialog.expectAssetInInputValue('10000')
// await convertStablesDialog.expectAssetOutInputValue('10000')
await convertStablesDialog.clickMaxAmountInAction()
await convertStablesDialog.expectAssetInInputValue('10000')
await convertStablesDialog.expectAssetOutInputValue('10000')

// await convertStablesDialog.fillAmountOutAction(8_000)
// await convertStablesDialog.expectAssetInInputValue('8000')
// await convertStablesDialog.expectAssetOutInputValue('8000')
await convertStablesDialog.fillAmountOutAction(8_000)
await convertStablesDialog.expectAssetInInputValue('8000')
await convertStablesDialog.expectAssetOutInputValue('8000')

// await convertStablesDialog.clickMaxAmountOutAction()
// await convertStablesDialog.expectAssetInInputValue('10000')
// await convertStablesDialog.expectAssetOutInputValue('10000')
// })
await convertStablesDialog.clickMaxAmountOutAction()
await convertStablesDialog.expectAssetInInputValue('10000')
await convertStablesDialog.expectAssetOutInputValue('10000')
})

// test('displays validation error only for first input', async () => {
// await convertStablesDialog.fillAmountInAction(20_000)
// await convertStablesDialog.expectSingleInputError('Exceeds your balance')
// })
// })
test('displays validation error only for first input', async () => {
await convertStablesDialog.fillAmountInAction(20_000)
await convertStablesDialog.expectSingleInputError('Exceeds your balance')
})
})
Loading

0 comments on commit 3a8aa84

Please sign in to comment.