| 
									
										
										
										
											2023-03-02 23:33:12 -08:00
										 |  |  | const baseModule = Cypress.env('BASE_MODULE'); | 
					
						
							| 
									
										
										
										
											2022-07-06 10:01:05 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 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}`); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | }); |