f9447f8e5f
CI / typecheck · build · test · bundle-size (push) Failing after 1s
CI / clean-room dependency closure smoke (push) Failing after 1s
CI / server-runtime e2e (docker · pg + valkey) (push) Failing after 2s
Deploy Install Scripts / deploy (push) Failing after 2s
Windows / build (push) Has been cancelled
83 lines
2.7 KiB
TypeScript
83 lines
2.7 KiB
TypeScript
import { describe, it, expect, beforeEach, afterEach } from 'bun:test';
|
|
import { mkdirSync, writeFileSync, rmSync } from 'fs';
|
|
import { join } from 'path';
|
|
import { tmpdir } from 'os';
|
|
import { isPluginDisabledInClaudeSettings } from '../../src/shared/plugin-state.js';
|
|
|
|
let tempDir: string;
|
|
let originalClaudeConfigDir: string | undefined;
|
|
|
|
beforeEach(() => {
|
|
tempDir = join(tmpdir(), `plugin-disabled-test-${Date.now()}-${Math.random().toString(36).slice(2)}`);
|
|
mkdirSync(tempDir, { recursive: true });
|
|
originalClaudeConfigDir = process.env.CLAUDE_CONFIG_DIR;
|
|
process.env.CLAUDE_CONFIG_DIR = tempDir;
|
|
});
|
|
|
|
afterEach(() => {
|
|
if (originalClaudeConfigDir !== undefined) {
|
|
process.env.CLAUDE_CONFIG_DIR = originalClaudeConfigDir;
|
|
} else {
|
|
delete process.env.CLAUDE_CONFIG_DIR;
|
|
}
|
|
try {
|
|
rmSync(tempDir, { recursive: true, force: true });
|
|
} catch {
|
|
// Ignore cleanup errors
|
|
}
|
|
});
|
|
|
|
describe('isPluginDisabledInClaudeSettings (#781)', () => {
|
|
it('should return false when settings.json does not exist', () => {
|
|
expect(isPluginDisabledInClaudeSettings()).toBe(false);
|
|
});
|
|
|
|
it('should return false when plugin is explicitly enabled', () => {
|
|
const settings = {
|
|
enabledPlugins: {
|
|
'claude-mem@thedotmack': true
|
|
}
|
|
};
|
|
writeFileSync(join(tempDir, 'settings.json'), JSON.stringify(settings));
|
|
expect(isPluginDisabledInClaudeSettings()).toBe(false);
|
|
});
|
|
|
|
it('should return true when plugin is explicitly disabled', () => {
|
|
const settings = {
|
|
enabledPlugins: {
|
|
'claude-mem@thedotmack': false
|
|
}
|
|
};
|
|
writeFileSync(join(tempDir, 'settings.json'), JSON.stringify(settings));
|
|
expect(isPluginDisabledInClaudeSettings()).toBe(true);
|
|
});
|
|
|
|
it('should return false when enabledPlugins key is missing', () => {
|
|
const settings = {
|
|
permissions: { allow: [] }
|
|
};
|
|
writeFileSync(join(tempDir, 'settings.json'), JSON.stringify(settings));
|
|
expect(isPluginDisabledInClaudeSettings()).toBe(false);
|
|
});
|
|
|
|
it('should return false when plugin key is absent from enabledPlugins', () => {
|
|
const settings = {
|
|
enabledPlugins: {
|
|
'other-plugin@marketplace': true
|
|
}
|
|
};
|
|
writeFileSync(join(tempDir, 'settings.json'), JSON.stringify(settings));
|
|
expect(isPluginDisabledInClaudeSettings()).toBe(false);
|
|
});
|
|
|
|
it('should return false when settings.json contains invalid JSON', () => {
|
|
writeFileSync(join(tempDir, 'settings.json'), '{ invalid json }}}');
|
|
expect(isPluginDisabledInClaudeSettings()).toBe(false);
|
|
});
|
|
|
|
it('should return false when settings.json is empty', () => {
|
|
writeFileSync(join(tempDir, 'settings.json'), '');
|
|
expect(isPluginDisabledInClaudeSettings()).toBe(false);
|
|
});
|
|
});
|