describe('Bisq', () => { const baseModule = Cypress.env("BASE_MODULE"); const basePath = ''; beforeEach(() => { cy.intercept('/sockjs-node/info*').as('socket'); cy.intercept('/bisq/api/markets/hloc?market=btc_usd&interval=day').as('hloc'); cy.intercept('/bisq/api/markets/ticker').as('ticker'); cy.intercept('/bisq/api/markets/markets').as('markets'); cy.intercept('/bisq/api/markets/volumes/7d').as('7d'); cy.intercept('/bisq/api/markets/trades?market=all').as('trades'); cy.intercept('/bisq/api/txs/*/*').as('txs'); cy.intercept('/bisq/api/blocks/*/*').as('blocks'); cy.intercept('/bisq/api/stats').as('stats'); }); if (baseModule === 'bisq') { it('loads the dashboard', () => { cy.visit(`${basePath}`); cy.waitForSkeletonGone(); }); describe("transactions", () => { it('loads the transactions screen', () => { cy.visit(`${basePath}`); cy.waitForSkeletonGone(); cy.get('#btn-transactions').click().then(() => { cy.get('.table > tr').should('have.length', 50); }); }); const filters = [ "Asset listing fee", "Blind vote", "Compensation request", "Genesis", "Irregular", "Lockup", "Pay trade fee", "Proof of burn", "Proposal", "Reimbursement request", "Transfer BSQ", "Unlock", "Vote reveal" ]; filters.forEach((filter) => { it(`filters the transaction screen by ${filter}`, () => { cy.visit(`${basePath}/transactions`); cy.waitForSkeletonGone(); cy.get('#filter').click(); cy.contains(filter).find('input').click(); //TODO: change this waiter cy.wait(1000); cy.get('td:nth-of-type(2)').each(($td) => { expect($td.text().trim()).to.eq(filter); }); }); }); it("filters using multiple criteria", () => { const filters = ['Proposal', 'Lockup', 'Unlock']; cy.visit(`${basePath}/transactions`); cy.waitForSkeletonGone(); cy.get('#filter').click(); filters.forEach((filter) => { cy.contains(filter).find('input').click(); //TODO: change this waiter cy.wait(1000); }); cy.get('td:nth-of-type(2)').each(($td) => { const regex = new RegExp(`${filters.join('|')}`, 'g'); expect($td.text().trim()).to.match(regex); }); }); const transactions = [ { type: 'Asset listing fee', txid: '3548aa0c002b015ea700072b7d7d76d45d4f10a3573804d0d2f624c0bb255b6b' }, { type: 'Blind vote', txid: 'f8fabb95efa1bb81325e4c961b9fc7e3508a9b9ecd4eddf1400e58867eff8d92' }, { type: 'Compensation request', txid: 'a8cdc65fe6bb8730f5f89f99f779d0469b0a493e1ae570e20eb7afda696a18a9' }, { type: 'Genesis', txid: '4b5417ec5ab6112bedf539c3b4f5a806ed539542d8b717e1c4470aa3180edce5' }, { type: 'Irregular', txid: '90b06684a517388fec2237e2362a29810dc82f0e13e019c84747ec27051e6c53' }, { type: 'Lockup', txid: '365425b3b7487229e2ba598fb8f2a9e359e3351620383e5018548649a28b78c4' }, { type: 'Pay trade fee', txid: 'a66b30e9777e16572ab36723539df8f45bd5d8130d810b2c3d75b8c02a191eaf' }, { type: 'Proof of burn', txid: '8325ccb87065fb9243ed9ff1cbb431fc2ac5060a60433bcde474ccbd97b76dcb' }, { type: 'Proposal', txid: '34e2a20f045c82fbcf7cb191b42dea6fba45641777e1751ffb29d3981c4bf413' }, { type: 'Reimbursement request', txid: '04c16c79ca6b9ec9978880024b0d0ad3100020f33286b63c85ca7b1a319421ae' }, { type: 'Transfer BSQ', txid: '64500bd9220675ad30d5ace27de95a341a498d7eda08162ee0ce7feb8c56cb14' }, { type: 'Unlock', txid: '5a756841bbb11137d15b0082a3fcadbe102791f41a95d661d3bd0c5ad0b3b1a3' }, { type: 'Vote reveal', txid: 'bd7daae1d4af8837db5e47d7bd9d8b9f83dcfd35d112f85e90728b9be45191f7' } ]; transactions.forEach((transaction) => { it(`loads a "${transaction.type}" transaction`, () => { cy.visit(`${basePath}/tx/${transaction.txid}`); cy.waitForSkeletonGone(); }); }); }); describe('blocks', () => { it('loads the blocks screen', () => { cy.visit(`${basePath}`); cy.waitForSkeletonGone(); cy.get('#btn-blocks').click().then(() => { cy.wait('@blocks'); cy.get('tbody tr').should('have.length', 10); }); }); it('loads a specific block', () => { cy.visit(`${basePath}/block/0000000000000000000137ef33faa63bc6e809ab30932cf77d454fb36d2bd83a`); cy.waitForSkeletonGone(); }); }); describe('markets', () => { it('loads the markets screen', () => { cy.visit(`${basePath}/markets`); cy.waitForSkeletonGone(); }); it('loads a specific market', () => { cy.visit(`${basePath}/market/btc_eur`); cy.waitForSkeletonGone(); //Buy Offers cy.get('.row > :nth-child(1) td').should('have.length.at.least', 1); //Sell offers cy.get('.row > :nth-child(1) td').should('have.length.at.least', 1); //Trades cy.get('app-bisq-trades > .table-container td').should('have.length.at.least', 1); }); }); it('loads the stats screen', () => { cy.visit(`${basePath}`); cy.waitForSkeletonGone(); cy.get('#btn-stats').click().then(() => { cy.wait('@stats'); }); }); it('loads the api screen', () => { cy.visit(`${basePath}`); cy.waitForSkeletonGone(); cy.get('#btn-docs').click().then(() => { cy.get('.section-header').should('have.length.at.least', 1); cy.get('.endpoint-container').should('have.length.at.least', 1); }); }); it('shows blocks pagination with 5 pages (desktop)', () => { cy.viewport(760, 800); cy.visit(`${basePath}/blocks`); cy.waitForSkeletonGone(); cy.get('tbody tr').should('have.length', 10); // 5 pages + 4 buttons = 9 buttons cy.get('.pagination-container ul.pagination').first().children().should('have.length', 9); }); it('shows blocks pagination with 3 pages (mobile)', () => { cy.viewport(669, 800); cy.visit(`${basePath}/blocks`); cy.waitForSkeletonGone(); cy.get('tbody tr').should('have.length', 10); // 3 pages + 4 buttons = 7 buttons cy.get('.pagination-container ul.pagination').first().children().should('have.length', 7); }); } else { it.skip(`Tests cannot be run on the selected BASE_MODULE ${baseModule}`); } });