@@ -3,28 +3,42 @@ mod tests {
33 use crate :: storage:: * ;
44 use tempfile:: TempDir ;
55 use std:: env;
6+ use std:: path:: PathBuf ;
7+ use std:: sync:: Mutex ;
8+
9+ // Use a global mutex to serialize tests that modify current directory
10+ static TEST_MUTEX : Mutex < ( ) > = Mutex :: new ( ( ) ) ;
611
7- fn setup_test_env ( ) -> TempDir {
12+ fn setup_test_env ( ) -> ( TempDir , PathBuf ) {
13+ let original_dir = env:: current_dir ( ) . unwrap ( ) ;
814 let temp_dir = TempDir :: new ( ) . unwrap ( ) ;
915 env:: set_current_dir ( temp_dir. path ( ) ) . unwrap ( ) ;
10- temp_dir
16+ ( temp_dir, original_dir)
17+ }
18+
19+ fn cleanup_test_env ( original_dir : PathBuf ) {
20+ let _ = env:: set_current_dir ( original_dir) ;
1121 }
1222
1323 #[ test]
1424 fn test_get_cowork_dir_creates_structure ( ) {
15- let _temp = setup_test_env ( ) ;
25+ let _guard = TEST_MUTEX . lock ( ) . unwrap ( ) ;
26+ let ( _temp, original_dir) = setup_test_env ( ) ;
1627
1728 let dir = get_cowork_dir ( ) . unwrap ( ) ;
1829 assert ! ( dir. exists( ) ) ;
1930 assert ! ( dir. join( "data" ) . exists( ) ) ;
2031 assert ! ( dir. join( "artifacts" ) . exists( ) ) ;
2132 assert ! ( dir. join( "session" ) . exists( ) ) ;
2233 assert ! ( dir. join( "logs" ) . exists( ) ) ;
34+
35+ cleanup_test_env ( original_dir) ;
2336 }
2437
2538 #[ test]
2639 fn test_save_and_load_requirements ( ) {
27- let _temp = setup_test_env ( ) ;
40+ let _guard = TEST_MUTEX . lock ( ) . unwrap ( ) ;
41+ let ( _temp, original_dir) = setup_test_env ( ) ;
2842 get_cowork_dir ( ) . unwrap ( ) ;
2943
3044 let mut reqs = Requirements :: new ( ) ;
@@ -44,11 +58,14 @@ mod tests {
4458 assert_eq ! ( loaded. requirements. len( ) , 1 ) ;
4559 assert_eq ! ( loaded. requirements[ 0 ] . id, "REQ-001" ) ;
4660 assert_eq ! ( loaded. requirements[ 0 ] . title, "Test Requirement" ) ;
61+
62+ cleanup_test_env ( original_dir) ;
4763 }
4864
4965 #[ test]
5066 fn test_save_and_load_feature_list ( ) {
51- let _temp = setup_test_env ( ) ;
67+ let _guard = TEST_MUTEX . lock ( ) . unwrap ( ) ;
68+ let ( _temp, original_dir) = setup_test_env ( ) ;
5269 get_cowork_dir ( ) . unwrap ( ) ;
5370
5471 let mut features = FeatureList :: new ( ) ;
@@ -70,14 +87,19 @@ mod tests {
7087
7188 assert_eq ! ( loaded. features. len( ) , 1 ) ;
7289 assert_eq ! ( loaded. features[ 0 ] . id, "FEAT-001" ) ;
90+
91+ cleanup_test_env ( original_dir) ;
7392 }
7493
7594 #[ test]
7695 fn test_cowork_dir_exists ( ) {
77- let _temp = setup_test_env ( ) ;
96+ let _guard = TEST_MUTEX . lock ( ) . unwrap ( ) ;
97+ let ( _temp, original_dir) = setup_test_env ( ) ;
7898
7999 assert ! ( !cowork_dir_exists( ) ) ;
80100 get_cowork_dir ( ) . unwrap ( ) ;
81101 assert ! ( cowork_dir_exists( ) ) ;
102+
103+ cleanup_test_env ( original_dir) ;
82104 }
83105}
0 commit comments