1
0
mirror of https://github.com/jcwimer/wrestlingApp synced 2026-04-02 04:35:26 +00:00
Files
wrestlingdev.com/cypress-tests/cypress/e2e/04-matstats_functionality.cy.js

205 lines
7.8 KiB
JavaScript

// Notes for test maintenance:
// 1. This test checks for existence of Mat 1 before creating it, so we don't create duplicates
// 2. When running as part of the test suite, there may be issues with multiple elements matching the same selector
// 3. If needed, add { multiple: true } to click() calls or make selectors more specific with .first()
// 4. If encountering "element has detached from DOM" errors, try breaking up chains or adding cy.wait() between operations
describe('Matstats Page Functionality', () => {
// Don't fail tests on uncaught exceptions
Cypress.on('uncaught:exception', (err, runnable) => {
// returning false here prevents Cypress from failing the test
return false;
});
beforeEach(() => {
// Use cy.session() with the login helper
cy.session('authUser', () => {
cy.login(); // Assume cy.login() is defined in commands.js
});
cy.visit('/');
cy.contains('Browse Tournaments').first().click();
cy.contains('Cypress Test Tournament - Pool to bracket').click();
cy.contains('a', 'Mat 1').first().click();
});
it('should update stats when scoring actions are clicked', () => {
// Check that elements are visible
cy.get('#match_w1_stat').should('be.visible');
cy.get('#match_w2_stat').should('be.visible');
// Test takedown button for wrestler A
cy.get('#w1-takedown').click();
cy.get('#match_w1_stat').should('contain.value', 'T3');
// Test escape button for wrestler B
cy.get('#w2-escape').click();
cy.get('#match_w2_stat').should('contain.value', 'E1');
// Test reversal button for wrestler A
cy.get('#w1-reversal').click();
cy.get('#match_w1_stat').should('contain.value', 'R2');
// Test near fall buttons for wrestler B
cy.get('#w2-nf2').click();
cy.get('#match_w2_stat').should('contain.value', 'N2');
// End period
cy.contains('End Period').click();
cy.get('#match_w1_stat').should('contain.value', '|End Period|');
cy.get('#match_w2_stat').should('contain.value', '|End Period|');
});
it('should test color change functionality', () => {
// Test color change for Wrestler A from green to red
cy.get('#w1-color').select('red');
// Verify button colors changed for wrestler A (now red)
cy.get('#w1-takedown').should('have.class', 'btn-danger');
cy.get('#w1-escape').should('have.class', 'btn-danger');
// Verify wrestler B's buttons are now green
cy.get('#w2-takedown').should('have.class', 'btn-success');
cy.get('#w2-escape').should('have.class', 'btn-success');
// Switch back
cy.get('#w2-color').select('red');
// Verify colors switched back
cy.get('#w1-takedown').should('have.class', 'btn-success');
cy.get('#w2-takedown').should('have.class', 'btn-danger');
});
it('should test wrestler choice buttons', () => {
// Test wrestler A choosing top
cy.get('#w1-top').click();
cy.get('#match_w1_stat').should('contain.value', '|Chose Top|');
// Test wrestler B choosing bottom
cy.get('#w2-bottom').click();
cy.get('#match_w2_stat').should('contain.value', '|Chose Bottom|');
// Test wrestler A deferring
cy.get('#w1-defer').click();
cy.get('#match_w1_stat').should('contain.value', '|Deferred|');
// Test wrestler B choosing neutral
cy.get('#w2-neutral').click();
cy.get('#match_w2_stat').should('contain.value', '|Chose Neutral|');
});
it('should test warning buttons', () => {
// Test stalling warning for wrestler A
cy.get('#w1-stalling').click();
cy.get('#match_w1_stat').should('contain.value', 'S');
// Test caution for wrestler B
cy.get('#w2-caution').click();
cy.get('#match_w2_stat').should('contain.value', 'C');
});
it('should test timer functionality', () => {
// Start injury timer for wrestler A
cy.get('#w1-injury-time').should('be.visible');
// Check initial timer value - accept either format
cy.get('#w1-injury-time').invoke('text').then((text) => {
expect(text.trim()).to.match(/^(0 sec|0m 0s)$/);
});
cy.contains('button', 'Start').first().click();
// Wait a bit and check that timer is running
cy.wait(2000);
// Verify timer is no longer at zero
cy.get('#w1-injury-time').invoke('text').then((text) => {
expect(text.trim()).not.to.match(/^(0 sec|0m 0s)$/);
});
// Stop the timer
cy.contains('button', 'Stop').first().click();
// Store the current time
let currentTime;
cy.get('#w1-injury-time').invoke('text').then((text) => {
currentTime = text;
});
// Wait a bit to ensure timer stopped
cy.wait(1000);
// Verify timer stopped by checking the time hasn't changed
cy.get('#w1-injury-time').invoke('text').then((newText) => {
expect(newText).to.equal(currentTime);
});
// Test reset button
cy.contains('button', 'Reset').first().click();
// Verify timer reset - accept either format
cy.get('#w1-injury-time').invoke('text').then((text) => {
expect(text.trim()).to.match(/^(0 sec|0m 0s)$/);
});
// Check that injury time was recorded in stats
cy.get('#match_w1_stat').invoke('val').then((val) => {
expect(val).to.include('Injury Time');
});
});
it('should test match results form validation', () => {
// Only attempt this test if the match_win_type element exists
cy.get('body').then(($body) => {
if ($body.find('#match_win_type').length) {
// Select win type as Decision
cy.get('#match_win_type').select('Decision');
// Check if there are input fields visible in the form
const hasScoreInputs = $body.find('input[type="number"]').length > 0 ||
$body.find('input[type="text"]').length > 0;
if (hasScoreInputs) {
// Try to find score inputs using a more generic approach
cy.get('input[type="number"], input[type="text"]').then($inputs => {
if ($inputs.length >= 2) {
// Use the first two inputs for winner and loser scores
cy.wrap($inputs).first().as('winnerScore');
cy.wrap($inputs).eq(1).as('loserScore');
// Try invalid input (loser score > winner score)
cy.get('@winnerScore').clear().type('2');
cy.get('@loserScore').clear().type('5');
// Should show validation error
cy.get('#validation-alerts').should('be.visible');
// Update to valid scores for Decision
cy.get('@winnerScore').clear().type('5');
cy.get('@loserScore').clear().type('2');
// Error should be gone after valid input
cy.get('#validation-alerts').should('not.exist').should('not.be.visible');
// Test Major validation (score difference 8+)
cy.get('@winnerScore').clear().type('10');
cy.get('@loserScore').clear().type('2');
// Should show type validation error for needing Major
cy.get('#validation-alerts').should('be.visible');
// Change to Major
cy.get('#match_win_type').select('Major');
// Error should be gone after changing win type
cy.wait(500); // Give validation time to update
cy.get('#validation-alerts').should('not.exist').should('not.be.visible');
} else {
cy.log('Found fewer than 2 score input fields - test conditionally passed');
}
});
} else {
cy.log('No score input fields found - test conditionally passed');
}
} else {
cy.log('Match form not present - test conditionally passed');
}
});
});
});