85 lines · 2.4 KB · TypeScript
RawDownload
import { describe, expect, it, vi } from "vitest"; import { syncShellEnvironment } from "./syncShellEnvironment"; describe("syncShellEnvironment", () => {  it("hydrates PATH and missing SSH_AUTH_SOCK from the login shell on macOS", () => {    const env: NodeJS.ProcessEnv = {      SHELL: "/bin/zsh",      PATH: "/usr/bin",    };    const readEnvironment = vi.fn(() => ({      PATH: "/opt/homebrew/bin:/usr/bin",      SSH_AUTH_SOCK: "/tmp/secretive.sock",    }));     syncShellEnvironment(env, {      platform: "darwin",      readEnvironment,    });     expect(readEnvironment).toHaveBeenCalledWith("/bin/zsh", ["PATH", "SSH_AUTH_SOCK"]);    expect(env.PATH).toBe("/opt/homebrew/bin:/usr/bin");    expect(env.SSH_AUTH_SOCK).toBe("/tmp/secretive.sock");  });   it("preserves an inherited SSH_AUTH_SOCK value", () => {    const env: NodeJS.ProcessEnv = {      SHELL: "/bin/zsh",      PATH: "/usr/bin",      SSH_AUTH_SOCK: "/tmp/inherited.sock",    };    const readEnvironment = vi.fn(() => ({      PATH: "/opt/homebrew/bin:/usr/bin",      SSH_AUTH_SOCK: "/tmp/login-shell.sock",    }));     syncShellEnvironment(env, {      platform: "darwin",      readEnvironment,    });     expect(env.PATH).toBe("/opt/homebrew/bin:/usr/bin");    expect(env.SSH_AUTH_SOCK).toBe("/tmp/inherited.sock");  });   it("preserves inherited values when the login shell omits them", () => {    const env: NodeJS.ProcessEnv = {      SHELL: "/bin/zsh",      PATH: "/usr/bin",      SSH_AUTH_SOCK: "/tmp/inherited.sock",    };    const readEnvironment = vi.fn(() => ({      PATH: "/opt/homebrew/bin:/usr/bin",    }));     syncShellEnvironment(env, {      platform: "darwin",      readEnvironment,    });     expect(env.PATH).toBe("/opt/homebrew/bin:/usr/bin");    expect(env.SSH_AUTH_SOCK).toBe("/tmp/inherited.sock");  });   it("does nothing outside macOS", () => {    const env: NodeJS.ProcessEnv = {      SHELL: "/bin/zsh",      PATH: "/usr/bin",      SSH_AUTH_SOCK: "/tmp/inherited.sock",    };    const readEnvironment = vi.fn(() => ({      PATH: "/opt/homebrew/bin:/usr/bin",      SSH_AUTH_SOCK: "/tmp/secretive.sock",    }));     syncShellEnvironment(env, {      platform: "linux",      readEnvironment,    });     expect(readEnvironment).not.toHaveBeenCalled();    expect(env.PATH).toBe("/usr/bin");    expect(env.SSH_AUTH_SOCK).toBe("/tmp/inherited.sock");  });});