Files
web_hgdjc_h5/tests/seo-snapshot.test.mjs
谢宇宁andClaude Opus 5.5 f65d10e998 Initial commit
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 23:07:59 +07:00

64 lines
4.3 KiB
JavaScript

import {test} from 'node:test';
import assert from 'node:assert/strict';
import {mkdtemp,readFile,readdir,rm,writeFile} from 'node:fs/promises';
import {tmpdir} from 'node:os';
import {join} from 'node:path';
import ts from 'typescript';
import {seo,seoUrl,structuredUrl} from './helpers/seo.mjs';
const source=await readFile(new URL('../src/lib/seo-snapshot.server.ts',import.meta.url),'utf8');
const compiled=ts.transpileModule(source,{compilerOptions:{target:ts.ScriptTarget.ES2022,module:ts.ModuleKind.ESNext}}).outputText
.replace("'./seo'",JSON.stringify(seoUrl)).replace("'./structured-data'",JSON.stringify(structuredUrl));
const {SeoSnapshotStore}=await import('data:text/javascript;base64,'+Buffer.from(compiled).toString('base64'));
const environment=seo.resolveSeoEnvironment({config:{foreverUrlAddr:'https://drama.test'},seoInfo:{webSiteName:'站点品牌',title:'全站标题'}},[{urlValue:'/shorts/',seoInfo:{title:'栏目标题'}}]);
async function directory(t){const dir=await mkdtemp(join(tmpdir(),'91-seo-snapshot-'));t.after(()=>rm(dir,{recursive:true,force:true}));return dir;}
test('public SEO snapshots survive a new store instance without persisting unrelated credentials',async t=>{
const dir=await directory(t),store=new SeoSnapshotStore('https://api-a.test',dir);
await store.write({...environment,token:'private-session',reportSdkConfig:'private-sdk',categories:[{...environment.categories[0],secret:'private-category'}]});
const saved=await new SeoSnapshotStore('https://api-a.test',dir).read();
assert.equal(saved.origin,environment.origin);assert.deepEqual(saved.site,environment.site);assert.equal(saved.categories[0].seoInfo.title,'栏目标题');
const text=await readFile(join(dir,(await readdir(dir))[0]),'utf8');
for(const value of ['private-session','private-sdk','private-category'])assert.ok(!text.includes(value));
assert.equal(await new SeoSnapshotStore('https://api-b.test',dir).read(),undefined);
});
test('invalid writes and corrupt files cannot replace the last valid site identity',async t=>{
const dir=await directory(t),store=new SeoSnapshotStore('https://api.test',dir);
await store.write(environment);await store.write({...environment,origin:'javascript:bad'});
assert.equal((await store.read()).origin,environment.origin);
const filename=join(dir,(await readdir(dir))[0]);await writeFile(filename,'{invalid-json');
assert.equal((await store.read()).origin,environment.origin);
assert.equal(await new SeoSnapshotStore('https://api.test',dir).read(),undefined);
await writeFile(filename,JSON.stringify({version:1,environment:{...environment,origin:'http://localhost:3000'}}));
assert.equal(await new SeoSnapshotStore('https://api.test',dir).read(),undefined);
});
test('parallel snapshots are atomic and a non-writable cache still preserves process-local identity',async t=>{
const dir=await directory(t),store=new SeoSnapshotStore('https://api.test',dir);
await Promise.all(Array.from({length:8},(_,n)=>store.write({...environment,origin:`https://site-${n}.test`})));
const files=await readdir(dir);assert.equal(files.length,1);assert.ok(files[0].endsWith('.json'));
const saved=await new SeoSnapshotStore('https://api.test',dir).read();assert.match(saved.origin,/^https:\/\/site-\d\.test$/);
const blocked=join(dir,'not-a-directory');await writeFile(blocked,'file');
const memory=new SeoSnapshotStore('https://blocked.test',blocked);await memory.write(environment);
assert.equal((await memory.read()).origin,environment.origin);
});
test('test and production snapshots remain isolated even when they use the same API',async t=>{
const root=await directory(t),cwd=process.cwd(),previous=process.env.APP_DIST_DIR;
try{
process.chdir(root);
process.env.APP_DIST_DIR='.next-test';
await new SeoSnapshotStore('https://same-api.test').write(environment);
process.env.APP_DIST_DIR='.next';
assert.equal(await new SeoSnapshotStore('https://same-api.test').read(),undefined);
await new SeoSnapshotStore('https://same-api.test').write({...environment,origin:'https://production-site.test'});
process.env.APP_DIST_DIR='.next-test';
assert.equal((await new SeoSnapshotStore('https://same-api.test').read()).origin,environment.origin);
}finally{
process.chdir(cwd);
if(previous===undefined)delete process.env.APP_DIST_DIR;else process.env.APP_DIST_DIR=previous;
}
});