15 lines
2.3 KiB
TypeScript
15 lines
2.3 KiB
TypeScript
import {test,expect} from '@playwright/test'
|
|
import axe from 'axe-core'
|
|
for(const theme of ['light','dark'])for(const width of [1440,320])test(`GRE: скрытый PSK сохраняет состояние IPsec и помечает экспорт ${theme} ${width}`,async({page})=>{
|
|
let writes=0;await page.addInitScript(t=>localStorage.setItem('rl-theme',t),theme)
|
|
const token=[Buffer.from('{}').toString('base64url'),Buffer.from(JSON.stringify({sub:'own209',apps:['mm'],permissions:['mm:dashboard:read','mm:servers:read','mm:network:read'],exp:Math.floor(Date.now()/1000)+600})).toString('base64url'),'fixture'].join('.')
|
|
await page.addInitScript(t=>localStorage.setItem('mmapp_token',t),token)
|
|
const tunnel={id:'*1',serverId:'1',name:'own209-gre',localAddress:'192.0.2.1',remoteAddress:'192.0.2.2',localInnerIp:'10.209.0.1/30',remoteInnerIp:'10.209.0.2/30',poolId:'live',ipsec:{secret:''},mtu:1476,keepaliveInterval:10,keepaliveRetries:3,dscp:'inherit',clampTcpMss:true,allowFastPath:false,comment:'',enabled:true,status:'up'}
|
|
await page.route('**/health',r=>r.fulfill({json:{ok:true}}))
|
|
await page.route('**/api/**',r=>{if(r.request().method()!=='GET')writes++;const p=new URL(r.request().url()).pathname;return r.fulfill({json:p==='/api/auth/config'?{required:true}:p==='/api/servers'?[{id:1,name:'Own209 router',host:'192.0.2.1',enabled:true,country:'RU'}]:p==='/api/gre/tunnels'?{tunnels:[tunnel]}:{}})})
|
|
await page.setViewportSize({width,height:1000});await page.goto('/gre?server=1')
|
|
const row=page.getByRole('row').filter({hasText:'own209-gre'});await expect(row).toContainText('IPsec');await expect(row).not.toContainText('Открытый')
|
|
await expect(page.getByRole('button',{name:'Добавить туннель',exact:true})).toBeDisabled()
|
|
const badge=row.getByText('IPsec',{exact:true});await badge.scrollIntoViewIfNeeded();await badge.evaluate(el=>el.id='own214-ipsec-badge');await page.addScriptTag({content:axe.source});const result=await page.evaluate(async()=>(window as unknown as {axe:typeof axe}).axe.run({include:['#own214-ipsec-badge']},{runOnly:{type:'rule',values:['color-contrast']}}));expect(result.violations.map(v=>({id:v.id,nodes:v.nodes.map(n=>n.failureSummary)}))).toEqual([]);expect(writes).toBe(0);expect(await page.evaluate(()=>document.documentElement.scrollWidth<=innerWidth+1)).toBe(true)
|
|
})
|