Compare commits

..

2 Commits

Author SHA1 Message Date
codex-bot 8649af1b37 Update production visual acceptance for new Studio workspaces 2026-10-29 22:18:17 +08:00
Zayden-Jung bcdcd0906b Merge pull request 'Unify guidance wiki SaaS and Studio Graphic workspaces' (#21) from codex/studio-graphic into main
studio CI and deployment / verify-and-deploy (push) Failing after 8m18s
waterfall-wiki CI and deployment / verify-and-deploy (push) Failing after 18m24s
Reviewed-on: #21
2026-10-29 14:04:25 +00:00
+14 -2
View File
@@ -23,7 +23,19 @@ const assert=require('node:assert/strict');
});metrics.push(m);await writeFile(dir+'/metrics.json',JSON.stringify({metrics,images,errors},null,2));
}
if(!process.argv.includes('--after-layouts')&&!process.argv.includes('--diagnose'))assert.deepEqual(metrics.filter(m=>m.overflow.length),[],'Default copy must fit every native slot');
await page.goto(base+'/studio',{waitUntil:'networkidle'});assert.equal(await page.locator('.library-item').count(),27);await page.screenshot({path:dir+'/catalog-desktop.png',fullPage:true});
await page.goto(base+'/studio',{waitUntil:'networkidle'});
assert.equal(new URL(page.url()).pathname,'/studio/graphic');
await page.getByRole('button',{name:'添加文字',exact:true}).waitFor({state:'visible'});
assert.equal(await page.locator('.library-item').count(),0,'Old catalog is retired from the entry page');
await page.getByRole('button',{name:'添加文字',exact:true}).click();
await page.getByRole('textbox',{name:'文字内容',exact:true}).fill('Studio 线上验收');
await page.reload({waitUntil:'networkidle'});
assert.ok(await page.evaluate(()=>JSON.parse(localStorage.getItem('studio.graphic.v1')).items.some(i=>i.text==='Studio 线上验收')));
await page.screenshot({path:dir+'/graphic-desktop.png',fullPage:true});
await page.goto(base+'/studio/infinite_canvas',{waitUntil:'networkidle'});
assert.equal(new URL(page.url()).pathname,'/studio/infinite_canvas');
await page.getByRole('button',{name:'添加笔记',exact:true}).waitFor({state:'visible'});
await page.screenshot({path:dir+'/infinite-canvas-desktop.png',fullPage:true});
const verify=JSON.parse(await readFile('/tmp/studio-library/verification.json','utf8'));
for(const d of verify.results){await page.goto(base+d.url,{waitUntil:'networkidle'});assert.equal(await page.locator('img').count(),1);const current=await page.locator('img').evaluate(img=>({src:img.currentSrc,complete:img.complete,width:img.naturalWidth}));assert.ok(current.complete&&current.width>0);assert.equal(new URL(current.src).pathname,'/api/preview');await page.locator('article.native-layout').screenshot({path:dir+'/'+d.layoutId+'-saved.png',style:'.page-tools{visibility:hidden}'});
assert.equal(new URL(page.url()).pathname,'/studio/template-layout');
@@ -35,7 +47,7 @@ const assert=require('node:assert/strict');
const direct=await plain.newPage();await direct.goto(base+d.url,{waitUntil:'networkidle'});assert.equal(await direct.locator('article[data-design-id="'+d.id+'"]').count(),1);assert.ok((await direct.locator('article').innerText()).includes('API 验收'));await plain.close();
}
for(const slug of ['learning-skills-template','layout-selection']){await page.goto(base+'/studio/ideas/'+slug,{waitUntil:'networkidle'});await page.screenshot({path:dir+'/tool-'+slug+'.png',fullPage:true})}
await page.setViewportSize({width:390,height:844});await page.goto(base+'/studio',{waitUntil:'networkidle'});assert.ok(await page.evaluate(()=>document.documentElement.scrollWidth<=innerWidth));await page.screenshot({path:dir+'/catalog-mobile.png',fullPage:true});
await page.setViewportSize({width:390,height:844});await page.goto(base+'/studio',{waitUntil:'networkidle'});assert.ok(await page.evaluate(()=>document.documentElement.scrollWidth<=innerWidth));await page.screenshot({path:dir+'/graphic-mobile.png',fullPage:true});
await page.goto(base+verify.results[0].url,{waitUntil:'networkidle'});await page.screenshot({path:dir+'/standard-mobile.png',fullPage:true});
await page.goto(base+'/categories?category='+encodeURIComponent('文档入口'),{waitUntil:'domcontentloaded',timeout:60000});await page.getByRole('navigation',{name:'系统标签分类',exact:true}).waitFor({state:'visible'});assert.equal(await page.locator('.discovery-card').count(),3);await page.waitForFunction(()=>Array.from(document.querySelectorAll('.discovery-card img')).every(img=>img.complete&&img.naturalWidth>0),null,{timeout:60000});await page.screenshot({path:dir+'/document-entries.png',fullPage:true});
await writeFile(dir+'/metrics.json',JSON.stringify({metrics,images,errors},null,2));