11from __future__ import annotations
22
3+ import os
34from pathlib import Path
45
56import pytest
67
8+ from kaos import current_kaos
9+ from kaos .local import LocalKaos
10+ from kaos .path import KaosPath
711from kimi_cli .metadata import load_metadata
812from kimi_cli .session import Session
913
@@ -25,12 +29,25 @@ def _get_share_dir() -> Path:
2529 return share_dir
2630
2731
28- def test_session_create (isolated_share_dir : Path , tmp_path : Path ):
32+ @pytest .fixture
33+ def kaos_context (tmp_path : Path ):
34+ """Set up a Kaos context for async operations."""
35+ token = current_kaos .set (LocalKaos ())
36+ old_cwd = Path .cwd ()
37+ os .chdir (tmp_path )
38+ try :
39+ yield
40+ finally :
41+ os .chdir (old_cwd )
42+ current_kaos .reset (token )
43+
44+
45+ async def test_session_create (kaos_context , isolated_share_dir : Path , tmp_path : Path ):
2946 """Test creating a new session."""
30- work_dir = tmp_path / "work"
31- work_dir .mkdir ()
47+ work_dir = KaosPath . unsafe_from_local_path ( tmp_path / "work" )
48+ await work_dir .mkdir ()
3249
33- session = Session .create (work_dir )
50+ session = await Session .create (work_dir )
3451
3552 assert session .id is not None
3653 assert session .work_dir == work_dir
@@ -44,13 +61,13 @@ def test_session_create(isolated_share_dir: Path, tmp_path: Path):
4461 assert metadata .session_to_workdir [session .id ] == str (work_dir )
4562
4663
47- def test_session_create_multiple_sessions (isolated_share_dir : Path , tmp_path : Path ):
64+ async def test_session_create_multiple_sessions (kaos_context , isolated_share_dir : Path , tmp_path : Path ):
4865 """Test creating multiple sessions for the same work directory."""
49- work_dir = tmp_path / "work"
50- work_dir .mkdir ()
66+ work_dir = KaosPath . unsafe_from_local_path ( tmp_path / "work" )
67+ await work_dir .mkdir ()
5168
52- session1 = Session .create (work_dir )
53- session2 = Session .create (work_dir )
69+ session1 = await Session .create (work_dir )
70+ session2 = await Session .create (work_dir )
5471
5572 assert session1 .id != session2 .id
5673 assert session1 .work_dir == session2 .work_dir
@@ -62,15 +79,15 @@ def test_session_create_multiple_sessions(isolated_share_dir: Path, tmp_path: Pa
6279 assert session2 .id in metadata .session_to_workdir
6380
6481
65- def test_session_create_different_work_dirs (isolated_share_dir : Path , tmp_path : Path ):
82+ async def test_session_create_different_work_dirs (kaos_context , isolated_share_dir : Path , tmp_path : Path ):
6683 """Test creating sessions for different work directories."""
67- work_dir1 = tmp_path / "work1"
68- work_dir2 = tmp_path / "work2"
69- work_dir1 .mkdir ()
70- work_dir2 .mkdir ()
84+ work_dir1 = KaosPath . unsafe_from_local_path ( tmp_path / "work1" )
85+ work_dir2 = KaosPath . unsafe_from_local_path ( tmp_path / "work2" )
86+ await work_dir1 .mkdir ()
87+ await work_dir2 .mkdir ()
7188
72- session1 = Session .create (work_dir1 )
73- session2 = Session .create (work_dir2 )
89+ session1 = await Session .create (work_dir1 )
90+ session2 = await Session .create (work_dir2 )
7491
7592 assert session1 .work_dir != session2 .work_dir
7693 assert session1 .id != session2 .id
@@ -81,23 +98,23 @@ def test_session_create_different_work_dirs(isolated_share_dir: Path, tmp_path:
8198 assert metadata .session_to_workdir [session2 .id ] == str (work_dir2 )
8299
83100
84- def test_session_continue_no_previous_session (isolated_share_dir : Path , tmp_path : Path ):
101+ async def test_session_continue_no_previous_session (kaos_context , isolated_share_dir : Path , tmp_path : Path ):
85102 """Test continuing when no previous session exists."""
86- work_dir = tmp_path / "work"
87- work_dir .mkdir ()
103+ work_dir = KaosPath . unsafe_from_local_path ( tmp_path / "work" )
104+ await work_dir .mkdir ()
88105
89- session = Session .continue_ (work_dir )
106+ session = await Session .continue_ (work_dir )
90107
91108 assert session is None
92109
93110
94- def test_session_continue_with_previous_session (isolated_share_dir : Path , tmp_path : Path ):
111+ async def test_session_continue_with_previous_session (kaos_context , isolated_share_dir : Path , tmp_path : Path ):
95112 """Test continuing a previous session."""
96- work_dir = tmp_path / "work"
97- work_dir .mkdir ()
113+ work_dir = KaosPath . unsafe_from_local_path ( tmp_path / "work" )
114+ await work_dir .mkdir ()
98115
99116 # Create a session first
100- created_session = Session .create (work_dir )
117+ created_session = await Session .create (work_dir )
101118
102119 # Update metadata to mark it as last session
103120 metadata = load_metadata ()
@@ -109,20 +126,20 @@ def test_session_continue_with_previous_session(isolated_share_dir: Path, tmp_pa
109126 save_metadata (metadata )
110127
111128 # Now continue
112- continued_session = Session .continue_ (work_dir )
129+ continued_session = await Session .continue_ (work_dir )
113130
114131 assert continued_session is not None
115132 assert continued_session .id == created_session .id
116133 assert continued_session .work_dir == created_session .work_dir
117134 assert continued_session .history_file == created_session .history_file
118135
119136
120- def test_session_load_by_id_valid (isolated_share_dir : Path , tmp_path : Path ):
137+ async def test_session_load_by_id_valid (kaos_context , isolated_share_dir : Path , tmp_path : Path ):
121138 """Test loading a session by valid ID."""
122- work_dir = tmp_path / "work"
123- work_dir .mkdir ()
139+ work_dir = KaosPath . unsafe_from_local_path ( tmp_path / "work" )
140+ await work_dir .mkdir ()
124141
125- created_session = Session .create (work_dir )
142+ created_session = await Session .create (work_dir )
126143 session_id = created_session .id
127144
128145 # Create the history file (Session.create doesn't create it, only sets the path)
@@ -137,7 +154,7 @@ def test_session_load_by_id_valid(isolated_share_dir: Path, tmp_path: Path):
137154 assert loaded_session .history_file == created_session .history_file
138155
139156
140- def test_session_load_by_id_nonexistent (isolated_share_dir : Path ):
157+ def test_session_load_by_id_nonexistent (kaos_context , isolated_share_dir : Path ):
141158 """Test loading a non-existent session ID."""
142159 import uuid
143160
@@ -147,15 +164,15 @@ def test_session_load_by_id_nonexistent(isolated_share_dir: Path):
147164 assert loaded_session is None
148165
149166
150- def test_session_load_by_id_different_work_dir (isolated_share_dir : Path , tmp_path : Path ):
167+ async def test_session_load_by_id_different_work_dir (kaos_context , isolated_share_dir : Path , tmp_path : Path ):
151168 """Test loading a session from a different work directory."""
152- work_dir1 = tmp_path / "work1"
153- work_dir2 = tmp_path / "work2"
154- work_dir1 .mkdir ()
155- work_dir2 .mkdir ()
169+ work_dir1 = KaosPath . unsafe_from_local_path ( tmp_path / "work1" )
170+ work_dir2 = KaosPath . unsafe_from_local_path ( tmp_path / "work2" )
171+ await work_dir1 .mkdir ()
172+ await work_dir2 .mkdir ()
156173
157- session1 = Session .create (work_dir1 )
158- session2 = Session .create (work_dir2 )
174+ session1 = await Session .create (work_dir1 )
175+ session2 = await Session .create (work_dir2 )
159176
160177 # Create history files
161178 session1 .history_file .parent .mkdir (parents = True , exist_ok = True )
@@ -171,13 +188,13 @@ def test_session_load_by_id_different_work_dir(isolated_share_dir: Path, tmp_pat
171188 assert loaded_session .work_dir == work_dir1 # Should use original work_dir
172189
173190
174- def test_session_load_by_id_filesystem_fallback (isolated_share_dir : Path , tmp_path : Path ):
191+ async def test_session_load_by_id_filesystem_fallback (kaos_context , isolated_share_dir : Path , tmp_path : Path ):
175192 """Test filesystem fallback when session not in metadata."""
176- work_dir = tmp_path / "work"
177- work_dir .mkdir ()
193+ work_dir = KaosPath . unsafe_from_local_path ( tmp_path / "work" )
194+ await work_dir .mkdir ()
178195
179196 # Create a session
180- created_session = Session .create (work_dir )
197+ created_session = await Session .create (work_dir )
181198 session_id = created_session .id
182199
183200 # Create the history file
@@ -204,13 +221,13 @@ def test_session_load_by_id_filesystem_fallback(isolated_share_dir: Path, tmp_pa
204221 assert metadata .session_to_workdir [session_id ] == str (work_dir )
205222
206223
207- def test_session_load_by_id_history_file_missing (isolated_share_dir : Path , tmp_path : Path ):
224+ async def test_session_load_by_id_history_file_missing (kaos_context , isolated_share_dir : Path , tmp_path : Path ):
208225 """Test loading a session when history file is missing."""
209- work_dir = tmp_path / "work"
210- work_dir .mkdir ()
226+ work_dir = KaosPath . unsafe_from_local_path ( tmp_path / "work" )
227+ await work_dir .mkdir ()
211228
212229 # Create a session
213- created_session = Session .create (work_dir )
230+ created_session = await Session .create (work_dir )
214231 session_id = created_session .id
215232
216233 # Create and then remove history file
@@ -231,35 +248,35 @@ def test_session_load_by_id_history_file_missing(isolated_share_dir: Path, tmp_p
231248 assert loaded_session is None
232249
233250
234- def test_session_create_truncates_existing_history (isolated_share_dir : Path , tmp_path : Path ):
251+ async def test_session_create_truncates_existing_history (kaos_context , isolated_share_dir : Path , tmp_path : Path ):
235252 """Test that creating a session truncates existing history file when using same history file."""
236- work_dir = tmp_path / "work"
237- work_dir .mkdir ()
253+ work_dir = KaosPath . unsafe_from_local_path ( tmp_path / "work" )
254+ await work_dir .mkdir ()
238255
239256 # Create first session
240- session1 = Session .create (work_dir )
257+ session1 = await Session .create (work_dir )
241258 history_file = session1 .history_file
242259
243260 # Create the history file and write content
244261 history_file .parent .mkdir (parents = True , exist_ok = True )
245262 history_file .write_text ("some history content\n " )
246263
247264 # Create second session with the same history file (using _history_file parameter)
248- session2 = Session .create (work_dir , _history_file = history_file )
265+ session2 = await Session .create (work_dir , _history_file = history_file )
249266
250267 # History file should be empty (truncated)
251268 assert history_file .exists ()
252269 assert history_file .read_text () == ""
253270
254271
255- def test_session_continue_updates_last_session_id (isolated_share_dir : Path , tmp_path : Path ):
272+ async def test_session_continue_updates_last_session_id (kaos_context , isolated_share_dir : Path , tmp_path : Path ):
256273 """Test that continuing a session updates last_session_id in metadata."""
257- work_dir = tmp_path / "work"
258- work_dir .mkdir ()
274+ work_dir = KaosPath . unsafe_from_local_path ( tmp_path / "work" )
275+ await work_dir .mkdir ()
259276
260277 # Create multiple sessions
261- session1 = Session .create (work_dir )
262- session2 = Session .create (work_dir )
278+ session1 = await Session .create (work_dir )
279+ session2 = await Session .create (work_dir )
263280
264281 # Manually set last_session_id to session1
265282 metadata = load_metadata ()
@@ -271,6 +288,6 @@ def test_session_continue_updates_last_session_id(isolated_share_dir: Path, tmp_
271288 save_metadata (metadata )
272289
273290 # Continue should return session1
274- continued = Session .continue_ (work_dir )
291+ continued = await Session .continue_ (work_dir )
275292 assert continued is not None
276293 assert continued .id == session1 .id
0 commit comments