Files
Genarrative/apps/admin-web/src/styles/admin.test.ts
T
kdletters 8862887baa 新增后台充值退款管理与微信V3退款闭环
新增充值订单查询、通用用户详情、钱包冻结与部分退款操作
接入微信V3退款申请、回调、主动查单、交易账单对账与安全诊断
新增退款占用、权益追回、异常欠账和消费限制事务
补齐Native支付SSE自动收口及退款编号与部分退款校验
同步SpacetimeDB schema、生成绑定、测试与项目文档
2026-07-14 12:16:01 +08:00

45 lines
1.7 KiB
TypeScript

import fs from 'node:fs';
import path from 'node:path';
import { describe, expect, test } from 'vitest';
const stylesheet = fs.readFileSync(
path.resolve(process.cwd(), 'apps/admin-web/src/styles/admin.css'),
'utf8',
);
describe('admin shell scrolling contract', () => {
test('desktop shell keeps sidebar separate from the scrollable content', () => {
expect(ruleFor('.admin-shell')).toContain('\n height: 100dvh;');
expect(ruleFor('.admin-shell')).toContain('overflow: hidden');
expect(ruleFor('.admin-sidebar')).toContain('min-height: 0');
expect(ruleFor('.admin-sidebar')).toContain('overflow-y: auto');
expect(ruleFor('.admin-main')).toContain('min-height: 0');
expect(ruleFor('.admin-main')).toContain('overflow: hidden');
expect(ruleFor('.admin-content')).toContain('min-height: 0');
expect(ruleFor('.admin-content')).toContain('overflow: auto');
});
test('mobile navigation stays in one horizontally scrollable row', () => {
const mobileStyles = stylesheet.slice(stylesheet.indexOf('@media (max-width: 980px)'));
expect(mobileStyles).toContain('.admin-bottom-nav {');
expect(mobileStyles).toContain('display: flex');
expect(mobileStyles).toContain('overflow-x: auto');
expect(mobileStyles).not.toContain(
'grid-template-columns: repeat(auto-fit, minmax(64px, 1fr))',
);
expect(mobileStyles).toContain('flex: 0 0 76px');
});
});
function ruleFor(selector: string) {
const escapedSelector = selector.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
const match = stylesheet.match(
new RegExp(`${escapedSelector}\\s*\\{([^}]*)\\}`),
);
if (!match) {
throw new Error(`Missing CSS rule for ${selector}`);
}
return match[1];
}