@@ -506,12 +506,14 @@ def test_install_claude_windows_ssl_error(self, mock_is_admin, mock_run, mock_ur
506506 assert mock_urlopen .call_count == 2
507507 mock_is_admin .assert_called () # Verify is_admin was called
508508
509+ @patch ('setup_environment.is_admin' , return_value = True )
509510 @patch ('platform.system' , return_value = 'Windows' )
510511 @patch ('setup_environment.urlopen' )
511512 @patch ('setup_environment.run_command' )
512- def test_install_claude_windows_failure (self , mock_run , mock_urlopen , mock_system ):
513+ def test_install_claude_windows_failure (self , mock_run , mock_urlopen , mock_system , mock_is_admin ):
513514 """Test Claude installation failure on Windows."""
514515 assert mock_system .return_value == 'Windows'
516+ assert mock_is_admin .return_value is True
515517 mock_urlopen .return_value = MagicMock (read = lambda : b'# Script' )
516518 mock_run .return_value = subprocess .CompletedProcess ([], 1 , '' , 'Error' )
517519
@@ -536,10 +538,12 @@ def test_install_claude_linux_success(self, mock_run, _mock_system):
536538 result = setup_environment .install_claude ()
537539 assert result is True
538540
541+ @patch ('setup_environment.is_admin' , return_value = True )
539542 @patch ('platform.system' , return_value = 'Windows' )
540543 @patch ('setup_environment.urlopen' )
541- def test_install_claude_windows_network_error (self , mock_urlopen , _mock_system ):
544+ def test_install_claude_windows_network_error (self , mock_urlopen , _mock_system , mock_is_admin ):
542545 """Test Claude installation with network error."""
546+ assert mock_is_admin .return_value is True
543547 mock_urlopen .side_effect = urllib .error .URLError ('Network error' )
544548
545549 result = setup_environment .install_claude ()
@@ -905,9 +909,8 @@ def test_create_additional_settings_hooks_linux(self, _mock_system, mock_downloa
905909 )
906910
907911 assert result is True
908- # Skip executable check on Windows as chmod doesn't work the same way
909- if sys .platform != 'win32' :
910- assert hook_file .stat ().st_mode & 0o111 # Check executable
912+ # Note: With uv run, executable permissions are no longer needed
913+ # The script is executed via: uv run --python 3.12 script.py
911914
912915 def test_create_additional_settings_hooks_invalid (self ):
913916 """Test handling invalid hook configuration."""
@@ -1122,6 +1125,7 @@ def test_main_skip_install_claude_not_found(self, mock_find, mock_load):
11221125 @patch ('setup_environment.install_dependencies' , return_value = True )
11231126 @patch ('setup_environment.process_resources' , return_value = True )
11241127 @patch ('setup_environment.handle_resource' , return_value = True )
1128+ @patch ('setup_environment.is_admin' , return_value = True )
11251129 @patch ('setup_environment.configure_all_mcp_servers' , return_value = True )
11261130 @patch ('setup_environment.create_additional_settings' , return_value = True )
11271131 @patch ('setup_environment.create_launcher_script' , return_value = None )
@@ -1132,6 +1136,7 @@ def test_main_no_launcher_created(
11321136 mock_launcher ,
11331137 mock_settings ,
11341138 mock_mcp ,
1139+ mock_is_admin ,
11351140 mock_handle_resource ,
11361141 mock_process_resources ,
11371142 mock_deps ,
@@ -1140,6 +1145,7 @@ def test_main_no_launcher_created(
11401145 mock_load ,
11411146 ):
11421147 """Test main when launcher creation fails."""
1148+ assert mock_is_admin .return_value is True
11431149 del _mock_mkdir # Unused but required for patch
11441150 del mock_launcher # Unused but required for patch
11451151 del mock_settings # Unused but required for patch
@@ -1163,6 +1169,7 @@ def test_main_no_launcher_created(
11631169 setup_environment .main ()
11641170 mock_exit .assert_not_called () # Should continue despite launcher failure
11651171
1172+ @patch ('setup_environment.is_admin' , return_value = True )
11661173 @patch .dict ('os.environ' , {'CLAUDE_ENV_CONFIG' : 'env-config' })
11671174 @patch ('setup_environment.load_config_from_source' )
11681175 @patch ('setup_environment.install_claude' , return_value = True )
@@ -1184,8 +1191,10 @@ def test_main_from_env_variable(
11841191 mock_deps ,
11851192 mock_install ,
11861193 mock_load ,
1194+ mock_is_admin ,
11871195 ):
11881196 """Test main using CLAUDE_ENV_CONFIG environment variable."""
1197+ assert mock_is_admin .return_value is True
11891198 del _mock_mkdir # Unused but required for patch
11901199 del mock_register # Unused but required for patch
11911200 del mock_settings # Unused but required for patch
@@ -1204,6 +1213,7 @@ def test_main_from_env_variable(
12041213 mock_exit .assert_not_called ()
12051214 mock_load .assert_called_with ('env-config' , None )
12061215
1216+ @patch ('setup_environment.is_admin' , return_value = True )
12071217 @patch ('setup_environment.load_config_from_source' )
12081218 @patch ('setup_environment.validate_all_config_files' )
12091219 @patch ('setup_environment.install_claude' , return_value = True )
@@ -1228,8 +1238,10 @@ def test_main_with_all_features(
12281238 mock_install ,
12291239 mock_validate ,
12301240 mock_load ,
1241+ mock_is_admin ,
12311242 ):
12321243 """Test main with all configuration features enabled."""
1244+ assert mock_is_admin .return_value is True
12331245 del _mock_mkdir # Unused but required for patch
12341246 del mock_download_resource # Unused but required for patch
12351247
@@ -1252,7 +1264,9 @@ def test_main_with_all_features(
12521264 'API_KEY' : 'test123' ,
12531265 'DEBUG' : 'true' ,
12541266 },
1255- 'dependencies' : ['npm install test' ],
1267+ 'dependencies' : {
1268+ 'windows' : ['npm install test' ],
1269+ },
12561270 'agents' : ['agents/test.md' ],
12571271 'slash-commands' : ['commands/test.md' ],
12581272 'output-styles' : ['styles/test.md' ],
0 commit comments