Files
胡绍康andCopilot cf7817bb95 feat: UI全局美化重设计 + 恢复CI/测试/文档
UI 改进:
- 设置页面内嵌显示(不再弹窗)
- 临时邮箱卡片添加验证码提取按钮
- 导入账号弹窗 textarea 样式优化
- 账号头像 8 色渐变轮转
- 临时邮箱页顶栏邮箱点击复制
- 邮箱管理页自动选中默认分组
- 切换分组时重置邮件列 UI
- 修复收件箱/垃圾邮件 Tab 切换(.folder-tab → .email-tab)
- 修复从临时邮箱返回后账号列数据残留
- 仪表盘分组列表可点击导航

恢复:
- 恢复 .github/ CI 工作流
- 恢复 tests/ 测试目录
- 恢复 docs/ 文档目录
- 恢复 CONTRIBUTING.md, SECURITY.md

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-01 21:24:06 +08:00

126 lines
4.6 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 集成测试 - 窗口尺寸适配(F5)
*
* 覆盖:
* - TC-F5-001-P: <1200px 自动折叠分组面板
* - TC-F5-002-P: <900px 自动折叠账号面板
* - TC-F5-003-P: <700px 自动折叠邮件列表面板
* - TC-F5-004-P: 窗口放大后自动恢复(仅恢复 autoCollapsed)
* - TC-F5-005-N: 用户手动折叠的面板不自动恢复
*/
const LayoutManager = require('../../../static/js/layout-manager.js');
const { createLayoutDOM, setWindowSize } = require('../test-utils.js');
describe('窗口尺寸适配集成测试(F5)', () => {
let layoutManager;
beforeEach(() => {
jest.useFakeTimers();
createLayoutDOM();
Object.defineProperty(window, 'innerWidth', {
writable: true,
configurable: true,
value: 1600
});
layoutManager = new LayoutManager();
layoutManager.init();
jest.runOnlyPendingTimers();
});
afterEach(() => {
jest.useRealTimers();
});
test('TC-F5-001-P: 窗口宽度 < 1200px 自动折叠分组面板', () => {
setWindowSize(1199, 800);
jest.advanceTimersByTime(200);
const groupsPanel = document.querySelector('[data-panel="groups"]');
expect(groupsPanel.classList.contains('collapsed')).toBe(true);
expect(groupsPanel.dataset.autoCollapsed).toBe('true');
});
test('TC-F5-002-P: 窗口宽度 < 900px 自动折叠账号面板', () => {
setWindowSize(899, 800);
jest.advanceTimersByTime(200);
const groupsPanel = document.querySelector('[data-panel="groups"]');
const accountsPanel = document.querySelector('[data-panel="accounts"]');
expect(groupsPanel.classList.contains('collapsed')).toBe(true);
expect(accountsPanel.classList.contains('collapsed')).toBe(true);
expect(accountsPanel.dataset.autoCollapsed).toBe('true');
});
test('TC-F5-003-P: 窗口宽度 < 700px 自动折叠邮件列表面板', () => {
setWindowSize(699, 800);
jest.advanceTimersByTime(200);
const groupsPanel = document.querySelector('[data-panel="groups"]');
const accountsPanel = document.querySelector('[data-panel="accounts"]');
const emailsPanel = document.querySelector('[data-panel="emails"]');
expect(groupsPanel.classList.contains('collapsed')).toBe(true);
expect(accountsPanel.classList.contains('collapsed')).toBe(true);
expect(emailsPanel.classList.contains('collapsed')).toBe(true);
expect(emailsPanel.dataset.autoCollapsed).toBe('true');
});
test('TC-F5-004-P: 窗口放大后自动恢复面板(仅恢复 autoCollapsed)', () => {
setWindowSize(699, 800);
jest.advanceTimersByTime(200);
const groupsPanel = document.querySelector('[data-panel="groups"]');
const accountsPanel = document.querySelector('[data-panel="accounts"]');
const emailsPanel = document.querySelector('[data-panel="emails"]');
expect(groupsPanel.classList.contains('collapsed')).toBe(true);
expect(accountsPanel.classList.contains('collapsed')).toBe(true);
expect(emailsPanel.classList.contains('collapsed')).toBe(true);
setWindowSize(1600, 900);
jest.advanceTimersByTime(200);
expect(groupsPanel.classList.contains('collapsed')).toBe(false);
expect(accountsPanel.classList.contains('collapsed')).toBe(false);
expect(emailsPanel.classList.contains('collapsed')).toBe(false);
expect(groupsPanel.dataset.autoCollapsed).not.toBe('true');
expect(accountsPanel.dataset.autoCollapsed).not.toBe('true');
expect(emailsPanel.dataset.autoCollapsed).not.toBe('true');
});
test('TC-F5-005-N: 用户手动折叠的面板不自动恢复', () => {
const groupsPanel = document.querySelector('[data-panel="groups"]');
// 手动折叠:不打 autoCollapsed
layoutManager.collapsePanel('groups', false);
expect(groupsPanel.classList.contains('collapsed')).toBe(true);
expect(groupsPanel.dataset.autoCollapsed).not.toBe('true');
// 小屏下不应把“手动折叠”改写成 autoCollapsed
setWindowSize(1199, 800);
jest.advanceTimersByTime(200);
expect(groupsPanel.dataset.autoCollapsed).not.toBe('true');
// 放大也不应恢复
setWindowSize(1600, 900);
jest.advanceTimersByTime(200);
expect(groupsPanel.classList.contains('collapsed')).toBe(true);
});
test('隐藏状态下的邮件列表不参与自动折叠/恢复(避免空白列回归)', () => {
const emailsPanel = document.querySelector('[data-panel="emails"]');
emailsPanel.classList.add('hidden');
setWindowSize(699, 800);
jest.advanceTimersByTime(200);
expect(emailsPanel.dataset.autoCollapsed).not.toBe('true');
setWindowSize(1600, 900);
jest.advanceTimersByTime(200);
expect(emailsPanel.dataset.autoCollapsed).not.toBe('true');
});
});