mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-08-24 04:13:59 +02:00
60 lines
1.8 KiB
TypeScript
60 lines
1.8 KiB
TypeScript
import { createStore } from "jotai";
|
|
import { expect, test } from "vitest";
|
|
import type { HttpResponseEvent } from "../bindings/gen_models";
|
|
import { httpResponseEventsAtom, modelStoreDataAtom } from "./atoms";
|
|
import { newStoreData } from "./util";
|
|
|
|
// The five setting events that every send writes, all within the same millisecond
|
|
const SETTING_NAMES = [
|
|
"validate_certificates",
|
|
"redirects",
|
|
"timeout",
|
|
"send_cookies",
|
|
"store_cookies",
|
|
];
|
|
|
|
function settingEvent(id: string, name: string, createdAt: string): HttpResponseEvent {
|
|
return {
|
|
model: "http_response_event",
|
|
id,
|
|
createdAt,
|
|
updatedAt: createdAt,
|
|
workspaceId: "wk_1",
|
|
responseId: "rs_1",
|
|
event: { type: "setting", name, value: "true" },
|
|
};
|
|
}
|
|
|
|
test("events with equal createdAt keep store (DB) insertion order", () => {
|
|
const store = createStore();
|
|
const data = newStoreData();
|
|
SETTING_NAMES.forEach((name, i) => {
|
|
data.http_response_event[`hre_${i}`] = settingEvent(
|
|
`hre_${i}`,
|
|
name,
|
|
"2026-08-17T00:00:00.123",
|
|
);
|
|
});
|
|
store.set(modelStoreDataAtom, data);
|
|
|
|
const names = store.get(httpResponseEventsAtom).map((e) => {
|
|
return e.event.type === "setting" ? e.event.name : e.event.type;
|
|
});
|
|
expect(names).toEqual(SETTING_NAMES);
|
|
});
|
|
|
|
test("events with distinct createdAt sort ascending", () => {
|
|
const store = createStore();
|
|
const data = newStoreData();
|
|
for (const [id, createdAt] of [
|
|
["hre_b", "2026-08-17T00:00:00.456"],
|
|
["hre_a", "2026-08-17T00:00:00.123"],
|
|
["hre_c", "2026-08-17T00:00:00.789"],
|
|
]) {
|
|
data.http_response_event[id!] = settingEvent(id!, "timeout", createdAt!);
|
|
}
|
|
store.set(modelStoreDataAtom, data);
|
|
|
|
expect(store.get(httpResponseEventsAtom).map((e) => e.id)).toEqual(["hre_a", "hre_b", "hre_c"]);
|
|
});
|