22
33import { describe , test , expect , beforeEach , afterEach } from "bun:test" ;
44import { setupClaudeCodeSettings } from "../src/setup-claude-code-settings" ;
5- import { homedir } from "os" ;
5+ import { tmpdir } from "os" ;
66import { mkdir , writeFile , readFile , rm } from "fs/promises" ;
77import { join } from "path" ;
88
9- const home = homedir ( ) ;
10- const settingsPath = join ( home , ".claude" , "settings.json" ) ;
11- const testSettingsDir = join ( home , ".claude-test" ) ;
9+ const testHomeDir = join (
10+ tmpdir ( ) ,
11+ "claude-code-test-home" ,
12+ Date . now ( ) . toString ( ) ,
13+ ) ;
14+ const settingsPath = join ( testHomeDir , ".claude" , "settings.json" ) ;
15+ const testSettingsDir = join ( testHomeDir , ".claude-test" ) ;
1216const testSettingsPath = join ( testSettingsDir , "test-settings.json" ) ;
1317
1418describe ( "setupClaudeCodeSettings" , ( ) => {
1519 beforeEach ( async ( ) => {
16- // Create test directory
20+ // Create test home directory and test settings directory
21+ await mkdir ( testHomeDir , { recursive : true } ) ;
1722 await mkdir ( testSettingsDir , { recursive : true } ) ;
1823 } ) ;
1924
2025 afterEach ( async ( ) => {
21- // Clean up test directory
22- await rm ( testSettingsDir , { recursive : true , force : true } ) ;
26+ // Clean up test home directory
27+ await rm ( testHomeDir , { recursive : true , force : true } ) ;
2328 } ) ;
2429
2530 test ( "should always set enableAllProjectMcpServers to true when no input" , async ( ) => {
26- await setupClaudeCodeSettings ( ) ;
31+ await setupClaudeCodeSettings ( undefined , testHomeDir ) ;
2732
2833 const settingsContent = await readFile ( settingsPath , "utf-8" ) ;
2934 const settings = JSON . parse ( settingsContent ) ;
@@ -37,7 +42,7 @@ describe("setupClaudeCodeSettings", () => {
3742 env : { API_KEY : "test-key" } ,
3843 } ) ;
3944
40- await setupClaudeCodeSettings ( inputSettings ) ;
45+ await setupClaudeCodeSettings ( inputSettings , testHomeDir ) ;
4146
4247 const settingsContent = await readFile ( settingsPath , "utf-8" ) ;
4348 const settings = JSON . parse ( settingsContent ) ;
@@ -64,7 +69,7 @@ describe("setupClaudeCodeSettings", () => {
6469
6570 await writeFile ( testSettingsPath , JSON . stringify ( testSettings , null , 2 ) ) ;
6671
67- await setupClaudeCodeSettings ( testSettingsPath ) ;
72+ await setupClaudeCodeSettings ( testSettingsPath , testHomeDir ) ;
6873
6974 const settingsContent = await readFile ( settingsPath , "utf-8" ) ;
7075 const settings = JSON . parse ( settingsContent ) ;
@@ -80,7 +85,7 @@ describe("setupClaudeCodeSettings", () => {
8085 model : "test-model" ,
8186 } ) ;
8287
83- await setupClaudeCodeSettings ( inputSettings ) ;
88+ await setupClaudeCodeSettings ( inputSettings , testHomeDir ) ;
8489
8590 const settingsContent = await readFile ( settingsPath , "utf-8" ) ;
8691 const settings = JSON . parse ( settingsContent ) ;
@@ -90,15 +95,19 @@ describe("setupClaudeCodeSettings", () => {
9095 } ) ;
9196
9297 test ( "should throw error for invalid JSON string" , async ( ) => {
93- expect ( ( ) => setupClaudeCodeSettings ( "{ invalid json" ) ) . toThrow ( ) ;
98+ expect ( ( ) =>
99+ setupClaudeCodeSettings ( "{ invalid json" , testHomeDir ) ,
100+ ) . toThrow ( ) ;
94101 } ) ;
95102
96103 test ( "should throw error for non-existent file path" , async ( ) => {
97- expect ( ( ) => setupClaudeCodeSettings ( "/non/existent/file.json" ) ) . toThrow ( ) ;
104+ expect ( ( ) =>
105+ setupClaudeCodeSettings ( "/non/existent/file.json" , testHomeDir ) ,
106+ ) . toThrow ( ) ;
98107 } ) ;
99108
100109 test ( "should handle empty string input" , async ( ) => {
101- await setupClaudeCodeSettings ( "" ) ;
110+ await setupClaudeCodeSettings ( "" , testHomeDir ) ;
102111
103112 const settingsContent = await readFile ( settingsPath , "utf-8" ) ;
104113 const settings = JSON . parse ( settingsContent ) ;
@@ -107,7 +116,7 @@ describe("setupClaudeCodeSettings", () => {
107116 } ) ;
108117
109118 test ( "should handle whitespace-only input" , async ( ) => {
110- await setupClaudeCodeSettings ( " \n\t " ) ;
119+ await setupClaudeCodeSettings ( " \n\t " , testHomeDir ) ;
111120
112121 const settingsContent = await readFile ( settingsPath , "utf-8" ) ;
113122 const settings = JSON . parse ( settingsContent ) ;
@@ -119,6 +128,7 @@ describe("setupClaudeCodeSettings", () => {
119128 // First, create some existing settings
120129 await setupClaudeCodeSettings (
121130 JSON . stringify ( { existingKey : "existingValue" } ) ,
131+ testHomeDir ,
122132 ) ;
123133
124134 // Then, add new settings
@@ -127,7 +137,7 @@ describe("setupClaudeCodeSettings", () => {
127137 model : "claude-opus-4-20250514" ,
128138 } ) ;
129139
130- await setupClaudeCodeSettings ( newSettings ) ;
140+ await setupClaudeCodeSettings ( newSettings , testHomeDir ) ;
131141
132142 const settingsContent = await readFile ( settingsPath , "utf-8" ) ;
133143 const settings = JSON . parse ( settingsContent ) ;
0 commit comments