mirror of
https://github.com/trustgraph-ai/trustgraph.git
synced 2026-07-05 03:12:10 +02:00
Remove native classes from TS runtime
This commit is contained in:
parent
952daf325d
commit
dca2786828
79 changed files with 7622 additions and 6703 deletions
|
|
@ -1,8 +1,8 @@
|
|||
import { Effect, Stream } from "effect";
|
||||
import { Effect } from "effect";
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
import { DispatchError, DispatchStreamChunk } from "../rpc/contract";
|
||||
import { EffectRpcClient, type DispatchInput } from "../socket/effect-rpc-client";
|
||||
import { BaseApi } from "../socket/trustgraph-socket";
|
||||
import { DispatchError } from "../rpc/contract";
|
||||
import { type DispatchInput, withDispatchRequestPolicy } from "../socket/effect-rpc-client";
|
||||
import { makeBaseApiWithRpc } from "../socket/trustgraph-socket";
|
||||
|
||||
const input: DispatchInput = {
|
||||
scope: "global",
|
||||
|
|
@ -13,11 +13,12 @@ const input: DispatchInput = {
|
|||
describe("Effect RPC request policy", () => {
|
||||
it("threads BaseApi timeout and retry options into dispatch calls", async () => {
|
||||
const dispatch = vi.fn(() => Promise.resolve({ ok: true }));
|
||||
const api = Object.create(BaseApi.prototype) as BaseApi;
|
||||
|
||||
(api as unknown as { rpc: { dispatch: typeof dispatch } }).rpc = {
|
||||
const api = makeBaseApiWithRpc("alice", undefined, "ws://example.test/rpc", {
|
||||
dispatch,
|
||||
};
|
||||
dispatchStream: vi.fn(() => Promise.resolve(undefined)),
|
||||
close: vi.fn(() => Promise.resolve()),
|
||||
subscribe: vi.fn(() => () => {}),
|
||||
});
|
||||
|
||||
await api.makeRequest("config", { operation: "list" }, 25, 2);
|
||||
|
||||
|
|
@ -28,52 +29,33 @@ describe("Effect RPC request policy", () => {
|
|||
});
|
||||
|
||||
it("rejects stalled dispatch calls at the requested timeout", async () => {
|
||||
const client = Object.create(EffectRpcClient.prototype) as EffectRpcClient;
|
||||
const startedAt = Date.now();
|
||||
|
||||
setClientPromise(client, {
|
||||
Dispatch: () => Effect.never,
|
||||
DispatchStream: () => Stream.never,
|
||||
});
|
||||
|
||||
await expect(
|
||||
client.dispatch(input, { timeoutMs: 20, retries: 1 }),
|
||||
Effect.runPromise(withDispatchRequestPolicy(Effect.never, { timeoutMs: 20, retries: 1 })),
|
||||
).rejects.toBeInstanceOf(DispatchError);
|
||||
|
||||
expect(Date.now() - startedAt).toBeLessThan(1_000);
|
||||
});
|
||||
|
||||
it("retries dispatch failures up to the requested attempt count", async () => {
|
||||
const client = Object.create(EffectRpcClient.prototype) as EffectRpcClient;
|
||||
let attempts = 0;
|
||||
|
||||
setClientPromise(client, {
|
||||
Dispatch: () =>
|
||||
Effect.suspend(() => {
|
||||
attempts += 1;
|
||||
if (attempts < 3) {
|
||||
return Effect.fail(new DispatchError({ message: String(attempts) }));
|
||||
}
|
||||
return Effect.succeed({ ok: true });
|
||||
}),
|
||||
DispatchStream: () => Stream.never,
|
||||
});
|
||||
|
||||
await expect(client.dispatch(input, { timeoutMs: 100, retries: 3 })).resolves.toEqual({
|
||||
ok: true,
|
||||
});
|
||||
await expect(
|
||||
Effect.runPromise(
|
||||
withDispatchRequestPolicy(
|
||||
Effect.suspend(() => {
|
||||
attempts += 1;
|
||||
if (attempts < 3) {
|
||||
return Effect.fail(new DispatchError({ message: String(attempts) }));
|
||||
}
|
||||
return Effect.succeed({ ok: true });
|
||||
}),
|
||||
{ timeoutMs: 100, retries: 3 },
|
||||
),
|
||||
),
|
||||
).resolves.toEqual({ ok: true });
|
||||
|
||||
expect(attempts).toBe(3);
|
||||
});
|
||||
});
|
||||
|
||||
function setClientPromise(
|
||||
client: EffectRpcClient,
|
||||
fakeClient: {
|
||||
Dispatch: (payload: unknown) => Effect.Effect<unknown, DispatchError>;
|
||||
DispatchStream: (payload: unknown) => Stream.Stream<DispatchStreamChunk, DispatchError>;
|
||||
},
|
||||
): void {
|
||||
(client as unknown as { clientPromise: Promise<typeof fakeClient> }).clientPromise =
|
||||
Promise.resolve(fakeClient);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue