26 lines
2.3 KiB
TypeScript
26 lines
2.3 KiB
TypeScript
import {test,expect,type Page} from "@playwright/test"
|
|
async function setup(page:Page,known:boolean){
|
|
const server={id:1,name:"Источник",host:"192.0.2.1",type:"exit-node",enabled:true,country:"RU",site:"TEST",asn:"64512",status:"online",latency:1,os:"7",model:"CHR",sessions:0,wanUplinks:[]}
|
|
const time="2026-10-12T10:30:00Z",point=known?{sampledAt:time,rtt:null,loss:100,status:"down"}:{sampledAt:time,rtt:null,loss:null,status:"unknown",error:"RouterOS API error 401: Unauthorized"}
|
|
const probe={id:"probe",srcServerId:"1",name:"Проверка",target:"192.0.2.10",filter:"—",srcInterface:"",rtt:null,loss:known?100:null,status:known?"down":"unknown",series:[],enabled:true,showOnDashboard:true,observations:{samples:[point]}}
|
|
await page.route("**/health",r=>r.fulfill({json:{status:"ok"}}))
|
|
await page.route("**/api/**",r=>{const path=new URL(r.request().url()).pathname
|
|
const json=path==="/api/auth/config"?{required:false}:path==="/api/servers"?[server]:path==="/api/uptime/overview"?{probes:[probe],resources:[],rangeStartAt:"2026-10-12T10:00:00Z",rangeEndAt:"2026-10-12T11:00:00Z"}:path==="/api/uptime/speed-probes"?{probes:[]}:path==="/api/uptime/speed-test/runs"?{runs:[]}:{}
|
|
return r.fulfill({json})
|
|
})
|
|
await page.goto("/uptime?tab=probes")
|
|
}
|
|
for(const width of[1440,320])test(`Ping ${width}: API failure is no data, not measured loss`,async({page})=>{
|
|
await page.setViewportSize({width,height:1000});await setup(page,false)
|
|
await expect(page.getByText("Ошибка измерения: RouterOS API error 401: Unauthorized",{exact:true})).toBeVisible()
|
|
await expect(page.getByText("100%",{exact:true})).toHaveCount(0)
|
|
await page.getByRole("button",{name:/Нет данных/}).first().click();await expect(page).toHaveURL(/status=unknown/)
|
|
await expect(page.getByText("Ошибка измерения: RouterOS API error 401: Unauthorized",{exact:true})).toBeVisible()
|
|
expect(await page.evaluate(()=>document.documentElement.scrollWidth<=innerWidth)).toBe(true)
|
|
await page.screenshot({path:`docs/ux-ui/screens/ping-measurement-unknown-${width}-2026-10-12.png`,fullPage:true})
|
|
})
|
|
test("Ping measured 100 percent loss remains a real down observation",async({page})=>{
|
|
await setup(page,true);await expect(page.getByText("100%",{exact:true})).toBeVisible()
|
|
await expect(page.getByText(/Ошибка измерения:/)).toHaveCount(0)
|
|
})
|