fix(alerts): показать подтверждённое состояние очереди сообщений
This commit is contained in:
1 parent
b1ad9515fa
commit
89c31289bd
24 files changed
+166
-22
No files matched your search
@@ -0,0 +1,12 @@
|
||||
import assert from "node:assert/strict"
|
||||
import {test} from "node:test"
|
||||
import {getAlertsOutbox} from "./alerts-outbox"
|
||||
const empty={counts:{total:0,pending:0,processing:0,unknown:0,sent:0,failed:0,unrecognized:0},items:[],itemsLimit:20}
|
||||
test("queue strict no-store reader distinguishes confirmed zero from malformed or missing held data",async()=>{
|
||||
const original=globalThis.fetch;try{
|
||||
globalThis.fetch=async(_url,init)=>{assert.equal(init?.cache,"no-store");return Response.json(empty)};assert.deepEqual(await getAlertsOutbox("https://backend.test"),empty)
|
||||
for(const raw of [{},{...empty,counts:{...empty.counts,total:1}},{...empty,counts:{...empty.counts,total:1,unknown:1}},{...empty,secret:"private"}]){let calls=0;globalThis.fetch=async()=>{calls++;return Response.json(raw)};await assert.rejects(getAlertsOutbox("https://backend.test"),/не подтверждено/);assert.equal(calls,1)}
|
||||
const controller=new AbortController();controller.abort();let calls=0;globalThis.fetch=async()=>{calls++;return Response.json(empty)};await assert.rejects(getAlertsOutbox("https://backend.test",{signal:controller.signal}));assert.equal(calls,0)
|
||||
const late=new AbortController();globalThis.fetch=async()=>{late.abort();return Response.json(empty)};await assert.rejects(getAlertsOutbox("https://backend.test",{signal:late.signal}))
|
||||
}finally{globalThis.fetch=original}
|
||||
})
|
||||
@@ -0,0 +1,8 @@
|
||||
import {alertsOutboxOverviewSchema} from "@mmapp/contracts/alerts"
|
||||
import {requestJson} from "./http-client"
|
||||
export async function getAlertsOutbox(base:string,options?:{signal?:AbortSignal}){
|
||||
const signal=options?.signal?AbortSignal.any([options.signal,AbortSignal.timeout(30_000)]):AbortSignal.timeout(30_000);signal.throwIfAborted()
|
||||
const parsed=alertsOutboxOverviewSchema.safeParse(await requestJson<unknown>(base,"/api/alerts/outbox",{signal,cache:"no-store"}));signal.throwIfAborted()
|
||||
if(!parsed.success)throw Error("Состояние очереди не подтверждено сервером")
|
||||
return parsed.data
|
||||
}
|
||||
Reference in new issue
Block a user