| 1 | import { describe, expect, it } from 'vitest' |
| 2 | import { buildDuplicatePageHtmlFromSource } from '../../../../src/main/session/page-html-builders' |
| 3 | |
| 4 | const SOURCE_HTML = `<!DOCTYPE html> |
| 5 | <html> |
| 6 | <head><title>原标题</title></head> |
| 7 | <body data-page-id="page-source123"> |
| 8 | <div class="ppt-page-content" data-page-id="page-source123"> |
| 9 | <h1 data-block-id="blk-1">主标题文字</h1> |
| 10 | <p data-block-id="blk-2">正文内容 ABC</p> |
| 11 | <input value="输入框里的值" placeholder="占位" /> |
| 12 | </div> |
| 13 | </body> |
| 14 | </html>` |
| 15 | |
| 16 | describe('buildDuplicatePageHtmlFromSource', () => { |
| 17 | it('保留全部可见文字与输入框值(区别于空白页清空),并重写 pageId 身份和标题', () => { |
| 18 | const result = buildDuplicatePageHtmlFromSource({ |
| 19 | html: SOURCE_HTML, |
| 20 | oldPageId: 'page-source123', |
| 21 | nextPageId: 'page-copy456', |
| 22 | title: '[副本]原标题' |
| 23 | }) |
| 24 | |
| 25 | // 可见文字保留(空白页流程会清空这些) |
| 26 | expect(result).toContain('主标题文字') |
| 27 | expect(result).toContain('正文内容 ABC') |
| 28 | // 输入框 value/placeholder 保留 |
| 29 | expect(result).toContain('输入框里的值') |
| 30 | expect(result).toContain('占位') |
| 31 | // block-id 不重写(跨页不冲突),原样保留 |
| 32 | expect(result).toContain('data-block-id="blk-1"') |
| 33 | |
| 34 | // 旧 pageId 已全部替换为新 pageId,无残留 |
| 35 | expect(result).not.toContain('page-source123') |
| 36 | expect(result).toContain('data-page-id="page-copy456"') |
| 37 | |
| 38 | // body 上的 data-page-id 换成新 id |
| 39 | expect(result).toMatch(/<body data-page-id="page-copy456">/) |
| 40 | |
| 41 | // 标题已改为带 [副本] 前缀 |
| 42 | expect(result).toContain('<title>[副本]原标题</title>') |
| 43 | }) |
| 44 | |
| 45 | it('oldPageId 等于 nextPageId 时原样返回(不误伤内容)', () => { |
| 46 | const result = buildDuplicatePageHtmlFromSource({ |
| 47 | html: SOURCE_HTML, |
| 48 | oldPageId: 'page-same', |
| 49 | nextPageId: 'page-same', |
| 50 | title: '新标题' |
| 51 | }) |
| 52 | // 内容不被破坏,标题仍被设置 |
| 53 | expect(result).toContain('主标题文字') |
| 54 | expect(result).toContain('<title>新标题</title>') |
| 55 | }) |
| 56 | }) |
| 57 |