Newer
Older
express-blog / test / utils / logging / config.unit.test.js
// test/units/utils/logging/config.test.js
const { expect } = require("chai");
const fs = require("fs");
const path = require("path");
const proxyquire = require("proxyquire").noPreserveCache();

const {
  sessionTimestamp,
  sessionDir,
  logFiles,
} = require("../../../src/config/logging");
const config = require("../../../src/config");

describe("config.js", () => {
  it("config.meta.rootDir contains package.json", () => {
    const pkgJsonPath = path.join(config.meta.rootDir, "package.json");
    const exists = fs.existsSync(pkgJsonPath);
    expect(exists).to.equal(
      true,
      `package.json not found in ${config.meta.rootDir}`,
    );
  });

  it("config.meta.rootDir matches resolved 3-levels-up path", () => {
    const expected = path.resolve(__dirname, "../../../");
    expect(config.meta.rootDir).to.equal(expected);
  });

  it("config.logging.logDir is within config.meta.rootDir and ends with 'logs'", () => {
    const root = config.meta.rootDir;
    const log = config.logging.logDir;

    // Use a custom error message to display values on failure
    expect(
      log.startsWith(root),
      `Path Mismatch:\n  config.meta.rootDir: "${root}"\n  config.logging.logDir: "${log}"`,
    ).to.be.true;

    expect(path.basename(log)).to.equal("logs");
  });

  it("sessionTimestamp matches expected ISO pattern with no colons or dots", () => {
    expect(sessionTimestamp).to.match(
      /^\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2}-\d{3}Z$/,
    );
  });

  it("sessionDir is built from config.logging.logDir and sessionTimestamp", () => {
    const expected = path.join(
      config.logging.logDir,
      "sessions",
      sessionTimestamp,
    );
    expect(sessionDir).to.equal(expected);
  });

  it("logFiles.session points to session.log in sessionDir", () => {
    expect(logFiles.session).to.equal(path.join(sessionDir, "session.log"));
  });

  ["info", "notice", "error", "warn", "debug"].forEach((level) => {
    it(`logFiles.${level} points to ${level}.log in correct subdir`, () => {
      expect(logFiles[level]).to.equal(
        path.join(config.logging.logDir, level, `${level}.log`),
      );
    });
  });

  it("config.logging.levels defines correct level-to-priority mapping", () => {
    expect(config.logging.levels).to.deep.equal({
      error: 0,
      warn: 1,
      event: 2,
      security: 3,
      notice: 4,
      info: 5,
      debug: 6,
      analytics: 7,
    });
  });
});