Files
SubTracker/apps/web/tests/unit/components/app-layout.test.ts
SmileQWQ dc5bade56a feat: sync lite locale and notification surfaces
## 中文
- 接入 shared locale-core、i18n 导出与 /api/v1/app/locale,让 lite 支持中英文切换与请求级语言透传。
- 为 App 壳子、登录页、设置页和离散消息接入本地化文案,并恢复 lite 的品牌与 Worker 提示语境。
- 同步通知模板、Apprise/Bark/NotifyX、Telegram MarkdownV2 与通知渠道设置面,保留 Worker 下仅支持 Resend、Webhook/Gotify 禁用忽略 SSL 的边界。

## English
- Add shared locale-core exports, i18n helpers, and /api/v1/app/locale so lite can switch locales and send request-scoped locale headers.
- Localize the app shell, login page, settings page, and discrete messages while restoring lite branding and Worker-specific wording.
- Sync notification templates, Apprise/Bark/NotifyX, Telegram MarkdownV2, and notification settings surfaces while keeping the Worker-only Resend and ignore-SSL restrictions.
2026-05-30 15:30:16 +08:00

37 lines
1.7 KiB
TypeScript

import { readFileSync } from 'node:fs'
import { describe, expect, it } from 'vitest'
describe('app layout sidebar behavior', () => {
it('keeps desktop sidebar fixed and menu independently scrollable', () => {
const source = readFileSync('src/App.vue', 'utf8')
const globalStyle = readFileSync('src/style.css', 'utf8')
expect(source).toContain('content-style="overflow: visible;"')
expect(source).toContain('class="desktop-sider"')
expect(source).toContain('position: sticky;')
expect(source).toContain('height: 100vh;')
expect(source).toContain('overflow: visible;')
expect(source).toContain('align-self: flex-start;')
expect(source).toContain('overflow-y: auto;')
expect(source).toContain('class="main-content"')
expect(source).not.toContain('height: calc(100vh - 64px);')
expect(source).not.toContain('.main-content :deep(.n-layout-scroll-container)')
expect(globalStyle).toContain(":root[data-theme='dark']")
expect(globalStyle).toContain('background: #111827;')
expect(globalStyle).toContain('#app {')
expect(globalStyle).toContain('background: var(--app-bg);')
expect(source).toContain('brandLogoUrl')
expect(source).toContain('versionUpdateModalVisible')
expect(source).toContain('useVersionUpdateQuery')
expect(source).toContain('openVersionUpdatePanel')
expect(source).toContain('logo__update-dot')
expect(source).toContain("const appDisplayName = 'SubTracker'")
expect(source).toContain("const appVariant = 'Lite'")
expect(source).toContain('logo__variant')
expect(source).toContain("t('app.versionUpdates')")
expect(source).not.toContain('/budgets')
expect(source).not.toContain('预算统计')
expect(source).not.toContain('enableTagBudgets')
})
})