24 lines
3.7 KiB
TypeScript
24 lines
3.7 KiB
TypeScript
import {test,expect} from "@playwright/test"
|
|
import {container,server,state} from "./fixtures/containers"
|
|
const headers={"access-control-allow-origin":"*","access-control-allow-methods":"GET,POST,OPTIONS","access-control-allow-headers":"Content-Type,Authorization"}
|
|
for(const change of ["backend","mode"])for(const fails of [false,true])test("Контейнеры: позднее чтение/"+change+"/"+fails,async({page})=>{
|
|
let started=false,completed=false,release!:()=>void;const gate=new Promise<void>(r=>release=r)
|
|
await page.route("**/health",r=>r.fulfill({headers,json:{ok:true}}));await page.route("**/api/**",r=>{const p=new URL(r.request().url()).pathname;return r.fulfill({headers,json:p==="/api/auth/config"?{required:false}:p==="/api/servers"?[server]:state()})})
|
|
await page.route("**/api/containers/state",async r=>{if(new URL(r.request().url()).port!=="8000")return r.fallback();started=true;await gate;try{await r.fulfill(fails?{headers,status:503,json:{error:"СТАРАЯ ОШИБКА контейнеров"}}:{headers,json:state([{...container,name:"СТАРЫЙ КОНТЕЙНЕР"}])})}catch{}finally{completed=true}})
|
|
await page.goto("/containers");await expect.poll(()=>started).toBe(true);await page.goto("/settings")
|
|
if(change==="backend"){const input=page.getByPlaceholder("http://localhost:8000");await input.fill("http://localhost:8101");await input.press("Enter")}else await page.getByRole("button",{name:"Моковые",exact:true}).click()
|
|
await page.goto("/containers");release();await expect.poll(()=>completed).toBe(true)
|
|
if(change==="backend")await expect(page.getByText(container.name,{exact:true})).toBeVisible();else await expect(page.getByText("Моковые данные",{exact:true})).toBeVisible()
|
|
await expect(page.getByText("СТАРЫЙ КОНТЕЙНЕР",{exact:true})).toHaveCount(0);await expect(page.getByText(/СТАРАЯ ОШИБКА контейнеров/)).toHaveCount(0)
|
|
})
|
|
for(const action of ["stop","remove"])for(const fails of [false,true])test("Контейнеры: поздняя команда/"+action+"/"+fails,async({page})=>{
|
|
const commandContainer={...container,status:action==="remove"?"stopped":"running"}
|
|
let started=false,completed=false,release!:()=>void;const gate=new Promise<void>(r=>release=r)
|
|
await page.route("**/health",r=>r.fulfill({headers,json:{ok:true}}));await page.route("**/api/**",r=>{const p=new URL(r.request().url()).pathname;return r.fulfill({headers,json:p==="/api/auth/config"?{required:false}:p==="/api/servers"?[server]:state([commandContainer])})})
|
|
await page.route("**/api/servers/1/containers/"+action,async r=>{started=true;await gate;try{await r.fulfill(fails?{headers,status:503,json:{error:"СТАРАЯ КОМАНДА ОТКАЗ"}}:{headers,json:{ok:true}})}catch{}finally{completed=true}})
|
|
await page.goto("/containers");await page.getByRole("button",{name:"Действия контейнера "+container.name}).click();await page.getByRole("menuitem",{name:action==="stop"?"Остановить":"Удалить",exact:true}).click()
|
|
if(action==="remove")await page.getByRole("alertdialog").getByRole("button",{name:"Удалить",exact:true}).click()
|
|
await expect.poll(()=>started).toBe(true);await page.goto("/settings");const input=page.getByPlaceholder("http://localhost:8000");await input.fill("http://localhost:8101");await input.press("Enter");await page.goto("/containers");await expect(page.getByText(container.name,{exact:true})).toBeVisible();release();await expect.poll(()=>completed).toBe(true)
|
|
await expect(page.getByText(container.name,{exact:true})).toBeVisible();await expect(page.getByText(/СТАРАЯ КОМАНДА ОТКАЗ/)).toHaveCount(0);await expect(page.getByRole("status").filter({hasText:"API подтвердил команду"})).toHaveCount(0)
|
|
})
|