import {test,expect} from "@playwright/test" const empty={"hops":[],"live":false,"rangeMinutes":5,"windowSec":300,"totalBytes":0,"namedBytes":0,"unclassifiedBytes":0,"asnLoaded":false,"countryLoaded":false,"services":[],"serviceEdges":[],"servicePaths":[],"countries":[],"countryEdges":[],"countryPaths":[],"countryServiceGroups":[],"mapServiceMinSharePct":5,"dedupApplied":false,"excludeMeshApplied":false,"excludeOverlayApplied":false} const server={id:1,name:"Router URL",host:"192.0.2.1",type:"home-router",country:"RU",enabled:true,status:null,wanUplinks:[{id:"w",name:"WAN URL",iface:"ether1",isp:"ISP",ip:"192.0.2.1",maxDl:100,maxUl:100}]} test.beforeEach(async({page})=>{ await page.route("**/health",r=>r.fulfill({json:{ok:true}})) await page.route("**/api/**",r=>{const p=new URL(r.request().url()).pathname;return r.fulfill({json:p==="/api/servers"?[server]:p==="/api/filters/gre-tunnels"?{tunnels:[],failures:[]}:p==="/api/uptime/speed-probes"?{probes:[]}:p==="/api/traffic/flow/map-hops"?empty:p==="/api/auth/config"?{required:false}:{}})}) }) test("Карта URL: устройство/WAN, фильтр, поиск, назначения, reload и история",async({page})=>{ await page.goto("/network-map?server=1&wan=0&filter=unknown&q=Router&dest=countries&tag=keep#anchor") await expect(page.getByText("Ресурсы",{exact:true})).toBeVisible() await expect(page.getByRole("textbox",{name:"Поиск узла",exact:true})).toHaveValue("Router") await page.reload();await expect(page.getByText("Ресурсы",{exact:true})).toBeVisible() await page.getByRole("button",{name:"Онлайн",exact:true}).click() await expect(page).toHaveURL(/filter=online/);await page.goBack();await expect(page).toHaveURL(/filter=unknown/) await page.getByRole("button",{name:"Сервисы",exact:true}).click();await expect(page).not.toHaveURL(/dest=countries/);await page.goBack();await expect(page).toHaveURL(/dest=countries/) await page.getByRole("textbox",{name:"Поиск узла",exact:true}).fill("Router URL");await expect.poll(()=>new URL(page.url()).searchParams.get("q")).toBe("Router URL") await expect(page).toHaveURL(/tag=keep/);await expect(page).toHaveURL(/#anchor$/) await page.getByRole("button",{name:"Устройство Router URL",exact:true}).focus();await page.keyboard.press("Escape");await expect(page).not.toHaveURL(/server=/);await expect(page).not.toHaveURL(/wan=/) await page.getByRole("button",{name:"Устройство Router URL",exact:true}).click();await expect(page).toHaveURL(/server=1/) }) for(const query of ["filter=bad","dest=bad","q=x&q=y","wan=0"])test("Карта URL: неверный контекст "+query,async({page})=>{ let reads=0;await page.route("**/api/servers",r=>{reads++;return r.fallback()}) await page.goto("/network-map?tag=keep&"+query+"#anchor") await expect(page.getByRole("alert").filter({hasText:"Контекст карты недоступен"})).toBeVisible();expect(reads).toBe(0) await page.getByRole("button",{name:"Сбросить контекст карты",exact:true}).click() await expect(page.getByRole("button",{name:"Устройство Router URL",exact:true})).toBeVisible();await expect(page).toHaveURL(/tag=keep#anchor$/) }) for(const query of ["server=99","server=1&wan=99"])test("Карта URL: недоступный объект "+query,async({page})=>{ await page.goto("/network-map?"+query) await expect(page.getByRole("alert").filter({hasText:"Объект карты недоступен"})).toBeVisible() if(query==="server=99")await expect(page.getByText("Ресурсы",{exact:true})).toHaveCount(0) await page.getByRole("button",{name:"Сбросить выбранный объект",exact:true}).click();await expect(page).not.toHaveURL(/server=/) })