@@ -51,14 +51,76 @@ def test_topic_index_resource():
5151
5252def test_refresh_context_no_token (monkeypatch ):
5353 """refresh_context returns error message when GITHUB_TOKEN not set."""
54- from agent_context_builder .mcp_server import refresh_context
54+ import agent_context_builder .mcp_server as mcp_server
5555
5656 monkeypatch .delenv ("GITHUB_TOKEN" , raising = False )
57- result = refresh_context ()
57+ monkeypatch .delenv ("ACB_ENV_FILE" , raising = False )
58+ monkeypatch .setattr (mcp_server , "_ENV_LOADED" , True )
59+ result = mcp_server .refresh_context ()
5860
5961 assert "GITHUB_TOKEN" in result
6062
6163
64+ def test_refresh_context_loads_token_from_env_file (monkeypatch , tmp_path ):
65+ """refresh_context can use a local .env when the host does not export env vars."""
66+ import agent_context_builder .mcp_server as mcp_server
67+
68+ env_file = tmp_path / ".env"
69+ env_file .write_text ("GITHUB_TOKEN=file-token\n " , encoding = "utf-8" )
70+
71+ monkeypatch .delenv ("GITHUB_TOKEN" , raising = False )
72+ monkeypatch .setenv ("ACB_ENV_FILE" , str (env_file ))
73+ monkeypatch .setattr (mcp_server , "_ENV_LOADED" , False )
74+
75+ with patch ("agent_context_builder.mcp_server.requests.post" ) as mock_post :
76+ mock_post .return_value = _mock_response ("" , status = 204 )
77+ result = mcp_server .refresh_context ()
78+
79+ assert "triggerato" in result .lower ()
80+ assert mock_post .call_args .kwargs ["headers" ]["Authorization" ] == "token file-token"
81+
82+
83+ def test_refresh_context_loads_token_when_env_is_empty (monkeypatch , tmp_path ):
84+ """A blank inherited value should not block the local .env fallback."""
85+ import agent_context_builder .mcp_server as mcp_server
86+
87+ env_file = tmp_path / ".env"
88+ env_file .write_text ("GITHUB_TOKEN=file-token\n " , encoding = "utf-8" )
89+
90+ monkeypatch .setenv ("GITHUB_TOKEN" , "" )
91+ monkeypatch .setenv ("ACB_ENV_FILE" , str (env_file ))
92+ monkeypatch .setattr (mcp_server , "_ENV_LOADED" , False )
93+
94+ with patch ("agent_context_builder.mcp_server.requests.post" ) as mock_post :
95+ mock_post .return_value = _mock_response ("" , status = 204 )
96+ result = mcp_server .refresh_context ()
97+
98+ assert "triggerato" in result .lower ()
99+ assert mock_post .call_args .kwargs ["headers" ]["Authorization" ] == "token file-token"
100+
101+
102+ def test_refresh_context_continues_after_partial_env (monkeypatch , tmp_path ):
103+ """A partial explicit .env should not prevent later candidates from filling tokens."""
104+ import agent_context_builder .mcp_server as mcp_server
105+
106+ explicit_env = tmp_path / "partial.env"
107+ explicit_env .write_text ("ACB_BRANCH=context\n " , encoding = "utf-8" )
108+ workspace_env = tmp_path / ".env"
109+ workspace_env .write_text ("GITHUB_TOKEN=file-token\n " , encoding = "utf-8" )
110+
111+ monkeypatch .chdir (tmp_path )
112+ monkeypatch .delenv ("GITHUB_TOKEN" , raising = False )
113+ monkeypatch .setenv ("ACB_ENV_FILE" , str (explicit_env ))
114+ monkeypatch .setattr (mcp_server , "_ENV_LOADED" , False )
115+
116+ with patch ("agent_context_builder.mcp_server.requests.post" ) as mock_post :
117+ mock_post .return_value = _mock_response ("" , status = 204 )
118+ result = mcp_server .refresh_context ()
119+
120+ assert "triggerato" in result .lower ()
121+ assert mock_post .call_args .kwargs ["headers" ]["Authorization" ] == "token file-token"
122+
123+
62124def test_refresh_context_success (monkeypatch ):
63125 """refresh_context triggers workflow dispatch and reports success."""
64126 from agent_context_builder .mcp_server import refresh_context
0 commit comments