Skip to content

Commit bea1281

Browse files
committed
Dashboard and swap code refactoring
1 parent 4d6606c commit bea1281

File tree

19 files changed

+2315
-335
lines changed

19 files changed

+2315
-335
lines changed

e2e/.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
node_modules
22
videos
33
screenshots
4-
env
4+
env
5+
e2e/tests/reports

e2e/cypress.config.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@ const { defineConfig } = require('cypress')
33
module.exports = defineConfig({
44
// setupNodeEvents can be defined in either
55
// the e2e or component configuration
6+
reporter: 'cypress-mochawesome-reporter',
67
e2e: {
78
setupNodeEvents(on, config) {
8-
on('before:browser:launch', (browser = {}, launchOptions) => {
9-
/* ... */
10-
})
9+
require('cypress-mochawesome-reporter/plugin')(on);
10+
// on('before:browser:launch', (browser = {}, launchOptions) => {
11+
// /* ... */
12+
// })
1113
},
1214
baseUrl: "https://dev.pangolin.exchange/#",
1315
supportFile: false,

e2e/cypress/cypress.config.js

Lines changed: 0 additions & 9 deletions
This file was deleted.

e2e/cypress/cypress/fixtures/example.json

Lines changed: 0 additions & 5 deletions
This file was deleted.

e2e/cypress/cypress/support/commands.js

Lines changed: 0 additions & 25 deletions
This file was deleted.

e2e/cypress/cypress/support/e2e.js

Lines changed: 0 additions & 20 deletions
This file was deleted.

e2e/cypress/e2e/Dashboard.cy.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import selectors from "../fixtures/selectors.json"
33
import data from '../fixtures/pangolin-data'
44
// import { socialLinks } from '../support/src/dashboard'
5-
import { pangolinUsefulLinks } from '../support/src/PangolinUsefulLinks'
5+
// import { pangolinUsefulLinks } from '../support/src/PangolinUsefulLinks'
66
// import {switchingValues} from '../support/src/swap'
77

88
describe('Dashboard', () => {

e2e/cypress/fixtures/selectors.json

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
"showBalanceBtn": "div[class='sc-iqHYmW ehuBYI']",
2222
"copyAddress": "button[class='sc-fpqIQw sc-lavCMz dSJKFS gMkWzI']",
2323
"copiedAddress": "span[class='sc-djEslu hqRRlV']",
24-
"networkName": "div[class='sc-bdfBQB sc-lkSVJk sc-gqpkzb sc-NGuuG deOOZW ftOKNw MYXyx ebZeoR']",
24+
"networkName": "div[class='sc-bdfBQB sc-dPKyGq sc-hFqdOJ sc-dmaBdM deOOZW dEygWr kSbjpq gsvrmo']",
2525
"networks": "div[class='sc-iqHYmW fqpLOW']",
2626
"swapSideMenu": "a[id='swap']",
2727
"dashboardSideMenu": "a[id='dashboard']",
@@ -92,7 +92,7 @@
9292
"tokensToSwap":"span[class='sc-jJEKmz dAlckP token-symbol-container']",
9393
"selectTokens":"div[class='sc-iqHYmW ktkHFj']",
9494
"selectTokensValue":"div[class='sc-iqHYmW sc-frSLGL jlVtaV SWUXq']",
95-
"selectTokensMenuClose":"div[class='sc-bgxbtk cODQYo']",
95+
"selectTokensMenuClose":"div[class='sc-hHFahi dMukSa']",
9696
"fromInput":"[id='swap-currency-input']",
9797
"toInput":"[id='swap-currency-output']",
9898
"swapBtn":"button[id='swap-button']",
@@ -109,21 +109,21 @@
109109
"confirmSwapBtn":"button[class='sc-fubCzh cmmhVN']",
110110
"swappingMsg":"div[class='sc-iqHYmW dqzwLX']",
111111
"TransactionSubmitted":"div[class='sc-iqHYmW grNjms']",
112-
"recentTransactions":"div[class='sc-fIUAFO itZXRL css-1frkxb8']",
113-
"transactionLinks":"a[class='sc-hiAVnf jKUipH sc-fKuKOu cIXBIe']",
112+
"recentTransactions":"div[class='sc-iYXQCk NcoRw css-1frkxb8']",
113+
"transactionLinks":"a[class='sc-fUiULZ cEFGA sc-iiORxA kyUhqb']",
114114
"swapSuccessfulTransactionLink":"a[class='sc-iqHYmW sc-dFJtaz kvtIuE iwMDfn']",
115115
"limitSuccessfulTransactionLink":"a[class='sc-iqHYmW sc-nFqVA kvtIuE gPCmBS']",
116-
"clearAll":"button[class='sc-gJnOmN dDjmVt']",
117-
"transactionAppear":"div[class='sc-fIUAFO henkdw css-gp5dfh']",
118-
"accountMenuCloseSwap":"div[class='sc-kEjbQP sc-iMyPae iqcNnm ekaUlm']",
116+
"clearAll":"button[class='sc-ekkLND jDievp']",
117+
"transactionAppear":"[class='sc-iYXQCk gnmwAj css-gp5dfh']",
118+
"accountMenuCloseSwap":"div[class='sc-kEjbQP sc-lkSVJk iqcNnm evTjxg']",
119119
"notification":"[class='sc-iYXQCk NcoRw css-1a92al5']",
120120
"notificationViewOnExplorer":"a[class='sc-fUiULZ cEFGA']",
121121
"transactionRejected":"div[class='sc-iqHYmW flqkxK']",
122122
"selectTokenBtn":"span[class='sc-jJEKmz jysvvD token-symbol-container']",
123123
"priceField":"input[class='sc-dQoVA cBTceE sc-eLgNKc jWrmCf']",
124124
"sellTokenDetailsValues":"div[class='sc-iqHYmW sc-cOajNj YUTNa fQiDUE']",
125125
"limitPrice":"div[class='sc-iqHYmW gfHqgL']",
126-
"tokenBalances":"div[class='sc-iqHYmW sc-frSLGL jlVtaV SWUXq']",
126+
"tokenBalances":"div[class='sc-iqHYmW sc-kggwrJ jlVtaV dcZMVK']",
127127
"swapSideMenuSelect": "div[class='sc-gqPbQI ikudoI'] a",
128128
"tradeBtns": "[class='sc-eCYdqJ sc-ftvSup fEptdj bnstfL']",
129129
"fromField": "input[id='swap-currency-input']",
@@ -155,16 +155,20 @@
155155
"buyBtn":"div[class='sc-iBaQBe KqBsY']",
156156
"openBtn":"div[class='sc-iBaQBe gKEJqC']",
157157
"openOrders":"div[class='sc-iqHYmW fppmQG']",
158-
"openOrdersSwitch":"div[class='sc-iqHYmW bROwcC']",
158+
"openOrdersSwitch":"[class='sc-kEjbQP sc-izEZMo iqcNnm chhdrM']",
159159
"limitOrderDetails":"div[class='sc-iqHYmW gYCPMW']",
160160
"openOrderSwitched":"div[class='sc-kEjbQP sc-ioVrgq iqcNnm dNLtJK']",
161161
"cancelOrderbtn":"button[class='sc-fubCzh czbHIL']",
162162
"cancelOrderMsg":"div[class='sc-iqHYmW dsooJL']",
163163
"executionPrice":"div[class='sc-iqHYmW eoGjRd']",
164164
"cancelOrderBtnPopup":"button[class='sc-fubCzh cmmhVN']",
165165
"cancellingOrderMsg":"div[class='sc-iqHYmW eWFPnr']",
166-
"cancelLimitSuccessfulTransactionLink":"a[class='sc-iqHYmW sc-bxZmPi iYAkFc oODlg']",
167-
"tokenSearch":"input[class='sc-dQoVA Jeftv']"
166+
"cancelLimitSuccessfulTransactionLink":"a[class='sc-iqHYmW sc-hJOwyE iYAkFc iOEnKa']",
167+
"tokenSearch":"input[class='sc-dQoVA Jeftv']",
168+
"approveBtn": "button.sc-fubCzh.cmmhVN",
169+
"noOrders": "div[class='sc-iqHYmW kscdTb']",
170+
"limitTokensLogo": "div[class='sc-bYEvvW iKTEcx'] img[class='sc-ezredP iPgjFG']",
171+
"ordersOpen": "div[class='sc-iqHYmW fppmQG']"
168172
},
169173
"pangolinLinks":{
170174
"chart": "[id='charts']",

e2e/cypress/src/dashboard.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,9 @@ function socialLinks(iteration, socialLinkArray) {
3636
}
3737

3838
function nativeDetails(native){
39-
cy.wait(10000)
40-
cy.get(walletAddress).contains('0x33...8C60');
41-
cy.get(walletAddress).invoke('text').should('equal', '0x33...8C60');
39+
cy.wait(5000)
40+
cy.get(walletAddress).contains('0xa0...b166');
41+
cy.get(walletAddress).invoke('text').should('equal', '0xa0...b166');
4242
//Native token details
4343
cy.get(nativeToken).invoke('text').should('contain', nativeTokenArr[native]);
4444
cy.get(nativeToken).contains(nativeTokenArr[native]).click()
@@ -47,14 +47,14 @@ function nativeDetails(native){
4747
cy.get(nativeTokenLogo).should('have.attr', 'alt', `${nativeTokenArr[native]} logo`)
4848
cy.get(nativeTokenBalance, { timeout: 20000 }).should('be.visible')
4949
cy.get(nativeTokenBalance).should('not.be.empty');
50-
cy.wait(10000)
50+
cy.wait(5000)
5151
for (var i = 0; i <= 3; i++) {
5252
cy.get(nativeTokenDeatils).contains(nativeTokenDeatilsArr[i]).should('be.visible')
5353
}
5454
cy.get(detailsMenuClose).click()
5555
cy.get(gasToken, { timeout: 50000 }).invoke('text').should('contain', gasTokenArr[native]);
5656
//Showing status connected
57-
cy.get(walletAddress).contains('0x33...8C60').click()
57+
cy.get(walletAddress).contains('0xa0...b166').click()
5858
cy.request('GET', 'https://snowtrace.io/address/0x33CCa68A49B348ec247E0d1216936B5eF5638C60').then( res => {
5959
expect(res.status).to.equal(200)
6060
cy.get(changeBtn).contains("Change").click()

e2e/cypress/src/swap.js

Lines changed: 69 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import selectors from '../fixtures/selectors.json'
22
import data from '../fixtures/pangolin-data.json'
33

4-
let {settingBtn, slippageField, tradeDetails, tradeDetailsValues, toEstimated, unitPrice, tokensToSwap, selectTokens, fromInput, confirmSwap, confirmSwapDetails, confirmSwapMsg, confirmSwapBtn, priceField, swapBtn, limitPrice, TransactionSubmitted, transactionLinks, notification, notificationViewOnExplorer, sellTokenDetailsValues, openBtn, openOrders, openOrdersSwitch, openOrderSwitched, limitOrderDetails, amountInTokensSwap, cancelOrderbtn, cancelOrderMsg, executionPrice, cancelOrderBtnPopup, cancellingOrderMsg, tokenSearch} = selectors.swap
4+
let { testnetBtn } = selectors.dashboard
5+
let {settingBtn, slippageField, tradeDetails, tradeDetailsValues, ordersOpen, toEstimated, unitPrice, tokensToSwap, selectTokens, fromInput, confirmSwap, confirmSwapDetails, confirmSwapMsg, confirmSwapBtn, priceField, swapBtn, limitPrice, TransactionSubmitted, transactionLinks, notification, notificationViewOnExplorer, sellTokenDetailsValues, openBtn, openOrders, openOrdersSwitch, openOrderSwitched, limitOrderDetails, amountInTokensSwap, cancelOrderbtn, cancelOrderMsg, executionPrice, cancelOrderBtnPopup, cancellingOrderMsg, tokenSearch, approveBtn, noOrders, limitTokensLogo, selectTokenBtn, toInput, buyBtn} = selectors.swap
56
let { sellTokenDetailsArr, limitOrderDetailsArr} = data.swap
67
function switchingValues (selectIter, headerAssert, token) {
78
cy.get('div[class="sc-eCYdqJ sc-dkdnUF fEptdj gilYEX"] div[class="sc-eCYdqJ fEptdj"]').within( $banner => {
@@ -115,7 +116,7 @@ function confirmTradeDetailsftn (toTokenTitle){
115116
function confirmBtnftn (btnSelector,btnName){
116117
cy.get(btnSelector).contains(btnName).should('be.visible');
117118
cy.get(btnSelector).contains(btnName).should("have.css", "background-color", "rgb(255, 200, 0)");
118-
cy.get(btnSelector).contains(btnName).click()
119+
cy.get(btnSelector).contains(btnName).click({force: true})
119120

120121
}
121122

@@ -136,8 +137,29 @@ function limitSellBuyTokenftn(x, y) {
136137
else {
137138
cy.get(swapBtn).contains("Invalid condition").should('not.exist');
138139
}
140+
139141
//Greater than market
140142
cy.get(priceField).clear().type(limitArr[y].toFixed(2)); // Re-enter the incremented value
143+
cy.wait(5000)
144+
145+
// Verify and approve if needed
146+
cy.get(approveBtn, { timeout: 30000 }).then(($buttons) => {
147+
const approveButton = Cypress.$($buttons).filter((_, button) => {
148+
const buttonText = Cypress.$(button).text().trim();
149+
return buttonText.startsWith('Approve');
150+
});
151+
152+
if (approveButton.length) {
153+
// Token approval is required, perform approval process
154+
cy.wrap(approveButton).click();
155+
cy.wait(5000); // Wait for the approval process to complete
156+
cy.confirmMetamaskPermissionToSpend();
157+
cy.wait(10000);
158+
// Add assertions here to verify the approval process if needed
159+
}
160+
});
161+
162+
// swap button
141163
cy.get(swapBtn).contains("Place Order").should('be.visible')
142164
cy.get(swapBtn).contains("Place Order").should("have.css", "background-color", "rgb(255, 200, 0)");
143165
});
@@ -171,32 +193,60 @@ function limitSellBuyConfirmDetailsftn(token1, token2) {
171193
expect(textUpdated).to.match(patternUpdated);
172194
})
173195

174-
cy.get(limitPrice).eq(2).should('contain', '0x33...8C60')
196+
cy.get(limitPrice).eq(2).should('contain', '0xa0...b166')
175197
}
176198

177-
function limitOrdersftn(navBtn,status){
178-
cy.get(confirmSwapDetails).eq(2).contains("Limit Orders").should('be.visible')
179-
cy.get(openBtn).eq(2).contains(navBtn).should("have.css", "background-color", "rgb(17, 17, 17)")
180-
cy.get(openOrders).eq(0).should('contain', status);
181-
cy.get(openOrdersSwitch).eq(0).click()
182-
//Limit Order Details
183-
for (var i = 0; i <= 3; i++){
184-
cy.get(limitOrderDetails).eq(i + 9).contains(limitOrderDetailsArr[i]).should('be.visible')
199+
function limitOrdersftn(navBtn, status, logo1, logo2) {
200+
cy.get(limitTokensLogo).eq(0).should('have.attr', 'alt', `${logo1} logo`).click();
201+
cy.get(limitTokensLogo).eq(1).should('have.attr', 'alt', `${logo2} logo`).click();
202+
cy.get(openOrders).eq(0).contains(`${status}`).should('be.visible');
203+
cy.get(confirmSwapDetails).eq(2).contains("Limit Orders").should('be.visible');
204+
cy.get(openBtn).eq(2).contains(navBtn).should("have.css", "background-color", "rgb(17, 17, 17)");
205+
206+
// Limit Order Details
207+
for (var i = 0; i <= 3; i++) {
208+
cy.get(limitOrderDetails).eq(i + 9).contains(limitOrderDetailsArr[i]).should('be.visible');
185209
}
210+
186211
cy.get(amountInTokensSwap).should("not.be.empty");
187-
cy.get(amountInTokensSwap).eq(3).contains(status).should('be.visible')
188-
}
212+
cy.get(amountInTokensSwap).eq(3).contains(`${status}`).should('be.visible');
213+
}
214+
215+
189216

190217
function cancelLimitOrderftn(){
218+
cy.get(ordersOpen).eq(0).should('contain', 'open').then(($element) => {
219+
const text = $element.text();
220+
if (text.includes('(P)')) {
221+
cy.wait(20000)
222+
}});
223+
cy.get(ordersOpen).eq(0).should('contain', 'open').click()
191224
cy.get(cancelOrderbtn).contains("Cancel Order").click()
192-
cy.get(confirmSwapDetails).contains("Cancel Order").should('be.visible')
193-
cy.get(cancelOrderMsg).invoke('text').then((text) => {
225+
cy.get(confirmSwapDetails).contains("Cancel Order").should('be.visible')
226+
cy.get(cancelOrderMsg).invoke('text').then((text) => {
194227
const pattern = /\b(USDC|PNG)\b/;
195228
expect(text).to.match(pattern);
196229
});
197-
cy.get(executionPrice).contains("Execution Price").should('be.visible')
198-
cy.get(cancelOrderBtnPopup).contains("Cancel Order").should('be.visible').click()
199-
cy.get(cancellingOrderMsg).contains("Cancelling order...").should('be.visible')
230+
cy.get(executionPrice).contains("Execution Price").should('be.visible')
231+
cy.get(cancelOrderBtnPopup).contains("Cancel Order").should('be.visible').click()
232+
cy.get(cancellingOrderMsg).contains("Cancelling order...").should('be.visible')
200233
}
201234

202-
export {switchingValues, tokenDisable, tokenSwitching, slippage, disconnectWallet, connectWallet1, tradeDetailsftn, selectTokensftn, confirmTradeDetailsftn, confirmBtnftn, limitSellBuyTokenftn, limitSellBuyConfirmDetailsftn, notificationftn,successfulCardftn, limitSellBuyTradeDetailsftn, limitOrdersftn, cancelLimitOrderftn}
235+
function selectLimitTokensftn(token1, token2, amount, buy){
236+
cy.get(testnetBtn).contains("LIMIT").click()
237+
if(buy === 1){
238+
cy.get(buyBtn).contains("BUY").click()
239+
}
240+
cy.get(tokensToSwap).click()
241+
cy.get(tokenSearch).eq(0).type(token1)
242+
cy.get(selectTokens).contains(token1).click()
243+
cy.get(selectTokenBtn).contains("Select Token").click()
244+
cy.get(tokenSearch).eq(0).type(token2)
245+
cy.get(selectTokens).contains(token2).click()
246+
cy.get(fromInput).type(amount)
247+
cy.wait(5000);
248+
cy.get(priceField).should('not.have.value', '0.00');
249+
cy.get(toInput).should('not.have.value', '0.00');
250+
}
251+
252+
export {switchingValues, tokenDisable, tokenSwitching, slippage, disconnectWallet, connectWallet1, tradeDetailsftn, selectTokensftn, confirmTradeDetailsftn, confirmBtnftn, limitSellBuyTokenftn, limitSellBuyConfirmDetailsftn, notificationftn,successfulCardftn, limitSellBuyTradeDetailsftn, limitOrdersftn, cancelLimitOrderftn, selectLimitTokensftn}

0 commit comments

Comments
 (0)