57 lines
2.2 KiB
TypeScript
57 lines
2.2 KiB
TypeScript
import os from 'node:os';
|
|
import path from 'node:path';
|
|
import { afterEach, describe, expect, it, vi } from 'vitest';
|
|
import { legacyMcporterDir, mcporterConfigCandidates, mcporterDir } from '../src/paths.js';
|
|
|
|
describe('mcporter path helpers', () => {
|
|
const originalEnv = { ...process.env };
|
|
let homedirSpy: { mockRestore(): void } | undefined;
|
|
|
|
afterEach(() => {
|
|
process.env = { ...originalEnv };
|
|
homedirSpy?.mockRestore();
|
|
homedirSpy = undefined;
|
|
});
|
|
|
|
it('falls back to legacy ~/.mcporter when XDG env is unset', () => {
|
|
homedirSpy = vi.spyOn(os, 'homedir').mockReturnValue('/home/tester');
|
|
delete process.env.XDG_CONFIG_HOME;
|
|
delete process.env.XDG_DATA_HOME;
|
|
delete process.env.XDG_STATE_HOME;
|
|
delete process.env.XDG_CACHE_HOME;
|
|
|
|
const legacy = path.join('/home/tester', '.mcporter');
|
|
expect(legacyMcporterDir()).toBe(legacy);
|
|
expect(mcporterDir('config')).toBe(legacy);
|
|
expect(mcporterDir('data')).toBe(legacy);
|
|
expect(mcporterDir('state')).toBe(legacy);
|
|
expect(mcporterDir('cache')).toBe(legacy);
|
|
});
|
|
|
|
it('honors absolute XDG homes by kind', () => {
|
|
homedirSpy = vi.spyOn(os, 'homedir').mockReturnValue('/home/tester');
|
|
process.env.XDG_CONFIG_HOME = '/xdg/config';
|
|
process.env.XDG_DATA_HOME = '/xdg/data';
|
|
process.env.XDG_STATE_HOME = '/xdg/state';
|
|
process.env.XDG_CACHE_HOME = '/xdg/cache';
|
|
|
|
expect(mcporterDir('config')).toBe(path.join('/xdg/config', 'mcporter'));
|
|
expect(mcporterDir('data')).toBe(path.join('/xdg/data', 'mcporter'));
|
|
expect(mcporterDir('state')).toBe(path.join('/xdg/state', 'mcporter'));
|
|
expect(mcporterDir('cache')).toBe(path.join('/xdg/cache', 'mcporter'));
|
|
expect(mcporterConfigCandidates()).toEqual([
|
|
path.join('/xdg/config', 'mcporter', 'mcporter.json'),
|
|
path.join('/xdg/config', 'mcporter', 'mcporter.jsonc'),
|
|
path.join('/home/tester', '.mcporter', 'mcporter.json'),
|
|
path.join('/home/tester', '.mcporter', 'mcporter.jsonc'),
|
|
]);
|
|
});
|
|
|
|
it('ignores relative XDG homes and keeps the legacy fallback', () => {
|
|
homedirSpy = vi.spyOn(os, 'homedir').mockReturnValue('/home/tester');
|
|
process.env.XDG_CONFIG_HOME = 'relative/config';
|
|
|
|
expect(mcporterDir('config')).toBe(path.join('/home/tester', '.mcporter'));
|
|
});
|
|
});
|