import { afterEach, expect, test } from "bun:test"; import { redisDriver } from "../src/redis.ts"; const bun = globalThis.Bun as typeof Bun & { connect: (options: unknown) => Promise }; const originalConnect = bun.connect; afterEach(() => { bun.connect = originalConnect; }); test("rediss URLs enable TLS and decode credentials", () => { const options: Array> = []; bun.connect = ((value: Record) => { options.push(value); return new Promise(() => {}); }) as typeof bun.connect; const driver = redisDriver("rediss://user:p%40ss@redis.example.com:6380/2"); expect(options).toHaveLength(2); expect(options[0]).toMatchObject({ hostname: "redis.example.com", port: 6380, tls: true }); driver.close(); }); test("rejects invalid Redis URLs before connecting", () => { expect(() => redisDriver("http://localhost:6379")).toThrow("redis:// or rediss://"); expect(() => redisDriver("redis://localhost/not-a-db")).toThrow("database"); }); test("bounds writes queued while Redis is unavailable", () => { bun.connect = (() => new Promise(() => {})) as typeof bun.connect; const driver = redisDriver("redis://localhost:6379"); for (let index = 0; index < 1000; index++) driver.publish("topic", index); expect(() => driver.publish("topic", "overflow")).toThrow("queue is full"); driver.close(); });