c3956f0f36
- 新增 .gitattributes(CRLF 统一)+ rust-toolchain.toml - 新增 Prettier + ESLint + markdownlint 配置 - 新增 Husky Git hooks(pre-commit lint-staged + commit-msg commitlint) - 新增 vitest 前端测试(12 tests, utils/qrText.ts) - 新增 @ 路径别名(vite + tsconfig) - 新增 ROADMAP / SUPPORT / CODEOWNERS / FUNDING / dependabot - 更新 .gitignore + .editorconfig - 更新 package.json(新增 lint/format/test 脚本) - 全项目 prettier 格式化 + eslint 通过 - 更新 CLAUDE.md + README.md
110 lines
3.0 KiB
TypeScript
110 lines
3.0 KiB
TypeScript
/**
|
|
* QR 编码文本构造工具 — 单元测试
|
|
*/
|
|
import { describe, it, expect } from 'vitest';
|
|
import {
|
|
buildWifiText,
|
|
buildVCardText,
|
|
buildEmailText,
|
|
buildPhoneText,
|
|
buildSmsText,
|
|
buildEncodedText,
|
|
} from '@/utils/qrText';
|
|
|
|
describe('buildWifiText', () => {
|
|
it('构造 WPA WiFi 字符串', () => {
|
|
const result = buildWifiText({
|
|
ssid: 'MyWiFi',
|
|
encryption: 'WPA',
|
|
password: 'pass123',
|
|
});
|
|
expect(result).toBe('WIFI:T:WPA;S:MyWiFi;P:pass123;;');
|
|
});
|
|
|
|
it('空 SSID 返回空字符串', () => {
|
|
const result = buildWifiText({ ssid: '' });
|
|
expect(result).toBe('');
|
|
});
|
|
|
|
it('隐藏网络标记正确', () => {
|
|
const result = buildWifiText({
|
|
ssid: 'HiddenNet',
|
|
encryption: 'WPA2',
|
|
password: 'secret',
|
|
hidden: 'true',
|
|
});
|
|
expect(result).toBe('WIFI:T:WPA2;S:HiddenNet;P:secret;H:true;;');
|
|
});
|
|
|
|
it('默认加密方式为 WPA', () => {
|
|
const result = buildWifiText({ ssid: 'Test' });
|
|
expect(result).toContain('T:WPA');
|
|
});
|
|
});
|
|
|
|
describe('buildVCardText', () => {
|
|
it('构造完整 vCard', () => {
|
|
const result = buildVCardText({
|
|
name: '张三',
|
|
phone: '13800138000',
|
|
email: 'zhangsan@example.com',
|
|
company: '测试公司',
|
|
address: '北京市',
|
|
});
|
|
expect(result).toContain('BEGIN:VCARD');
|
|
expect(result).toContain('VERSION:3.0');
|
|
expect(result).toContain('FN:张三');
|
|
expect(result).toContain('TEL:13800138000');
|
|
expect(result).toContain('EMAIL:zhangsan@example.com');
|
|
expect(result).toContain('END:VCARD');
|
|
});
|
|
|
|
it('空字段产生空值', () => {
|
|
const result = buildVCardText({});
|
|
expect(result).toBe('BEGIN:VCARD\nVERSION:3.0\nFN:\nTEL:\nEMAIL:\nORG:\nADR:\nEND:VCARD');
|
|
});
|
|
});
|
|
|
|
describe('buildEmailText', () => {
|
|
it('构造 mailto 链接', () => {
|
|
const result = buildEmailText({
|
|
to: 'test@example.com',
|
|
subject: 'Hello',
|
|
body: 'Test body',
|
|
});
|
|
expect(result).toContain('mailto:test@example.com');
|
|
expect(result).toContain('subject=');
|
|
expect(result).toContain('body=');
|
|
});
|
|
});
|
|
|
|
describe('buildPhoneText', () => {
|
|
it('构造电话链接', () => {
|
|
expect(buildPhoneText({ number: '13800138000' })).toBe('tel:13800138000');
|
|
});
|
|
});
|
|
|
|
describe('buildSmsText', () => {
|
|
it('构造短信链接', () => {
|
|
const result = buildSmsText({ number: '13800138000', message: 'Hi' });
|
|
expect(result).toBe('smsto:13800138000:Hi');
|
|
});
|
|
});
|
|
|
|
describe('buildEncodedText', () => {
|
|
it('url 模式返回 url 字段', () => {
|
|
const result = buildEncodedText('url', { url: 'https://example.com' });
|
|
expect(result).toBe('https://example.com');
|
|
});
|
|
|
|
it('wifi 模式委托给 buildWifiText', () => {
|
|
const result = buildEncodedText('wifi', { ssid: 'Test', encryption: 'WPA' });
|
|
expect(result).toContain('WIFI:T:WPA;S:Test');
|
|
});
|
|
|
|
it('未知模式返回 text 字段', () => {
|
|
const result = buildEncodedText('unknown', { text: 'raw text' });
|
|
expect(result).toBe('raw text');
|
|
});
|
|
});
|