snort/packages/app/src/System/Query.test.ts

67 lines
1.5 KiB
TypeScript
Raw Normal View History

2023-04-08 19:14:08 +00:00
import { Connection } from "@snort/nostr";
2023-03-29 10:40:05 +00:00
import { Query } from "./Query";
2023-04-08 19:14:08 +00:00
import { getRandomValues } from "crypto";
2023-04-25 17:01:29 +00:00
import { FlatNoteStore } from "./NoteCollection";
2023-04-08 19:14:08 +00:00
window.crypto = {} as any;
window.crypto.getRandomValues = getRandomValues as any;
2023-03-29 10:40:05 +00:00
describe("query", () => {
test("progress", () => {
2023-04-25 17:01:29 +00:00
const q = new Query(
"test",
[
{
kinds: [1],
authors: ["test"],
},
],
new FlatNoteStore()
);
2023-03-29 10:40:05 +00:00
const opt = {
read: true,
write: true,
2023-04-08 19:14:08 +00:00
};
2023-03-29 10:40:05 +00:00
const c1 = new Connection("wss://one.com", opt);
c1.Down = false;
const c2 = new Connection("wss://two.com", opt);
c2.Down = false;
const c3 = new Connection("wss://three.com", opt);
c3.Down = false;
q.sendToRelay(c1);
q.sendToRelay(c2);
q.sendToRelay(c3);
expect(q.progress).toBe(0);
2023-04-06 21:37:40 +00:00
q.eose(q.id, c1);
2023-03-29 10:40:05 +00:00
expect(q.progress).toBe(1 / 3);
2023-04-06 21:37:40 +00:00
q.eose(q.id, c1);
2023-03-29 10:40:05 +00:00
expect(q.progress).toBe(1 / 3);
2023-04-06 21:37:40 +00:00
q.eose(q.id, c2);
2023-03-29 10:40:05 +00:00
expect(q.progress).toBe(2 / 3);
2023-04-06 21:37:40 +00:00
q.eose(q.id, c3);
2023-03-29 10:40:05 +00:00
expect(q.progress).toBe(1);
2023-04-25 17:01:29 +00:00
const qs = new Query(
"test-1",
[
{
kinds: [1],
authors: ["test-sub"],
},
],
new FlatNoteStore()
);
2023-03-29 10:40:05 +00:00
q.subQueries.push(qs);
qs.sendToRelay(c1);
expect(q.progress).toBe(0.5);
2023-04-06 21:37:40 +00:00
q.eose(qs.id, c1);
2023-03-29 10:40:05 +00:00
expect(q.progress).toBe(1);
qs.sendToRelay(c2);
// 1 + 0.5 (1/2 sent sub query)
expect(q.progress).toBe(1.5 / 2);
});
});