IKHSAN
EN Read in EnglishID

homeio

Publik

Fork dari doctor-io/homeio

Branch
main
Commit terakhir
958d74616 Oktober 2026

postgres.test.ts

Buka raw
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";

describe("postgres pool", () => {
  beforeEach(() => {
    vi.resetModules();
    delete (globalThis as { __homeioPgPool?: unknown }).__homeioPgPool;
    delete (globalThis as { __homeioPgPoolErrorListenerAttached?: unknown }).__homeioPgPoolErrorListenerAttached;
    delete (globalThis as { __homeioPgPoolInitLogged?: unknown }).__homeioPgPoolInitLogged;
  });

  afterEach(() => {
    delete (globalThis as { __homeioPgPool?: unknown }).__homeioPgPool;
    delete (globalThis as { __homeioPgPoolErrorListenerAttached?: unknown }).__homeioPgPoolErrorListenerAttached;
    delete (globalThis as { __homeioPgPoolInitLogged?: unknown }).__homeioPgPoolInitLogged;
  });

  it("creates a pool using server env", async () => {
    const poolInstance = { query: vi.fn(), on: vi.fn() };
    const Pool = vi.fn(
      class MockPool {
        constructor() {
          return poolInstance as unknown as MockPool;
        }
      },
    );

    vi.doMock("pg", () => ({ Pool }));
    vi.doMock("@/lib/server/env", () => ({
      serverEnv: {
        NODE_ENV: "production",
        DATABASE_URL: "postgresql://test:test@127.0.0.1:5432/home_server",
        PG_MAX_CONNECTIONS: 3,
        LOG_LEVEL: "info",
        LOG_FILE_PATH: "logs/home-server.log",
        LOG_TO_FILE: true,
      },
    }));

    const { pgPool } = await import("@/lib/server/db/postgres");

    expect(pgPool).toBe(poolInstance);
    expect(Pool).toHaveBeenCalledWith(
      expect.objectContaining({
        connectionString: "postgresql://test:test@127.0.0.1:5432/home_server",
        max: 3,
      }),
    );
    expect(poolInstance.on).toHaveBeenCalledWith("error", expect.any(Function));
  });

  it("reuses global pool in non-production", async () => {
    const existing = { query: vi.fn(), on: vi.fn() };
    (globalThis as { __homeioPgPool?: unknown }).__homeioPgPool = existing;

    const Pool = vi.fn(class MockPool {});
    vi.doMock("pg", () => ({ Pool }));
    vi.doMock("@/lib/server/env", () => ({
      serverEnv: {
        NODE_ENV: "development",
        DATABASE_URL: "postgresql://test:test@127.0.0.1:5432/home_server",
        PG_MAX_CONNECTIONS: 3,
        LOG_LEVEL: "info",
        LOG_FILE_PATH: "logs/home-server.log",
        LOG_TO_FILE: true,
      },
    }));

    const { pgPool } = await import("@/lib/server/db/postgres");

    expect(pgPool).toBe(existing);
    expect(Pool).not.toHaveBeenCalled();
    expect(existing.on).toHaveBeenCalledWith("error", expect.any(Function));
  });
});
byte
2.564
baris
75
Jenis
ts
Commit terakhir
16 Oktober 2026