weixin-download.test.ts
1 import { describe, expect, it } from 'vitest'; 2 3 async function loadModule() { 4 // @ts-expect-error JS adapter — no type declarations 5 return import('../clis/weixin/download.js'); 6 } 7 8 describe('weixin publish time extraction', () => { 9 it('prefers publish_time text over create_time-like date strings', async () => { 10 const mod = await loadModule(); 11 12 expect(mod.extractWechatPublishTime( 13 '2026年3月24日 22:38', 14 'var create_time = "2026年3月24日 22:38";', 15 )).toBe('2026年3月24日 22:38'); 16 }); 17 18 it('falls back to unix timestamp create_time values', async () => { 19 const mod = await loadModule(); 20 21 expect(mod.extractWechatPublishTime( 22 '', 23 'var create_time = "1711291080";', 24 )).toBe('2024-03-24 22:38:00'); 25 }); 26 27 it('rejects malformed create_time values', async () => { 28 const mod = await loadModule(); 29 30 expect(mod.extractWechatPublishTime( 31 '', 32 'var create_time = "2026年3月24日 22:38";', 33 )).toBe(''); 34 expect(mod.extractWechatPublishTime( 35 '', 36 'var create_time = "1711291080abc";', 37 )).toBe(''); 38 expect(mod.extractWechatPublishTime( 39 '', 40 'var create_time = "17112910800";', 41 )).toBe(''); 42 }); 43 44 it('builds a self-contained browser helper that matches fallback behavior', async () => { 45 const mod = await loadModule(); 46 47 const extractInPage = eval(mod.buildExtractWechatPublishTimeJs()) as (publishTimeText: string, htmlStr: string) => string; 48 49 expect(extractInPage( 50 '', 51 'var create_time = "1711291080";', 52 )).toBe('2024-03-24 22:38:00'); 53 }); 54 55 it('browser helper still prefers DOM publish_time text', async () => { 56 const mod = await loadModule(); 57 58 const extractInPage = eval(mod.buildExtractWechatPublishTimeJs()) as (publishTimeText: string, htmlStr: string) => string; 59 60 expect(extractInPage( 61 '2026年3月24日 22:38', 62 'var create_time = "1711291080";', 63 )).toBe('2026年3月24日 22:38'); 64 }); 65 66 it('detects WeChat verification gate pages', async () => { 67 const mod = await loadModule(); 68 69 expect(mod.detectWechatAccessIssue( 70 '环境异常 当前环境异常,完成验证后即可继续访问。 去验证', 71 '<html><body><a id="js_verify">去验证</a></body></html>', 72 )).toBe('environment verification required'); 73 }); 74 75 it('browser access detector matches the server-side verifier', async () => { 76 const mod = await loadModule(); 77 78 const detectInPage = eval(mod.buildDetectWechatAccessIssueJs()) as (pageText: string, htmlStr: string) => string; 79 80 expect(detectInPage( 81 '环境异常 当前环境异常,完成验证后即可继续访问。 去验证', 82 '<html>secitptpage/verify.html<a id="js_verify">去验证</a></html>', 83 )).toBe('environment verification required'); 84 }); 85 86 it('picks the first non-empty WeChat metadata field', async () => { 87 const mod = await loadModule(); 88 89 expect(mod.pickFirstWechatMetaText('', 'Name cleared', '数字生命卡兹克')).toBe('数字生命卡兹克'); 90 expect(mod.pickFirstWechatMetaText('', ' 聊聊刚刚上线的PixVerse V6视频模型。 ')).toBe('聊聊刚刚上线的PixVerse V6视频模型。'); 91 }); 92 });