mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-09-19 01:25:52 +00:00
* fix(cli): overwrite stale poetry.lock backup on windows os.rename raises FileExistsError on Windows when poetry-old.lock already exists from a previous run, so a second `crewai update` crashed there while POSIX silently replaced the file. Use os.replace, which overwrites on every platform, and add a regression test. * test(cli): add docstrings to update_crew tests --------- Co-authored-by: Vidit Ostwal <110953813+Vidit-Ostwal@users.noreply.github.com>
64 lines
1.9 KiB
Python
64 lines
1.9 KiB
Python
"""Tests for the ``crewai update`` pyproject migration."""
|
|
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
from crewai_cli.update_crew import migrate_pyproject
|
|
|
|
|
|
_POETRY_PYPROJECT = """\
|
|
[tool.poetry]
|
|
name = "demo"
|
|
version = "0.1.0"
|
|
description = "demo crew"
|
|
authors = ["Demo Author <demo@example.com>"]
|
|
|
|
[tool.poetry.dependencies]
|
|
python = ">=3.10,<3.14"
|
|
crewai = "^1.0.0"
|
|
"""
|
|
|
|
|
|
def _write_project(tmp_path: Path) -> None:
|
|
"""Create a minimal Poetry-style project with a lock file in ``tmp_path``."""
|
|
(tmp_path / "pyproject.toml").write_text(_POETRY_PYPROJECT, encoding="utf-8")
|
|
(tmp_path / "poetry.lock").write_text("current lock\n", encoding="utf-8")
|
|
|
|
|
|
def test_migrate_pyproject_backs_up_lock_file(
|
|
tmp_path: Path, monkeypatch: pytest.MonkeyPatch
|
|
) -> None:
|
|
"""The migration renames ``poetry.lock`` to ``poetry-old.lock`` and backs up pyproject."""
|
|
monkeypatch.chdir(tmp_path)
|
|
_write_project(tmp_path)
|
|
|
|
migrate_pyproject("pyproject.toml", "pyproject.toml")
|
|
|
|
assert not (tmp_path / "poetry.lock").exists()
|
|
assert (tmp_path / "poetry-old.lock").read_text(encoding="utf-8") == (
|
|
"current lock\n"
|
|
)
|
|
assert (tmp_path / "pyproject-old.toml").exists()
|
|
|
|
|
|
def test_migrate_pyproject_overwrites_existing_lock_backup(
|
|
tmp_path: Path, monkeypatch: pytest.MonkeyPatch
|
|
) -> None:
|
|
"""A second ``crewai update`` must replace a stale ``poetry-old.lock``.
|
|
|
|
``os.rename`` refuses to overwrite an existing destination on Windows
|
|
(``FileExistsError``) while POSIX replaces it silently, so re-running the
|
|
migration used to fail only on Windows.
|
|
"""
|
|
monkeypatch.chdir(tmp_path)
|
|
_write_project(tmp_path)
|
|
(tmp_path / "poetry-old.lock").write_text("stale backup\n", encoding="utf-8")
|
|
|
|
migrate_pyproject("pyproject.toml", "pyproject.toml")
|
|
|
|
assert not (tmp_path / "poetry.lock").exists()
|
|
assert (tmp_path / "poetry-old.lock").read_text(encoding="utf-8") == (
|
|
"current lock\n"
|
|
)
|