frontend/test/management.test.ts
Rama master · réplica de lectura del repositorio original.
import { describe, expect, it } from 'vitest';
import { cleanupSkeletonHtml, SCAN_CARD_TEXT } from '../src/management';
describe('数据管理首屏', () => {
const skeleton = () => {
const root = document.createElement('div');
root.innerHTML = cleanupSkeletonHtml();
return root;
};
it('日常扫描立即呈现,其余操作只展示分组入口', () => {
const root = skeleton();
expect(root.querySelector('#libraryProcessing p')?.textContent).toBe(SCAN_CARD_TEXT);
expect([...root.querySelectorAll('h2')].map(heading => heading.textContent))
.toEqual(['待处理事项', '整理与维护', '清理与删除']);
expect(root.querySelector('#mediaRepair, #organize, #link-manager, #resource-sync, table')).toBeNull();
expect(root.querySelector('#libraryProcessing footer > a')?.getAttribute('href')).toBe('/sources');
});
it('扫描按钮保留最终尺寸与变体,在数据就绪前不能操作', () => {
const root = skeleton();
expect(root.querySelector('[inert]')).not.toBeNull();
const split = root.querySelector('#libraryProcessing [data-split-button]')!;
expect(split.getAttribute('data-variant')).toBe('primary');
expect(split.querySelector('button:last-child use')?.getAttribute('href')).toBe('#i-chevron-down');
expect(root.querySelector('[aria-label="媒体库"]')?.getAttribute('aria-disabled')).toBe('true');
for (const button of root.querySelectorAll('footer button')) {
expect(button.hasAttribute('disabled')).toBe(true);
expect(button.hasAttribute('data-skeleton-action')).toBe(true);
}
});
});