Files
MeshChatX/tests/frontend/wsConnectionSupport.test.js

42 lines
1.6 KiB
JavaScript

import { describe, expect, it, vi } from "vitest";
import {
formatDisconnectedDuration,
getNextReconnectDelayMs,
reconnectDelayWithJitterMs,
} from "../../meshchatx/src/frontend/js/wsConnectionSupport";
describe("getNextReconnectDelayMs", () => {
it("doubles exponentially and caps at max", () => {
expect(getNextReconnectDelayMs(0, 1000, 60000)).toBe(1000);
expect(getNextReconnectDelayMs(1, 1000, 60000)).toBe(2000);
expect(getNextReconnectDelayMs(2, 1000, 60000)).toBe(4000);
expect(getNextReconnectDelayMs(16, 1000, 60000)).toBe(60000);
});
});
describe("reconnectDelayWithJitterMs", () => {
it("adds jitter in range", () => {
vi.spyOn(Math, "random").mockReturnValue(0.5);
expect(reconnectDelayWithJitterMs(0, 1000, 60000, 400)).toBe(1200);
vi.mocked(Math.random).mockRestore();
});
});
describe("formatDisconnectedDuration", () => {
it("formats seconds", () => {
expect(formatDisconnectedDuration(0)).toBe("0s");
expect(formatDisconnectedDuration(1500)).toBe("1s");
expect(formatDisconnectedDuration(59000)).toBe("59s");
});
it("formats minutes", () => {
expect(formatDisconnectedDuration(60000)).toBe("1m");
expect(formatDisconnectedDuration(125000)).toBe("2m 5s");
});
it("formats hours and days", () => {
expect(formatDisconnectedDuration(3600000)).toBe("1h");
expect(formatDisconnectedDuration(3720000)).toBe("1h 2m");
expect(formatDisconnectedDuration(86400000)).toBe("1d");
expect(formatDisconnectedDuration(90000000)).toBe("1d 1h");
});
});