refactor: initial moves
This commit is contained in:
56
bot/lib/shutdown.test.ts
Normal file
56
bot/lib/shutdown.test.ts
Normal file
@@ -0,0 +1,56 @@
|
||||
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
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user