describe('Docs (文档)', () => { beforeEach(() => { cy.visit('/docs', { onBeforeLoad(win) { win.localStorage.setItem('sp_login_expires', String(Date.now() + 86400000)) } }) cy.get('header').should('be.visible') }) it('shows docs page with header', () => { cy.contains('个人文档').should('be.visible') cy.contains('随手记会自动识别内容').should('be.visible') }) it('shows add document button', () => { cy.get('.btn-accent').should('contain', '新建文档') }) it('opens new document form', () => { cy.get('.btn-accent').contains('新建文档').click() cy.get('.edit-panel').should('be.visible') cy.contains('文档名称').should('be.visible') cy.contains('图标').should('be.visible') cy.contains('关键词').should('be.visible') cy.contains('提取规则').should('be.visible') }) it('creates a document', () => { cy.get('.btn-accent').contains('新建文档').click() cy.get('.edit-panel input').first().type('读书记录') cy.get('.emoji-pick').contains('📖').click() cy.get('.edit-panel input').eq(1).type('读完,看完') cy.get('.btn-accent').contains('保存').click() cy.get('.doc-card').should('contain', '读书记录') cy.get('.doc-card').should('contain', '📖') }) it('shows 0 entries for new document', () => { cy.get('.btn-accent').contains('新建文档').click() cy.get('.edit-panel input').first().type('空文档') cy.get('.btn-accent').contains('保存').click() cy.get('.doc-card').contains('空文档').parent().should('contain', '0 条') }) it('opens document detail on click', () => { cy.get('.btn-accent').contains('新建文档').click() cy.get('.edit-panel input').first().type('详情测试') cy.get('.btn-accent').contains('保存').click() cy.get('.doc-card').contains('详情测试').click() cy.get('.overlay.open').should('be.visible') cy.get('.panel').should('contain', '详情测试') }) it('closes document detail', () => { cy.get('.btn-accent').contains('新建文档').click() cy.get('.edit-panel input').first().type('关闭测试') cy.get('.btn-accent').contains('保存').click() cy.get('.doc-card').contains('关闭测试').click() cy.get('.btn-close').contains('关闭').click() cy.get('.overlay.open').should('not.exist') }) it('edits a document from detail view', () => { cy.get('.btn-accent').contains('新建文档').click() cy.get('.edit-panel input').first().type('编辑前') cy.get('.btn-accent').contains('保存').click() cy.get('.doc-card').contains('编辑前').click() cy.get('.btn-close').contains('编辑').click() cy.get('.edit-panel input').first().clear().type('编辑后') cy.get('.btn-accent').contains('保存').click() cy.get('.doc-card').should('contain', '编辑后') }) it('deletes a document from detail view', () => { cy.get('.btn-accent').contains('新建文档').click() cy.get('.edit-panel input').first().type('待删除文档') cy.get('.btn-accent').contains('保存').click() cy.get('.doc-card').contains('待删除文档').click() cy.get('.btn-close').contains('删除').click() cy.get('.doc-card').should('not.contain', '待删除文档') }) it('cancel button closes form without saving', () => { cy.get('.btn-accent').contains('新建文档').click() cy.get('.edit-panel input').first().type('取消测试') cy.get('.btn-close').contains('取消').click() cy.get('.edit-panel').should('not.exist') cy.get('.doc-card').should('not.contain', '取消测试') }) it('emoji picker works', () => { cy.get('.btn-accent').contains('新建文档').click() cy.get('.emoji-pick').should('have.length.gte', 10) cy.get('.emoji-pick').contains('🌙').click() cy.get('.emoji-pick').contains('🌙').should('have.class', 'active') }) it('extract rule dropdown has options', () => { cy.get('.btn-accent').contains('新建文档').click() cy.get('.edit-panel select option').should('have.length', 3) cy.get('.edit-panel select').select('sleep') cy.get('.edit-panel select').should('have.value', 'sleep') }) })