diff --git a/tests/cli/test_create_crew.py b/tests/cli/test_create_crew.py index eba9ca989..0c03e5336 100644 --- a/tests/cli/test_create_crew.py +++ b/tests/cli/test_create_crew.py @@ -24,46 +24,65 @@ def temp_dir(): def test_create_folder_structure_strips_single_trailing_slash(): with tempfile.TemporaryDirectory() as temp_dir: + original_cwd = os.getcwd() os.chdir(temp_dir) - folder_path, folder_name, class_name = create_folder_structure("hello/") - - assert folder_name == "hello" - assert class_name == "Hello" - assert folder_path.name == "hello" - assert folder_path.exists() + try: + folder_path, folder_name, class_name = create_folder_structure("hello/") + + assert folder_name == "hello" + assert class_name == "Hello" + assert folder_path.name == "hello" + assert folder_path.exists() + finally: + os.chdir(original_cwd) def test_create_folder_structure_strips_multiple_trailing_slashes(): with tempfile.TemporaryDirectory() as temp_dir: - os.chdir(temp_dir) - folder_path, folder_name, class_name = create_folder_structure("hello///") - - assert folder_name == "hello" - assert class_name == "Hello" - assert folder_path.name == "hello" - assert folder_path.exists() + old_cwd = os.getcwd() + try: + os.chdir(temp_dir) + folder_path, folder_name, class_name = create_folder_structure("hello///") + + assert folder_name == "hello" + assert class_name == "Hello" + assert folder_path.name == "hello" + assert folder_path.exists() + finally: + if os.path.exists(old_cwd): + os.chdir(old_cwd) def test_create_folder_structure_handles_complex_name_with_trailing_slash(): with tempfile.TemporaryDirectory() as temp_dir: - os.chdir(temp_dir) - folder_path, folder_name, class_name = create_folder_structure("my-awesome_project/") - - assert folder_name == "my_awesome_project" - assert class_name == "MyAwesomeProject" - assert folder_path.name == "my_awesome_project" - assert folder_path.exists() + old_cwd = os.getcwd() + try: + os.chdir(temp_dir) + folder_path, folder_name, class_name = create_folder_structure("my-awesome_project/") + + assert folder_name == "my_awesome_project" + assert class_name == "MyAwesomeProject" + assert folder_path.name == "my_awesome_project" + assert folder_path.exists() + finally: + if os.path.exists(old_cwd): + os.chdir(old_cwd) def test_create_folder_structure_normal_name_unchanged(): with tempfile.TemporaryDirectory() as temp_dir: - os.chdir(temp_dir) - folder_path, folder_name, class_name = create_folder_structure("hello") - - assert folder_name == "hello" - assert class_name == "Hello" - assert folder_path.name == "hello" - assert folder_path.exists() + old_cwd = os.getcwd() + try: + os.chdir(temp_dir) + folder_path, folder_name, class_name = create_folder_structure("hello") + + assert folder_name == "hello" + assert class_name == "Hello" + assert folder_path.name == "hello" + assert folder_path.exists() + finally: + if os.path.exists(old_cwd): + os.chdir(old_cwd) @@ -71,17 +90,22 @@ def test_create_folder_structure_normal_name_unchanged(): def test_create_folder_structure_with_parent_folder(): with tempfile.TemporaryDirectory() as temp_dir: - os.chdir(temp_dir) - parent_path = Path(temp_dir) / "parent" - parent_path.mkdir() - - folder_path, folder_name, class_name = create_folder_structure("child/", parent_folder=parent_path) - - assert folder_name == "child" - assert class_name == "Child" - assert folder_path.name == "child" - assert folder_path.parent == parent_path - assert folder_path.exists() + old_cwd = os.getcwd() + try: + os.chdir(temp_dir) + parent_path = Path(temp_dir) / "parent" + parent_path.mkdir() + + folder_path, folder_name, class_name = create_folder_structure("child/", parent_folder=parent_path) + + assert folder_name == "child" + assert class_name == "Child" + assert folder_path.name == "child" + assert folder_path.parent == parent_path + assert folder_path.exists() + finally: + if os.path.exists(old_cwd): + os.chdir(old_cwd) @mock.patch("crewai.cli.create_crew.copy_template") @@ -140,60 +164,75 @@ def test_create_crew_normal_name_still_works(mock_load_env, mock_write_env, mock def test_create_folder_structure_handles_spaces_and_dashes_with_slash(): with tempfile.TemporaryDirectory() as temp_dir: - os.chdir(temp_dir) - folder_path, folder_name, class_name = create_folder_structure("My Cool-Project/") - - assert folder_name == "my_cool_project" - assert class_name == "MyCoolProject" - assert folder_path.name == "my_cool_project" - assert folder_path.exists() + old_cwd = os.getcwd() + try: + os.chdir(temp_dir) + folder_path, folder_name, class_name = create_folder_structure("My Cool-Project/") + + assert folder_name == "my_cool_project" + assert class_name == "MyCoolProject" + assert folder_path.name == "my_cool_project" + assert folder_path.exists() + finally: + if os.path.exists(old_cwd): + os.chdir(old_cwd) def test_create_folder_structure_raises_error_for_invalid_class_names(): with tempfile.TemporaryDirectory() as temp_dir: - os.chdir(temp_dir) - - invalid_cases = [ - ("123project/", "cannot start with a digit"), - ("True/", "reserved Python keyword"), - ("False/", "reserved Python keyword"), - ("None/", "reserved Python keyword"), - ("class/", "reserved Python keyword"), - ("def/", "reserved Python keyword"), - (" /", "empty or contain only whitespace"), - ("", "empty or contain only whitespace"), - ("@#$/", "contains no valid characters"), - ] - - for invalid_name, expected_error in invalid_cases: - with pytest.raises(ValueError, match=expected_error): - create_folder_structure(invalid_name) + old_cwd = os.getcwd() + try: + os.chdir(temp_dir) + + invalid_cases = [ + ("123project/", "cannot start with a digit"), + ("True/", "reserved Python keyword"), + ("False/", "reserved Python keyword"), + ("None/", "reserved Python keyword"), + ("class/", "reserved Python keyword"), + ("def/", "reserved Python keyword"), + (" /", "empty or contain only whitespace"), + ("", "empty or contain only whitespace"), + ("@#$/", "contains no valid characters"), + ] + + for invalid_name, expected_error in invalid_cases: + with pytest.raises(ValueError, match=expected_error): + create_folder_structure(invalid_name) + finally: + if os.path.exists(old_cwd): + os.chdir(old_cwd) def test_create_folder_structure_validates_class_names(): import keyword with tempfile.TemporaryDirectory() as temp_dir: - os.chdir(temp_dir) - - valid_cases = [ - ("hello/", "hello", "Hello"), - ("my-project/", "my_project", "MyProject"), - ("hello_world/", "hello_world", "HelloWorld"), - ("valid123/", "valid123", "Valid123"), - ("hello.world/", "hello.world", "HelloWorld"), - ("hello@world/", "hello@world", "HelloWorld"), - ] - - for valid_name, expected_folder, expected_class in valid_cases: - folder_path, folder_name, class_name = create_folder_structure(valid_name) - assert folder_name == expected_folder - assert class_name == expected_class - assert class_name.isidentifier() - assert not keyword.iskeyword(class_name) + old_cwd = os.getcwd() + try: + os.chdir(temp_dir) - if folder_path.exists(): - shutil.rmtree(folder_path) + valid_cases = [ + ("hello/", "hello", "Hello"), + ("my-project/", "my_project", "MyProject"), + ("hello_world/", "hello_world", "HelloWorld"), + ("valid123/", "valid123", "Valid123"), + ("hello.world/", "hello.world", "HelloWorld"), + ("hello@world/", "hello@world", "HelloWorld"), + ] + + for valid_name, expected_folder, expected_class in valid_cases: + folder_path, folder_name, class_name = create_folder_structure(valid_name) + assert folder_name == expected_folder + assert class_name == expected_class + assert class_name.isidentifier() + assert not keyword.iskeyword(class_name) + + if folder_path.exists(): + shutil.rmtree(folder_path) + finally: + if os.path.exists(old_cwd): + os.chdir(old_cwd) @mock.patch("crewai.cli.create_crew.copy_template")