cache.test.ts 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import { afterEach } from "node:test";
  2. import { beforeEach, describe, expect, it, vi } from "vitest";
  3. import { cache } from "#/utils/cache";
  4. describe("Cache", () => {
  5. const testKey = "key";
  6. const testData = { message: "Hello, world!" };
  7. const testTTL = 1000; // 1 second
  8. beforeEach(() => {
  9. vi.useFakeTimers();
  10. });
  11. afterEach(() => {
  12. vi.useRealTimers();
  13. });
  14. it("gets data from memory if not expired", () => {
  15. cache.set(testKey, testData, testTTL);
  16. expect(cache.get(testKey)).toEqual(testData);
  17. });
  18. it("should expire after 5 minutes by default", () => {
  19. cache.set(testKey, testData);
  20. expect(cache.get(testKey)).not.toBeNull();
  21. vi.advanceTimersByTime(5 * 60 * 1000 + 1);
  22. expect(cache.get(testKey)).toBeNull();
  23. });
  24. it("returns null if cached data is expired", () => {
  25. cache.set(testKey, testData, testTTL);
  26. vi.advanceTimersByTime(testTTL + 1);
  27. expect(cache.get(testKey)).toBeNull();
  28. });
  29. it("deletes data from memory", () => {
  30. cache.set(testKey, testData, testTTL);
  31. cache.delete(testKey);
  32. expect(cache.get(testKey)).toBeNull();
  33. });
  34. it("clears all data with the app prefix from memory", () => {
  35. cache.set(testKey, testData, testTTL);
  36. cache.set("anotherKey", { data: "More data" }, testTTL);
  37. cache.clearAll();
  38. expect(cache.get(testKey)).toBeNull();
  39. expect(cache.get("anotherKey")).toBeNull();
  40. });
  41. });