@@ -20,26 +20,27 @@ def test_open_url_non_root_as_regular_user(self, mock_webbrowser, mock_geteuid):
2020 mock_webbrowser .assert_called_once_with (self .url )
2121
2222 @patch ("os.geteuid" )
23- @patch ("os.environ.get" )
2423 @patch ("subprocess.Popen" )
2524 @patch ("pwd.getpwuid" )
26- def test_open_url_as_root_via_pkexec (self , mock_getpwuid , mock_popen , mock_env_get , mock_geteuid ):
25+ def test_open_url_as_root_via_pkexec (self , mock_getpwuid , mock_popen , mock_geteuid ):
2726 # Simulate root (UID 0)
2827 mock_geteuid .return_value = 0
2928
3029 # Mock environment variables
31- def side_effect ( key , default = None ):
32- env = { "PKEXEC_UID" : "1000" , "DISPLAY" : ":0" , "XDG_RUNTIME_DIR" : "/run/user/1000" }
33- return env . get ( key , default )
34-
35- mock_env_get . side_effect = side_effect
30+ env_overrides = {
31+ "PKEXEC_UID" : "1000" ,
32+ "DISPLAY" : ":0" ,
33+ "XDG_RUNTIME_DIR" : "/run/user/1000" ,
34+ }
3635
3736 # Mock pwd info
3837 mock_user = MagicMock ()
3938 mock_user .pw_name = "raphael"
39+ mock_user .pw_dir = "/home/raphael"
4040 mock_getpwuid .return_value = mock_user
4141
42- open_url_non_root (self .url )
42+ with patch .dict (os .environ , env_overrides , clear = False ):
43+ open_url_non_root (self .url )
4344
4445 # Verify subprocess.Popen was called with runuser
4546 args , kwargs = mock_popen .call_args
@@ -53,30 +54,45 @@ def side_effect(key, default=None):
5354 env = kwargs .get ("env" , {})
5455 self .assertEqual (env .get ("DISPLAY" ), ":0" )
5556 self .assertEqual (env .get ("XDG_RUNTIME_DIR" ), "/run/user/1000" )
57+ self .assertEqual (env .get ("HOME" ), "/home/raphael" )
5658
5759 @patch ("os.geteuid" )
58- @patch ("os.environ.get" )
5960 @patch ("subprocess.Popen" )
60- def test_open_url_as_root_via_sudo (self , mock_popen , mock_env_get , mock_geteuid ):
61+ @patch ("pwd.getpwnam" )
62+ def test_open_url_as_root_via_sudo (self , mock_getpwnam , mock_popen , mock_geteuid ):
6163 # Simulate root (UID 0)
6264 mock_geteuid .return_value = 0
6365
6466 # Mock environment variables (no PKEXEC_UID, but SUDO_USER)
65- def side_effect (key , default = None ):
66- env = {"SUDO_USER" : "raphael" , "DISPLAY" : ":0" }
67- return env .get (key , default )
68-
69- mock_env_get .side_effect = side_effect
70-
71- open_url_non_root (self .url )
67+ env_overrides = {
68+ "SUDO_USER" : "raphael" ,
69+ "DISPLAY" : ":0" ,
70+ }
71+ # Ensure PKEXEC_UID is not in env if it was there
72+ with patch .dict (os .environ , env_overrides , clear = False ):
73+ if "PKEXEC_UID" in os .environ :
74+ del os .environ ["PKEXEC_UID" ]
75+
76+ # Mock pwd info
77+ mock_user = MagicMock ()
78+ mock_user .pw_uid = 1000
79+ mock_user .pw_dir = "/home/raphael"
80+ mock_getpwnam .return_value = mock_user
81+
82+ open_url_non_root (self .url )
7283
7384 # Verify subprocess.Popen was called with runuser
74- args , _ = mock_popen .call_args
85+ args , kwargs = mock_popen .call_args
7586 cmd = args [0 ]
7687 self .assertEqual (cmd [0 ], "runuser" )
7788 self .assertEqual (cmd [2 ], "raphael" )
7889 self .assertIn (self .url , cmd )
7990
91+ # Verify env passing (XDG_RUNTIME_DIR should be derived from UID 1000)
92+ env = kwargs .get ("env" , {})
93+ self .assertEqual (env .get ("XDG_RUNTIME_DIR" ), "/run/user/1000" )
94+ self .assertEqual (env .get ("HOME" ), "/home/raphael" )
95+
8096
8197if __name__ == "__main__" :
8298 unittest .main ()
0 commit comments