mempool/frontend/cypress/e2e/mainnet/mining.spec.ts
2023-03-02 23:33:12 -08:00

171 lines
6 KiB
TypeScript

const baseModule = Cypress.env('BASE_MODULE');
describe('Mainnet - Mining Features', () => {
beforeEach(() => {
//https://github.com/cypress-io/cypress/issues/14459
if (Cypress.browser.family === 'chromium') {
Cypress.automation('remote:debugger:protocol', {
command: 'Network.enable',
params: {}
});
Cypress.automation('remote:debugger:protocol', {
command: 'Network.setCacheDisabled',
params: { cacheDisabled: true }
});
}
});
if (baseModule === 'mempool') {
describe('Miner page', () => {
beforeEach(() => {
cy.intercept('/api/v1/mining/pool/**').as('pool');
cy.intercept('/api/v1/mining/hashrate/pools/**').as('hashrate');
cy.intercept('/api/tx/**').as('tx');
cy.intercept('/api/v1/outpends/**').as('outspends');
});
it('loads the mining pool page from the dashboard', () => {
cy.visit('/mining');
cy.waitForSkeletonGone();
cy.get('[data-cy="bitcoin-block-0-pool"]').click().then(() => {
cy.waitForSkeletonGone();
cy.wait('@pool');
cy.url().should('match', /\/mining\/pool\/(\w+)/);
});
});
it('loads the mining pool page from the blocks page', () => {
cy.visit('/mining');
cy.waitForSkeletonGone();
cy.get('[data-cy="bitcoin-block-0-height"]').click().then(() => {
cy.waitForSkeletonGone();
cy.get('[data-cy="block-details-miner-badge"]').click().then(() => {
cy.waitForSkeletonGone();
cy.wait('@pool');
cy.url().should('match', /\/mining\/pool\/(\w+)/);
});
});
});
});
describe('Mining Dashboard Landing page widgets', () => {
beforeEach(() => {
cy.visit('/mining');
cy.waitForSkeletonGone();
});
it('shows the mempool blocks', () => {
cy.get('[data-cy="mempool-block-0-fees"]').invoke('text').should('match', /~(.*) sat\/vB/);
cy.get('[data-cy="mempool-block-0-fee-span"]').invoke('text').should('match', /(.*) - (.*) sat\/vB/);
cy.get('[data-cy="mempool-block-0-total-fees"]').invoke('text').should('match', /(.*) BTC/);
cy.get('[data-cy="mempool-block-0-transaction-count"]').invoke('text').should('match', /(.*) transactions/);
cy.get('[data-cy="mempool-block-0-time"]').invoke('text').should('match', /In ~(.*) minutes/);
});
it('shows the mined blocks', () => {
cy.get('[data-cy="bitcoin-block-0-height"]').invoke('text').should('match', /(\d)/);
cy.get('[data-cy="bitcoin-block-0-fees"]').invoke('text').should('match', /~(.*) sat\/vB/);
cy.get('[data-cy="bitcoin-block-0-fee-span"]').invoke('text').should('match', /(.*) - (.*) sat\/vB/);
cy.get('[data-cy="bitcoin-block-0-total-fees"]').invoke('text').should('match', /(.*) BTC/);
cy.get('[data-cy="bitcoin-block-0-transactions"]').invoke('text').should('match', /(.*) transactions/);
cy.get('[data-cy="bitcoin-block-0-time"]').invoke('text').should('match', /((.*) ago|Just now)/);
cy.get('[data-cy="bitcoin-block-0-pool"]').invoke('text').should('match', /(\w)/);
});
it('shows the reward stats for the last 144 blocks', () => {
cy.get('[data-cy="reward-stats"]');
});
it('shows the difficulty adjustment stats', () => {
cy.get('[data-cy="difficulty-adjustment"]');
});
it('shows the latest blocks', () => {
cy.get('[data-cy="latest-blocks"]');
});
it('shows the pools pie chart', () => {
cy.get('[data-cy="pool-distribution"]');
});
it('shows the hashrate graph', () => {
cy.get('[data-cy="hashrate-graph"]');
});
it('shows the latest blocks', () => {
cy.get('[data-cy="latest-blocks"]');
});
it('shows the latest adjustments', () => {
cy.get('[data-cy="difficulty-adjustments-table"]');
});
});
describe.only('mining graphs', () => {
describe('pools ranking', () => {
it('loads the graph', () => {
cy.visit('/graphs/mining/pools');
cy.waitForSkeletonGone();
cy.waitForPageIdle();
cy.get('.spinner-border').should('not.exist');
});
});
describe('pools dominance', () => {
it('loads the graph', () => {
cy.visit('/graphs/mining/pools-dominance');
cy.waitForSkeletonGone();
cy.waitForPageIdle();
cy.get('.spinner-border').should('not.exist');
});
});
describe('hashrate & difficulty', () => {
it('loads the graph', () => {
cy.visit('/graphs/mining/hashrate-difficulty');
cy.waitForSkeletonGone();
cy.waitForPageIdle();
cy.get('.spinner-border').should('not.exist');
});
});
describe('block fee rates', () => {
it('loads the graph', () => {
cy.visit('/graphs/mining/block-fee-rates');
cy.waitForSkeletonGone();
cy.waitForPageIdle();
cy.get('.spinner-border').should('not.exist');
});
});
describe('block fees', () => {
it('loads the graph', () => {
cy.visit('/graphs/mining/block-fees');
cy.waitForSkeletonGone();
cy.waitForPageIdle();
cy.get('.spinner-border').should('not.exist');
});
});
describe('block rewards', () => {
it('loads the graph', () => {
cy.visit('/graphs/mining/block-rewards');
cy.waitForSkeletonGone();
cy.waitForPageIdle();
cy.get('.spinner-border').should('not.exist');
});
});
describe('block sizes and weights', () => {
it('loads the graph', () => {
cy.visit('/graphs/mining/block-sizes-weights');
cy.waitForSkeletonGone();
cy.waitForPageIdle();
cy.get('.spinner-border').should('not.exist');
});
});
});
} else {
it.skip(`Tests cannot be run on the selected BASE_MODULE ${baseModule}`);
}
});