@@ -78,6 +78,18 @@ def test_resolve_workspace_context_populates_invalid_workspace_ids():
7878 assert "abc123workspace" not in ctx .invalid_workspace_ids
7979
8080
81+ def test_resolve_workspace_context_cached_passes_nocache ():
82+ with tempfile .TemporaryDirectory () as tmp :
83+ ws_root = _make_workspace_root (tmp )
84+ with patch (
85+ "services.workspace_context.build_composer_id_to_workspace_id_cached" ,
86+ return_value = {},
87+ ) as mock_cached :
88+ resolve_workspace_context_cached (ws_root , [], nocache = True )
89+ mock_cached .assert_called_once ()
90+ assert mock_cached .call_args .kwargs ["nocache" ] is True
91+
92+
8193def test_resolve_workspace_context_cached_uses_cached_composer_map ():
8294 with tempfile .TemporaryDirectory () as tmp :
8395 ws_root = _make_workspace_root (tmp )
@@ -130,6 +142,19 @@ def test_resolve_workspace_context_accepts_pre_collected_entries():
130142 assert ctx .workspace_entries is entries
131143
132144
145+ def test_resolve_workspace_context_minimal_accepts_pre_collected_entries ():
146+ with tempfile .TemporaryDirectory () as tmp :
147+ ws_root = _make_workspace_root (tmp )
148+ entries = [{"name" : "x" , "workspaceJsonPath" : "/fake/workspace.json" }]
149+ with patch (
150+ "services.workspace_context.collect_workspace_entries" ,
151+ return_value = entries ,
152+ ) as mock_collect :
153+ ctx = resolve_workspace_context_minimal (ws_root , workspace_entries = entries )
154+ mock_collect .assert_not_called ()
155+ assert ctx .workspace_entries is entries
156+
157+
133158def test_enrich_populates_bubble_map ():
134159 with tempfile .TemporaryDirectory () as tmp :
135160 ctx = resolve_workspace_context (_make_workspace_root (tmp ))
@@ -169,3 +194,46 @@ def test_enrich_populates_project_layouts_map():
169194 conn .close ()
170195 assert enriched .project_layouts_map ["composer-1" ] == ["/tmp/myproject" ]
171196 assert ctx .project_layouts_map == {}
197+
198+
199+ def test_enrich_populates_both_global_maps ():
200+ with tempfile .TemporaryDirectory () as tmp :
201+ ctx = resolve_workspace_context (_make_workspace_root (tmp ))
202+ conn = _open_global_db (tmp )
203+ mrc = {
204+ "projectLayouts" : [json .dumps ({"rootPath" : "/tmp/myproject" })],
205+ }
206+ conn .execute (
207+ "INSERT INTO cursorDiskKV VALUES (?, ?)" ,
208+ ("messageRequestContext:composer-1:ctx1" , json .dumps (mrc )),
209+ )
210+ conn .execute (
211+ "INSERT INTO cursorDiskKV VALUES (?, ?)" ,
212+ ("bubbleId:cid1:bid1" , json .dumps ({"type" : 1 , "text" : "hi" })),
213+ )
214+ conn .commit ()
215+ try :
216+ enriched = enrich_workspace_context_from_global_db (
217+ ctx ,
218+ conn ,
219+ populate_project_layouts = True ,
220+ populate_bubble_map = True ,
221+ )
222+ finally :
223+ conn .close ()
224+ assert enriched .project_layouts_map ["composer-1" ] == ["/tmp/myproject" ]
225+ assert enriched .bubble_map .get ("bid1" ) is not None
226+ assert ctx .project_layouts_map == {}
227+ assert ctx .bubble_map == {}
228+
229+
230+ def test_enrich_with_no_flags_returns_unchanged_context ():
231+ with tempfile .TemporaryDirectory () as tmp :
232+ ctx = resolve_workspace_context (_make_workspace_root (tmp ))
233+ conn = _open_global_db (tmp )
234+ conn .commit ()
235+ try :
236+ result = enrich_workspace_context_from_global_db (ctx , conn )
237+ finally :
238+ conn .close ()
239+ assert result is ctx
0 commit comments