fix(alerts): подтвердить риск ручного повтора сообщения
This commit is contained in:
1 parent
7d0608bbce
commit
b109532f33
11 files changed
+103
-16
No files matched your search
@@ -1,6 +1,6 @@
|
||||
import {emptyOutbox} from "./fixtures/alerts"
|
||||
import {test,expect,type Page} from "@playwright/test"
|
||||
import {emptyAlerts,alertsWithRule} from "./fixtures/alerts"
|
||||
import {emptyAlerts,alertsWithRule,heldOutbox} from "./fixtures/alerts"
|
||||
const headers={"access-control-allow-origin":"*","access-control-allow-methods":"GET,PUT,POST,OPTIONS","access-control-allow-headers":"Content-Type,Authorization,If-Match"}
|
||||
async function source(page:Page,value:string){const input=page.getByRole("textbox",{name:"URL бекенда",exact:true});await input.fill(value);await input.press("Enter");await expect(input).toHaveValue(value);await expect(page.getByText("Доступен",{exact:true})).toBeVisible()}
|
||||
for(const failed of [false,true])test("Alerts source: ABA discards old primary and target outcomes/"+failed,async({page})=>{
|
||||
@@ -48,3 +48,10 @@ for(const failed of [false,true])test("Queue source: ABA ignores old held list o
|
||||
return r.fulfill({headers,json:path==="/api/auth/config"?{required:false}:path==="/api/alerts"?emptyAlerts:path==="/api/alerts/outbox"?emptyOutbox:path==="/api/filters/gre-tunnels"?{tunnels:[],failures:[]}:[]})})
|
||||
try{await page.goto("/alerts");await expect.poll(()=>started).toBeGreaterThan(0);await expect(page.getByText("Всего: 0",{exact:true})).toBeVisible();await page.goto("/settings");await source(page,"http://localhost:8101");old=false;await source(page,"http://localhost:8000");await page.goto("/alerts");const panel=page.getByRole("region",{name:"Очередь Telegram",exact:true});await expect(panel).toContainText("Ожидают: 0");release();await expect.poll(()=>completed).toBe(started);await expect(panel).not.toContainText("OLD QUEUE");await expect(panel).not.toContainText("OLD HELD");await expect(panel).toContainText("Ожидают: 0")}finally{release()}
|
||||
})
|
||||
|
||||
for(const failed of [false,true])test("Queue retry source: ABA retains unknown checkpoint and ignores late receipt/"+failed,async({page})=>{
|
||||
await page.route("**/health",r=>r.fulfill({headers,json:{status:"ok"}}));await page.route("**/api/**",r=>{const path=new URL(r.request().url()).pathname;return r.fulfill({headers,json:path==="/api/auth/config"?{required:false}:path==="/api/alerts"?emptyAlerts:path==="/api/alerts/outbox"?heldOutbox:path==="/api/filters/gre-tunnels"?{tunnels:[],failures:[]}:[]})})
|
||||
let started=false,completed=false,calls=0,release!:()=>void;const gate=new Promise<void>(resolve=>release=resolve)
|
||||
await page.route("http://localhost:8000/api/alerts/outbox/held-fixture/retry",async r=>{calls++;started=true;await gate;try{await r.fulfill(failed?{headers,status:503,json:{error:"OLD RETRY FAILED"}}:{headers,json:{ok:true,id:"held-fixture",status:"pending",resolutionVersion:4}})}catch{}finally{completed=true}})
|
||||
try{await page.goto("/alerts");await page.getByRole("button",{name:"Повторить сообщение Held retry fixture"}).click();const dialog=page.getByRole("alertdialog");await dialog.getByRole("checkbox",{name:"Проверил чат и принимаю риск дубликата"}).check();await dialog.getByRole("button",{name:"Поставить в очередь повторно"}).click();await expect.poll(()=>started).toBe(true);await page.goto("/settings");await source(page,"http://localhost:8101");await page.goto("/alerts");await expect(page.getByRole("button",{name:"Повторить сообщение Held retry fixture"})).toBeEnabled();await page.goto("/settings");await source(page,"http://localhost:8000");await page.goto("/alerts");const panel=page.getByRole("region",{name:"Очередь Telegram",exact:true});await expect(panel).toContainText("Результат повтора неизвестен");release();await expect.poll(()=>completed).toBe(true);await expect(panel.getByRole("button",{name:"Повторить сообщение Held retry fixture"})).toBeDisabled();await expect(panel).not.toContainText("Сообщение поставлено в очередь");await expect(panel).not.toContainText("OLD RETRY FAILED");expect(calls).toBe(1)}finally{release()}
|
||||
})
|
||||
Reference in new issue
Block a user