172 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			172 lines
		
	
	
		
			6.0 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}`);
 | |
|   }
 | |
| });
 |