@@ -27,15 +27,22 @@ def temp_db(self):
2727 temp_dir = tempfile .mkdtemp ()
2828 db_path = os .path .join (temp_dir , "test_memos.db" )
2929 yield db_path
30- # Cleanup
31- if os .path .exists (db_path ):
32- os .remove (db_path )
33- os .rmdir (temp_dir )
30+ # Cleanup - note: file cleanup is handled by user_manager fixture
31+ try :
32+ if os .path .exists (db_path ):
33+ os .remove (db_path )
34+ os .rmdir (temp_dir )
35+ except (OSError , PermissionError ):
36+ # On Windows, files might still be locked, ignore cleanup errors
37+ pass
3438
3539 @pytest .fixture
3640 def user_manager (self , temp_db ):
3741 """Create UserManager instance with temporary database."""
38- return UserManager (db_path = temp_db )
42+ manager = UserManager (db_path = temp_db )
43+ yield manager
44+ # Ensure database connections are closed
45+ manager .close ()
3946
4047 def test_initialization (self , temp_db ):
4148 """Test UserManager initialization."""
@@ -63,18 +70,27 @@ class MockSettings:
6370 # Replace the settings import
6471 monkeypatch .setattr ("memos.mem_user.user_manager.settings" , MockSettings ())
6572
73+ manager = None
6674 try :
6775 manager = UserManager ()
6876 expected_path = mock_memos_dir / "memos_users.db"
6977 assert manager .db_path == str (expected_path )
7078 assert os .path .exists (expected_path )
7179 finally :
80+ # Close database connections first
81+ if manager :
82+ manager .close ()
83+
7284 # Cleanup
73- expected_path = mock_memos_dir / "memos_users.db"
74- if os .path .exists (expected_path ):
75- os .remove (expected_path )
76- if os .path .exists (temp_dir ):
77- os .rmdir (temp_dir )
85+ try :
86+ expected_path = mock_memos_dir / "memos_users.db"
87+ if os .path .exists (expected_path ):
88+ os .remove (expected_path )
89+ if os .path .exists (temp_dir ):
90+ os .rmdir (temp_dir )
91+ except (OSError , PermissionError ):
92+ # On Windows, files might still be locked, ignore cleanup errors
93+ pass
7894
7995
8096class TestUserOperations :
@@ -93,7 +109,9 @@ def temp_db(self):
93109 @pytest .fixture
94110 def user_manager (self , temp_db ):
95111 """Create UserManager instance with temporary database."""
96- return UserManager (db_path = temp_db )
112+ manager = UserManager (db_path = temp_db )
113+ yield manager
114+ manager .close ()
97115
98116 def test_create_user (self , user_manager ):
99117 """Test user creation."""
@@ -239,7 +257,9 @@ def temp_db(self):
239257 @pytest .fixture
240258 def user_manager (self , temp_db ):
241259 """Create UserManager instance with temporary database."""
242- return UserManager (db_path = temp_db )
260+ manager = UserManager (db_path = temp_db )
261+ yield manager
262+ manager .close ()
243263
244264 def test_create_cube (self , user_manager ):
245265 """Test cube creation."""
@@ -264,7 +284,7 @@ def test_create_cube_with_path_and_custom_id(self, user_manager):
264284 owner_id = user_manager .create_user ("cube_owner" , UserRole .USER )
265285
266286 custom_cube_id = "custom_cube_123"
267- cube_path = "/path/to/cube"
287+ cube_path = str ( Path ( "/path/to/cube" )) # Use pathlib for cross-platform path handling
268288
269289 cube_id = user_manager .create_cube (
270290 "custom_cube" , owner_id , cube_path = cube_path , cube_id = custom_cube_id
@@ -433,7 +453,9 @@ def temp_db(self):
433453 @pytest .fixture
434454 def user_manager (self , temp_db ):
435455 """Create UserManager instance with temporary database."""
436- return UserManager (db_path = temp_db )
456+ manager = UserManager (db_path = temp_db )
457+ yield manager
458+ manager .close ()
437459
438460 def test_user_roles (self , user_manager ):
439461 """Test different user roles."""
@@ -483,7 +505,9 @@ def temp_db(self):
483505 @pytest .fixture
484506 def user_manager (self , temp_db ):
485507 """Create UserManager instance with temporary database."""
486- return UserManager (db_path = temp_db )
508+ manager = UserManager (db_path = temp_db )
509+ yield manager
510+ manager .close ()
487511
488512 def test_cascade_delete_user_cubes (self , user_manager ):
489513 """Test that user's owned cubes are handled when user is deleted."""
0 commit comments