fix(uptime): отличать ошибки опроса от измеренных потерь Ping

This commit is contained in:
Denozordec committed 2026-10-12 17:55:16 +07:00
1 parent ca23284486
commit 8fb46b1552
35 files changed
+1582 -78

No files matched your search

+25
View File
@@ -0,0 +1,25 @@
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)
})