071e885d63
* Add utils for r2 upload * Add the tool and new routes * fix auth issue * sign headers * add comment * use our own API key to auth signed uploads * Restructure things slightly * tweak * tweak * add comments * tweak * revert a thing * twaek * drop mime type filtering * new incarnation of mime type filtering * jsut allow all octet-streams * simplify further * tweak * update lockfile --------- Co-authored-by: Colin McDonnell <colinmcd94@gmail.com>
107 lines
3.1 KiB
TypeScript
107 lines
3.1 KiB
TypeScript
import * as cli from "./cli.ts";
|
|
import { Timer } from "./timer.ts";
|
|
|
|
describe("Timer", () => {
|
|
beforeEach(() => {
|
|
vi.spyOn(cli.log, "debug");
|
|
// Mock Date.now to have predictable timestamps
|
|
vi.useFakeTimers();
|
|
});
|
|
|
|
afterEach(() => {
|
|
vi.restoreAllMocks();
|
|
vi.useRealTimers();
|
|
});
|
|
|
|
describe("constructor", () => {
|
|
it("should initialize with current timestamp", () => {
|
|
const mockTime = 1000000;
|
|
vi.setSystemTime(mockTime);
|
|
|
|
const timer = new Timer();
|
|
timer.checkpoint("test");
|
|
|
|
expect(cli.log.debug).toHaveBeenCalledWith(expect.stringContaining("test"));
|
|
});
|
|
});
|
|
|
|
describe("checkpoint", () => {
|
|
it("should log duration from initial timestamp on first checkpoint", () => {
|
|
const startTime = 1000000;
|
|
vi.setSystemTime(startTime);
|
|
const timer = new Timer();
|
|
|
|
const checkpointTime = startTime + 100;
|
|
vi.setSystemTime(checkpointTime);
|
|
timer.checkpoint("first");
|
|
|
|
expect(cli.log.debug).toHaveBeenCalledWith("» first: 100ms");
|
|
});
|
|
|
|
it("should log duration from last checkpoint on subsequent checkpoints", () => {
|
|
const startTime = 1000000;
|
|
vi.setSystemTime(startTime);
|
|
const timer = new Timer();
|
|
|
|
// First checkpoint
|
|
const firstCheckpointTime = startTime + 50;
|
|
vi.setSystemTime(firstCheckpointTime);
|
|
timer.checkpoint("first");
|
|
|
|
// Second checkpoint
|
|
const secondCheckpointTime = firstCheckpointTime + 75;
|
|
vi.setSystemTime(secondCheckpointTime);
|
|
timer.checkpoint("second");
|
|
|
|
expect(cli.log.debug).toHaveBeenCalledTimes(2);
|
|
expect(cli.log.debug).toHaveBeenNthCalledWith(1, "» first: 50ms");
|
|
expect(cli.log.debug).toHaveBeenNthCalledWith(2, "» second: 75ms");
|
|
});
|
|
|
|
it("should handle multiple checkpoints correctly", () => {
|
|
const startTime = 1000000;
|
|
vi.setSystemTime(startTime);
|
|
const timer = new Timer();
|
|
|
|
// First checkpoint
|
|
vi.setSystemTime(startTime + 10);
|
|
timer.checkpoint("step1");
|
|
|
|
// Second checkpoint
|
|
vi.setSystemTime(startTime + 25);
|
|
timer.checkpoint("step2");
|
|
|
|
// Third checkpoint
|
|
vi.setSystemTime(startTime + 45);
|
|
timer.checkpoint("step3");
|
|
|
|
expect(cli.log.debug).toHaveBeenCalledTimes(3);
|
|
expect(cli.log.debug).toHaveBeenNthCalledWith(1, "» step1: 10ms");
|
|
expect(cli.log.debug).toHaveBeenNthCalledWith(2, "» step2: 15ms");
|
|
expect(cli.log.debug).toHaveBeenNthCalledWith(3, "» step3: 20ms");
|
|
});
|
|
|
|
it("should handle zero duration correctly", () => {
|
|
const startTime = 1000000;
|
|
vi.setSystemTime(startTime);
|
|
const timer = new Timer();
|
|
|
|
// Checkpoint immediately
|
|
timer.checkpoint("immediate");
|
|
|
|
expect(cli.log.debug).toHaveBeenCalledWith("» immediate: 0ms");
|
|
});
|
|
|
|
it("should handle custom checkpoint names", () => {
|
|
const startTime = 1000000;
|
|
vi.setSystemTime(startTime);
|
|
const timer = new Timer();
|
|
|
|
vi.setSystemTime(startTime + 200);
|
|
timer.checkpoint("Custom Checkpoint Name");
|
|
|
|
expect(cli.log.debug).toHaveBeenCalledWith("» Custom Checkpoint Name: 200ms");
|
|
});
|
|
});
|
|
});
|