Some checks failed
PR Preview / teardown-preview (pull_request) Has been skipped
Test / unit-test (push) Successful in 5s
Test / build-check (push) Successful in 3s
PR Preview / test (pull_request) Successful in 4s
PR Preview / deploy-preview (pull_request) Successful in 14s
Test / e2e-test (push) Failing after 1m22s
- 删除 MyDiary.vue 重复的 clearBrandImage 函数(rebase 遗留) - 测试加 dismissDialog() 关闭 CI 中 API 错误弹出的 dialog Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
109 lines
3.2 KiB
JavaScript
109 lines
3.2 KiB
JavaScript
// Helper: dismiss any CustomDialog that may appear (e.g. API errors in CI)
|
|
function dismissDialog() {
|
|
cy.get('body').then($body => {
|
|
if ($body.find('.dialog-overlay').length) {
|
|
cy.get('.dialog-btn-primary').click()
|
|
cy.get('.dialog-overlay').should('not.exist')
|
|
}
|
|
})
|
|
}
|
|
|
|
describe('Recipe Detail', () => {
|
|
beforeEach(() => {
|
|
cy.visit('/')
|
|
cy.get('.recipe-card', { timeout: 10000 }).should('have.length.gte', 1)
|
|
dismissDialog()
|
|
})
|
|
|
|
it('opens detail panel when clicking a recipe card', () => {
|
|
cy.get('.recipe-card').first().click()
|
|
dismissDialog()
|
|
cy.get('.detail-overlay').should('be.visible')
|
|
})
|
|
|
|
it('shows recipe name in detail view', () => {
|
|
cy.get('.recipe-card').first().click()
|
|
dismissDialog()
|
|
cy.get('.detail-overlay').should('be.visible')
|
|
})
|
|
|
|
it('shows ingredient info with drops', () => {
|
|
cy.get('.recipe-card').first().click()
|
|
dismissDialog()
|
|
cy.contains('滴').should('exist')
|
|
})
|
|
|
|
it('shows cost with ¥ symbol', () => {
|
|
cy.get('.recipe-card').first().click()
|
|
dismissDialog()
|
|
cy.contains('¥').should('exist')
|
|
})
|
|
|
|
it('closes detail panel when clicking close button', () => {
|
|
cy.get('.recipe-card').first().click()
|
|
dismissDialog()
|
|
cy.get('.detail-overlay').should('be.visible')
|
|
cy.get('button').contains(/✕|关闭/).first().click()
|
|
cy.get('.recipe-card').should('be.visible')
|
|
})
|
|
|
|
it('shows action buttons in detail', () => {
|
|
cy.get('.recipe-card').first().click()
|
|
dismissDialog()
|
|
cy.get('.detail-overlay button').should('have.length.gte', 1)
|
|
})
|
|
|
|
it('shows favorite star on recipe cards', () => {
|
|
cy.get('.fav-btn').first().should('exist')
|
|
})
|
|
})
|
|
|
|
describe('Recipe Detail - Editor (Admin)', () => {
|
|
const ADMIN_TOKEN = 'c86ae7afbe10fabe3c1d5e1a7fee74feaadfd5dc7be2ab62'
|
|
|
|
beforeEach(() => {
|
|
cy.visit('/', {
|
|
onBeforeLoad(win) {
|
|
win.localStorage.setItem('oil_auth_token', ADMIN_TOKEN)
|
|
}
|
|
})
|
|
cy.get('.recipe-card', { timeout: 10000 }).should('have.length.gte', 1)
|
|
dismissDialog()
|
|
})
|
|
|
|
it('shows editable ingredients table in editor tab', () => {
|
|
cy.get('.recipe-card').first().click()
|
|
dismissDialog()
|
|
cy.get('.detail-overlay', { timeout: 5000 }).should('be.visible')
|
|
cy.get('.detail-overlay').then($el => {
|
|
if ($el.find(':contains("编辑")').filter('button').length) {
|
|
cy.contains('编辑').click()
|
|
cy.get('.editor-select, .editor-drops').should('exist')
|
|
} else {
|
|
cy.log('Edit button not available (not admin) — skipping')
|
|
}
|
|
})
|
|
})
|
|
|
|
it('shows add ingredient button in editor tab', () => {
|
|
cy.get('.recipe-card').first().click()
|
|
dismissDialog()
|
|
cy.get('.detail-overlay', { timeout: 5000 }).should('be.visible')
|
|
cy.get('.detail-overlay').then($el => {
|
|
if ($el.find(':contains("编辑")').filter('button').length) {
|
|
cy.contains('编辑').click()
|
|
cy.contains('添加精油').should('exist')
|
|
} else {
|
|
cy.log('Edit button not available (not admin) — skipping')
|
|
}
|
|
})
|
|
})
|
|
|
|
it('shows save image button', () => {
|
|
cy.get('.recipe-card').first().click()
|
|
dismissDialog()
|
|
cy.get('.detail-overlay', { timeout: 5000 }).should('be.visible')
|
|
cy.contains('保存图片').should('exist')
|
|
})
|
|
})
|