forked from syntaxbullet/AuroraBot-discord
57 lines
1.8 KiB
TypeScript
57 lines
1.8 KiB
TypeScript
import { describe, it, expect, beforeEach } from "bun:test";
|
|
import { isShuttingDown, setShuttingDown, incrementTransactions, decrementTransactions, getActiveTransactions, waitForTransactions } from "./shutdown";
|
|
|
|
describe("shutdown logic", () => {
|
|
beforeEach(() => {
|
|
setShuttingDown(false);
|
|
while (getActiveTransactions() > 0) {
|
|
decrementTransactions();
|
|
}
|
|
});
|
|
|
|
it("should initialize with shuttingDown as false", () => {
|
|
expect(isShuttingDown()).toBe(false);
|
|
});
|
|
|
|
it("should update shuttingDown state", () => {
|
|
setShuttingDown(true);
|
|
expect(isShuttingDown()).toBe(true);
|
|
});
|
|
|
|
it("should track active transactions", () => {
|
|
expect(getActiveTransactions()).toBe(0);
|
|
incrementTransactions();
|
|
expect(getActiveTransactions()).toBe(1);
|
|
decrementTransactions();
|
|
expect(getActiveTransactions()).toBe(0);
|
|
});
|
|
|
|
it("should wait for transactions to complete", async () => {
|
|
incrementTransactions();
|
|
|
|
const start = Date.now();
|
|
const waitPromise = waitForTransactions(1000);
|
|
|
|
// Simulate completion after 200ms
|
|
setTimeout(() => {
|
|
decrementTransactions();
|
|
}, 200);
|
|
|
|
await waitPromise;
|
|
const duration = Date.now() - start;
|
|
|
|
expect(duration).toBeGreaterThanOrEqual(200);
|
|
expect(getActiveTransactions()).toBe(0);
|
|
});
|
|
|
|
it("should timeout if transactions never complete", async () => {
|
|
incrementTransactions();
|
|
const start = Date.now();
|
|
await waitForTransactions(500);
|
|
const duration = Date.now() - start;
|
|
|
|
expect(duration).toBeGreaterThanOrEqual(500);
|
|
expect(getActiveTransactions()).toBe(1); // Still 1 because we didn't decrement
|
|
});
|
|
});
|