mirror of
https://github.com/mempool/mempool.git
synced 2025-02-25 15:10:12 +01:00
172 lines
6 KiB
TypeScript
172 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}`);
|
||
|
}
|
||
|
});
|