Skip to content

Commit 373f2cf

Browse files
committed
test: add unit tests verifying shallow copy independence in worktree mode
1 parent 3d9e8b6 commit 373f2cf

1 file changed

Lines changed: 101 additions & 1 deletion

File tree

tests/test_worktree.py

Lines changed: 101 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from codeflash.optimization.optimizer import Optimizer
88

99

10-
def test_mirror_paths_for_worktree_mode(monkeypatch: pytest.MonkeyPatch):
10+
def test_mirror_paths_for_worktree_mode(monkeypatch: pytest.MonkeyPatch) -> None:
1111
repo_root = Path(__file__).resolve().parent.parent
1212
project_root = repo_root / "code_to_optimize" / "code_directories" / "nested_module_root"
1313

@@ -67,3 +67,103 @@ def test_mirror_paths_for_worktree_mode(monkeypatch: pytest.MonkeyPatch):
6767
assert optimizer.test_cfg.tests_root == worktree_dir / "tests"
6868
assert optimizer.test_cfg.project_root_path == worktree_dir # same as project_root
6969
assert optimizer.test_cfg.tests_project_rootdir == worktree_dir # same as test_project_root
70+
71+
72+
def test_mirror_paths_preserves_original_args(monkeypatch: pytest.MonkeyPatch) -> None:
73+
repo_root = Path(__file__).resolve().parent.parent
74+
project_root = repo_root / "code_to_optimize" / "code_directories" / "nested_module_root"
75+
76+
monkeypatch.setattr("codeflash.optimization.optimizer.git_root_dir", lambda: project_root)
77+
78+
args = Namespace()
79+
args.benchmark = False
80+
args.benchmarks_root = None
81+
args.no_pr = True
82+
args.config_file = project_root / "pyproject.toml"
83+
args.file = project_root / "src" / "app" / "main.py"
84+
args.worktree = True
85+
86+
new_args = process_pyproject_config(args)
87+
optimizer = Optimizer(new_args)
88+
89+
original_project_root = optimizer.args.project_root
90+
original_module_root = optimizer.args.module_root
91+
original_file = optimizer.args.file
92+
original_tests_root = optimizer.args.tests_root
93+
original_test_project_root = optimizer.args.test_project_root
94+
95+
worktree_dir = repo_root / "worktree"
96+
optimizer.mirror_paths_for_worktree_mode(worktree_dir)
97+
98+
assert optimizer.original_args_and_test_cfg is not None
99+
saved_args = optimizer.original_args_and_test_cfg[0]
100+
assert saved_args.project_root == original_project_root
101+
assert saved_args.module_root == original_module_root
102+
assert saved_args.file == original_file
103+
assert saved_args.tests_root == original_tests_root
104+
assert saved_args.test_project_root == original_test_project_root
105+
106+
107+
def test_mirror_paths_preserves_original_test_cfg(monkeypatch: pytest.MonkeyPatch) -> None:
108+
repo_root = Path(__file__).resolve().parent.parent
109+
project_root = repo_root / "code_to_optimize" / "code_directories" / "nested_module_root"
110+
111+
monkeypatch.setattr("codeflash.optimization.optimizer.git_root_dir", lambda: project_root)
112+
113+
args = Namespace()
114+
args.benchmark = False
115+
args.benchmarks_root = None
116+
args.no_pr = True
117+
args.config_file = project_root / "pyproject.toml"
118+
args.file = project_root / "src" / "app" / "main.py"
119+
args.worktree = True
120+
121+
new_args = process_pyproject_config(args)
122+
optimizer = Optimizer(new_args)
123+
124+
original_tests_root = optimizer.test_cfg.tests_root
125+
original_project_root_path = optimizer.test_cfg.project_root_path
126+
original_tests_project_rootdir = optimizer.test_cfg.tests_project_rootdir
127+
128+
worktree_dir = repo_root / "worktree"
129+
optimizer.mirror_paths_for_worktree_mode(worktree_dir)
130+
131+
assert optimizer.original_args_and_test_cfg is not None
132+
saved_test_cfg = optimizer.original_args_and_test_cfg[1]
133+
assert saved_test_cfg.tests_root == original_tests_root
134+
assert saved_test_cfg.project_root_path == original_project_root_path
135+
assert saved_test_cfg.tests_project_rootdir == original_tests_project_rootdir
136+
137+
138+
def test_shallow_copy_independence(monkeypatch: pytest.MonkeyPatch) -> None:
139+
repo_root = Path(__file__).resolve().parent.parent
140+
project_root = repo_root / "code_to_optimize" / "code_directories" / "nested_module_root"
141+
142+
monkeypatch.setattr("codeflash.optimization.optimizer.git_root_dir", lambda: project_root)
143+
144+
args = Namespace()
145+
args.benchmark = False
146+
args.benchmarks_root = None
147+
args.no_pr = True
148+
args.config_file = project_root / "pyproject.toml"
149+
args.file = project_root / "src" / "app" / "main.py"
150+
args.worktree = True
151+
152+
new_args = process_pyproject_config(args)
153+
optimizer = Optimizer(new_args)
154+
155+
worktree_dir = repo_root / "worktree"
156+
optimizer.mirror_paths_for_worktree_mode(worktree_dir)
157+
158+
assert optimizer.original_args_and_test_cfg is not None
159+
saved_args = optimizer.original_args_and_test_cfg[0]
160+
saved_test_cfg = optimizer.original_args_and_test_cfg[1]
161+
162+
original_project_root = saved_args.project_root
163+
original_tests_root = saved_test_cfg.tests_root
164+
165+
optimizer.args.project_root = Path("/mutated/path")
166+
optimizer.test_cfg.tests_root = Path("/mutated/tests")
167+
168+
assert saved_args.project_root == original_project_root
169+
assert saved_test_cfg.tests_root == original_tests_root

0 commit comments

Comments
 (0)