describe('Visual Check - Screenshots', () => { let adminToken before(() => { cy.getAdminToken().then(token => { adminToken = token }) }) it('homepage with recipes', () => { cy.visit('/', { onBeforeLoad(win) { win.localStorage.setItem('oil_auth_token', adminToken) } }) cy.get('.recipe-card', { timeout: 10000 }).should('have.length.gte', 1) cy.wait(1000) cy.screenshot('01-homepage') }) it('recipe detail overlay', () => { cy.visit('/', { onBeforeLoad(win) { win.localStorage.setItem('oil_auth_token', adminToken) } }) cy.get('.recipe-card', { timeout: 10000 }).first().click() cy.wait(1000) cy.screenshot('02-recipe-detail') }) it('oil reference page', () => { cy.visit('/oils', { onBeforeLoad(win) { win.localStorage.setItem('oil_auth_token', adminToken) } }) cy.get('.oil-chip', { timeout: 10000 }).should('have.length.gte', 1) cy.wait(500) cy.screenshot('03-oil-reference') }) it('manage recipes page', () => { cy.visit('/manage', { onBeforeLoad(win) { win.localStorage.setItem('oil_auth_token', adminToken) } }) cy.wait(2000) cy.screenshot('04-manage-recipes') }) it('inventory page', () => { cy.visit('/inventory', { onBeforeLoad(win) { win.localStorage.setItem('oil_auth_token', adminToken) } }) cy.wait(1500) cy.screenshot('05-inventory') }) it('check if recipe cards show price > 0', () => { cy.visit('/', { onBeforeLoad(win) { win.localStorage.setItem('oil_auth_token', adminToken) } }) cy.get('.recipe-card', { timeout: 10000 }).should('have.length.gte', 1) // Check if any card shows a non-zero price cy.get('.recipe-card').first().invoke('text').then(text => { cy.log('First card text: ' + text) const priceMatch = text.match(/¥\s*(\d+\.?\d*)/) if (priceMatch) { cy.log('Price found: ¥' + priceMatch[1]) const price = parseFloat(priceMatch[1]) expect(price, 'Recipe card should show price > 0').to.be.gt(0) } else { cy.log('WARNING: No price found on recipe card') } }) }) })