| import os from "node:os"; |
| import path from "node:path"; |
| import { afterEach, beforeEach, describe, expect, it } from "vitest"; |
| import { applyDataDirOverride } from "../config/data-dir.js"; |
|
|
| const ORIGINAL_ENV = { ...process.env }; |
|
|
| describe("applyDataDirOverride", () => { |
| beforeEach(() => { |
| process.env = { ...ORIGINAL_ENV }; |
| delete process.env.PAPERCLIP_HOME; |
| delete process.env.PAPERCLIP_CONFIG; |
| delete process.env.PAPERCLIP_CONTEXT; |
| delete process.env.PAPERCLIP_INSTANCE_ID; |
| }); |
|
|
| afterEach(() => { |
| process.env = { ...ORIGINAL_ENV }; |
| }); |
|
|
| it("sets PAPERCLIP_HOME and isolated default config/context paths", () => { |
| const home = applyDataDirOverride({ |
| dataDir: "~/paperclip-data", |
| config: undefined, |
| context: undefined, |
| }, { hasConfigOption: true, hasContextOption: true }); |
|
|
| const expectedHome = path.resolve(os.homedir(), "paperclip-data"); |
| expect(home).toBe(expectedHome); |
| expect(process.env.PAPERCLIP_HOME).toBe(expectedHome); |
| expect(process.env.PAPERCLIP_CONFIG).toBe( |
| path.resolve(expectedHome, "instances", "default", "config.json"), |
| ); |
| expect(process.env.PAPERCLIP_CONTEXT).toBe(path.resolve(expectedHome, "context.json")); |
| expect(process.env.PAPERCLIP_INSTANCE_ID).toBe("default"); |
| }); |
|
|
| it("uses the provided instance id when deriving default config path", () => { |
| const home = applyDataDirOverride({ |
| dataDir: "/tmp/paperclip-alt", |
| instance: "dev_1", |
| config: undefined, |
| context: undefined, |
| }, { hasConfigOption: true, hasContextOption: true }); |
|
|
| expect(home).toBe(path.resolve("/tmp/paperclip-alt")); |
| expect(process.env.PAPERCLIP_INSTANCE_ID).toBe("dev_1"); |
| expect(process.env.PAPERCLIP_CONFIG).toBe( |
| path.resolve("/tmp/paperclip-alt", "instances", "dev_1", "config.json"), |
| ); |
| }); |
|
|
| it("does not override explicit config/context settings", () => { |
| process.env.PAPERCLIP_CONFIG = "/env/config.json"; |
| process.env.PAPERCLIP_CONTEXT = "/env/context.json"; |
|
|
| applyDataDirOverride({ |
| dataDir: "/tmp/paperclip-alt", |
| config: "/flag/config.json", |
| context: "/flag/context.json", |
| }, { hasConfigOption: true, hasContextOption: true }); |
|
|
| expect(process.env.PAPERCLIP_CONFIG).toBe("/env/config.json"); |
| expect(process.env.PAPERCLIP_CONTEXT).toBe("/env/context.json"); |
| }); |
|
|
| it("only applies defaults for options supported by the command", () => { |
| applyDataDirOverride( |
| { |
| dataDir: "/tmp/paperclip-alt", |
| }, |
| { hasConfigOption: false, hasContextOption: false }, |
| ); |
|
|
| expect(process.env.PAPERCLIP_HOME).toBe(path.resolve("/tmp/paperclip-alt")); |
| expect(process.env.PAPERCLIP_CONFIG).toBeUndefined(); |
| expect(process.env.PAPERCLIP_CONTEXT).toBeUndefined(); |
| }); |
| }); |
|
|