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) })