Skip to content

Commit bc66b7e

Browse files
committed
test(codex): use shared temp project fixture
1 parent c775bd4 commit bc66b7e

1 file changed

Lines changed: 82 additions & 82 deletions

File tree

tests/platform_integrations/test_codex_sharing.py

Lines changed: 82 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,11 @@ def run_script(script, project_dir=None, args=None, evolve_dir=None, stdin=None,
3636

3737

3838
class TestCodexSaveAndRetrieve:
39-
def test_save_stamps_owner_and_private_visibility(self, tmp_path):
40-
evolve_dir = tmp_path / ".evolve"
39+
def test_save_stamps_owner_and_private_visibility(self, temp_project_dir):
40+
evolve_dir = temp_project_dir / ".evolve"
4141
run_script(
4242
SAVE_SCRIPT,
43-
project_dir=tmp_path,
43+
project_dir=temp_project_dir,
4444
args=["--user", "alice"],
4545
evolve_dir=evolve_dir,
4646
stdin=json.dumps({"entities": [{"type": "guideline", "content": "Write clear commit messages."}]}),
@@ -51,8 +51,8 @@ def test_save_stamps_owner_and_private_visibility(self, tmp_path):
5151
assert "owner: alice" in content
5252
assert "visibility: private" in content
5353

54-
def test_retrieve_annotates_subscribed_entities(self, tmp_path):
55-
evolve_dir = tmp_path / ".evolve"
54+
def test_retrieve_annotates_subscribed_entities(self, temp_project_dir):
55+
evolve_dir = temp_project_dir / ".evolve"
5656
own_dir = evolve_dir / "entities" / "guideline"
5757
own_dir.mkdir(parents=True)
5858
(own_dir / "tip.md").write_text("---\ntype: guideline\n---\n\nKeep functions small.\n")
@@ -66,8 +66,8 @@ def test_retrieve_annotates_subscribed_entities(self, tmp_path):
6666
assert "[from: alice]" in result.stdout
6767
assert "Always write tests." in result.stdout
6868

69-
def test_retrieve_includes_published_guidelines(self, tmp_path):
70-
evolve_dir = tmp_path / ".evolve"
69+
def test_retrieve_includes_published_guidelines(self, temp_project_dir):
70+
evolve_dir = temp_project_dir / ".evolve"
7171
own_dir = evolve_dir / "entities" / "guideline"
7272
own_dir.mkdir(parents=True)
7373
(own_dir / "tip.md").write_text("---\ntype: guideline\n---\n\nKeep functions small.\n")
@@ -85,172 +85,172 @@ def test_retrieve_includes_published_guidelines(self, tmp_path):
8585

8686

8787
class TestCodexSharingScripts:
88-
def test_publish_moves_entity_to_public_dir_and_audits(self, tmp_path):
89-
guideline_dir = tmp_path / ".evolve" / "entities" / "guideline"
88+
def test_publish_moves_entity_to_public_dir_and_audits(self, temp_project_dir):
89+
guideline_dir = temp_project_dir / ".evolve" / "entities" / "guideline"
9090
guideline_dir.mkdir(parents=True)
9191
source = guideline_dir / "my-tip.md"
9292
source.write_text("---\ntype: guideline\n---\n\nPrefer composition over inheritance.\n")
9393

9494
run_script(
9595
PUBLISH_SCRIPT,
96-
project_dir=tmp_path,
96+
project_dir=temp_project_dir,
9797
args=["--entity", "my-tip.md", "--user", "alice"],
98-
evolve_dir=tmp_path / ".evolve",
98+
evolve_dir=temp_project_dir / ".evolve",
9999
)
100100

101-
published = tmp_path / ".evolve" / "public" / "guideline" / "my-tip.md"
101+
published = temp_project_dir / ".evolve" / "public" / "guideline" / "my-tip.md"
102102
assert published.exists()
103103
assert not source.exists()
104104
content = published.read_text()
105105
assert "visibility: public" in content
106106
assert "owner: alice" in content
107107
assert "published_at:" in content
108108

109-
entry = json.loads((tmp_path / ".evolve" / "audit.log").read_text().strip())
109+
entry = json.loads((temp_project_dir / ".evolve" / "audit.log").read_text().strip())
110110
assert entry["action"] == "publish"
111111
assert entry["actor"] == "alice"
112112

113-
def test_publish_stamps_source_from_public_repo_remote(self, tmp_path):
114-
guideline_dir = tmp_path / ".evolve" / "entities" / "guideline"
113+
def test_publish_stamps_source_from_public_repo_remote(self, temp_project_dir):
114+
guideline_dir = temp_project_dir / ".evolve" / "entities" / "guideline"
115115
guideline_dir.mkdir(parents=True)
116116
(guideline_dir / "my-tip.md").write_text("---\ntype: guideline\n---\n\nPrefer composition over inheritance.\n")
117-
(tmp_path / "evolve.config.yaml").write_text(
117+
(temp_project_dir / "evolve.config.yaml").write_text(
118118
'public_repo:\n remote: "git@github.com:alice/evolve-guidelines.git"\n branch: "main"\n'
119119
)
120120

121121
run_script(
122122
PUBLISH_SCRIPT,
123-
project_dir=tmp_path,
123+
project_dir=temp_project_dir,
124124
args=["--entity", "my-tip.md"],
125-
evolve_dir=tmp_path / ".evolve",
125+
evolve_dir=temp_project_dir / ".evolve",
126126
)
127127

128-
content = (tmp_path / ".evolve" / "public" / "guideline" / "my-tip.md").read_text()
128+
content = (temp_project_dir / ".evolve" / "public" / "guideline" / "my-tip.md").read_text()
129129
assert "source: alice/evolve-guidelines" in content
130130

131-
def test_publish_uses_identity_user_as_source_fallback(self, tmp_path):
132-
guideline_dir = tmp_path / ".evolve" / "entities" / "guideline"
131+
def test_publish_uses_identity_user_as_source_fallback(self, temp_project_dir):
132+
guideline_dir = temp_project_dir / ".evolve" / "entities" / "guideline"
133133
guideline_dir.mkdir(parents=True)
134134
(guideline_dir / "my-tip.md").write_text("---\ntype: guideline\n---\n\nPrefer composition over inheritance.\n")
135-
(tmp_path / "evolve.config.yaml").write_text('identity:\n user: "alice"\n')
135+
(temp_project_dir / "evolve.config.yaml").write_text('identity:\n user: "alice"\n')
136136

137137
run_script(
138138
PUBLISH_SCRIPT,
139-
project_dir=tmp_path,
139+
project_dir=temp_project_dir,
140140
args=["--entity", "my-tip.md"],
141-
evolve_dir=tmp_path / ".evolve",
141+
evolve_dir=temp_project_dir / ".evolve",
142142
)
143143

144-
content = (tmp_path / ".evolve" / "public" / "guideline" / "my-tip.md").read_text()
144+
content = (temp_project_dir / ".evolve" / "public" / "guideline" / "my-tip.md").read_text()
145145
assert "source: alice" in content
146146

147-
def test_publish_fails_when_entity_not_found(self, tmp_path):
147+
def test_publish_fails_when_entity_not_found(self, temp_project_dir):
148148
result = run_script(
149149
PUBLISH_SCRIPT,
150-
project_dir=tmp_path,
150+
project_dir=temp_project_dir,
151151
args=["--entity", "missing.md"],
152-
evolve_dir=tmp_path / ".evolve",
152+
evolve_dir=temp_project_dir / ".evolve",
153153
expect_success=False,
154154
)
155155
assert result.returncode != 0
156156
assert "not found" in result.stderr
157157

158-
def test_publish_succeeds_without_user_flag(self, tmp_path):
159-
guideline_dir = tmp_path / ".evolve" / "entities" / "guideline"
158+
def test_publish_succeeds_without_user_flag(self, temp_project_dir):
159+
guideline_dir = temp_project_dir / ".evolve" / "entities" / "guideline"
160160
guideline_dir.mkdir(parents=True)
161161
(guideline_dir / "my-tip.md").write_text("---\ntype: guideline\n---\n\nPrefer composition.\n")
162162

163163
run_script(
164164
PUBLISH_SCRIPT,
165-
project_dir=tmp_path,
165+
project_dir=temp_project_dir,
166166
args=["--entity", "my-tip.md"],
167-
evolve_dir=tmp_path / ".evolve",
167+
evolve_dir=temp_project_dir / ".evolve",
168168
)
169-
content = (tmp_path / ".evolve" / "public" / "guideline" / "my-tip.md").read_text()
169+
content = (temp_project_dir / ".evolve" / "public" / "guideline" / "my-tip.md").read_text()
170170
assert "visibility: public" in content
171171

172-
def test_publish_rejects_path_traversal_in_entity_name(self, tmp_path):
173-
guideline_dir = tmp_path / ".evolve" / "entities" / "guideline"
172+
def test_publish_rejects_path_traversal_in_entity_name(self, temp_project_dir):
173+
guideline_dir = temp_project_dir / ".evolve" / "entities" / "guideline"
174174
guideline_dir.mkdir(parents=True)
175175
(guideline_dir / "tip.md").write_text("---\ntype: guideline\n---\n\nA tip.\n")
176176
result = run_script(
177177
PUBLISH_SCRIPT,
178-
project_dir=tmp_path,
178+
project_dir=temp_project_dir,
179179
args=["--entity", "../../etc/passwd"],
180-
evolve_dir=tmp_path / ".evolve",
180+
evolve_dir=temp_project_dir / ".evolve",
181181
expect_success=False,
182182
)
183183
assert result.returncode != 0
184184
assert "invalid entity name" in result.stderr
185185

186-
def test_subscribe_sync_and_unsubscribe_round_trip(self, tmp_path, local_repo):
187-
evolve_dir = tmp_path / ".evolve"
186+
def test_subscribe_sync_and_unsubscribe_round_trip(self, temp_project_dir, local_repo):
187+
evolve_dir = temp_project_dir / ".evolve"
188188

189189
run_script(
190190
SUBSCRIBE_SCRIPT,
191-
project_dir=tmp_path,
191+
project_dir=temp_project_dir,
192192
args=["--name", "alice", "--remote", str(local_repo["bare"]), "--branch", "main"],
193193
evolve_dir=evolve_dir,
194194
)
195195
assert (evolve_dir / "subscribed" / "alice").is_dir()
196196

197-
run_script(SYNC_SCRIPT, project_dir=tmp_path, evolve_dir=evolve_dir)
197+
run_script(SYNC_SCRIPT, project_dir=temp_project_dir, evolve_dir=evolve_dir)
198198
mirrored = evolve_dir / "entities" / "subscribed" / "alice" / "guideline" / "tip-one.md"
199199
assert mirrored.exists()
200200
assert "Always write tests." in mirrored.read_text()
201201

202202
run_script(
203203
UNSUBSCRIBE_SCRIPT,
204-
project_dir=tmp_path,
204+
project_dir=temp_project_dir,
205205
args=["--name", "alice"],
206206
evolve_dir=evolve_dir,
207207
)
208208
assert not (evolve_dir / "subscribed" / "alice").exists()
209209
assert not (evolve_dir / "entities" / "subscribed" / "alice").exists()
210210

211-
def test_subscribe_updates_config_and_rejects_duplicate(self, tmp_path, local_repo):
212-
evolve_dir = tmp_path / ".evolve"
211+
def test_subscribe_updates_config_and_rejects_duplicate(self, temp_project_dir, local_repo):
212+
evolve_dir = temp_project_dir / ".evolve"
213213
run_script(
214214
SUBSCRIBE_SCRIPT,
215-
project_dir=tmp_path,
215+
project_dir=temp_project_dir,
216216
args=["--name", "alice", "--remote", str(local_repo["bare"]), "--branch", "main"],
217217
evolve_dir=evolve_dir,
218218
)
219-
config_text = (tmp_path / "evolve.config.yaml").read_text()
219+
config_text = (temp_project_dir / "evolve.config.yaml").read_text()
220220
assert 'name: "alice"' in config_text
221221

222222
result = run_script(
223223
SUBSCRIBE_SCRIPT,
224-
project_dir=tmp_path,
224+
project_dir=temp_project_dir,
225225
args=["--name", "alice", "--remote", str(local_repo["bare"]), "--branch", "main"],
226226
evolve_dir=evolve_dir,
227227
expect_success=False,
228228
)
229229
assert result.returncode != 0
230230
assert "already exists" in result.stderr
231231

232-
def test_subscribe_rejects_path_traversal_in_name(self, tmp_path, local_repo):
232+
def test_subscribe_rejects_path_traversal_in_name(self, temp_project_dir, local_repo):
233233
result = run_script(
234234
SUBSCRIBE_SCRIPT,
235-
project_dir=tmp_path,
235+
project_dir=temp_project_dir,
236236
args=["--name", "../../evil", "--remote", str(local_repo["bare"]), "--branch", "main"],
237-
evolve_dir=tmp_path / ".evolve",
237+
evolve_dir=temp_project_dir / ".evolve",
238238
expect_success=False,
239239
)
240240
assert result.returncode != 0
241241
assert "invalid subscription name" in result.stderr
242242

243-
def test_unsubscribe_list_and_not_found(self, tmp_path, local_repo):
244-
evolve_dir = tmp_path / ".evolve"
243+
def test_unsubscribe_list_and_not_found(self, temp_project_dir, local_repo):
244+
evolve_dir = temp_project_dir / ".evolve"
245245
run_script(
246246
SUBSCRIBE_SCRIPT,
247-
project_dir=tmp_path,
247+
project_dir=temp_project_dir,
248248
args=["--name", "alice", "--remote", str(local_repo["bare"]), "--branch", "main"],
249249
evolve_dir=evolve_dir,
250250
)
251251
result = run_script(
252252
UNSUBSCRIBE_SCRIPT,
253-
project_dir=tmp_path,
253+
project_dir=temp_project_dir,
254254
args=["--list"],
255255
evolve_dir=evolve_dir,
256256
)
@@ -259,83 +259,83 @@ def test_unsubscribe_list_and_not_found(self, tmp_path, local_repo):
259259

260260
missing = run_script(
261261
UNSUBSCRIBE_SCRIPT,
262-
project_dir=tmp_path,
262+
project_dir=temp_project_dir,
263263
args=["--name", "missing"],
264264
evolve_dir=evolve_dir,
265265
expect_success=False,
266266
)
267267
assert missing.returncode != 0
268268
assert "not found" in missing.stderr
269269

270-
def test_unsubscribe_rejects_path_traversal_in_name(self, tmp_path, local_repo):
271-
evolve_dir = tmp_path / ".evolve"
270+
def test_unsubscribe_rejects_path_traversal_in_name(self, temp_project_dir, local_repo):
271+
evolve_dir = temp_project_dir / ".evolve"
272272
run_script(
273273
SUBSCRIBE_SCRIPT,
274-
project_dir=tmp_path,
274+
project_dir=temp_project_dir,
275275
args=["--name", "alice", "--remote", str(local_repo["bare"]), "--branch", "main"],
276276
evolve_dir=evolve_dir,
277277
)
278278
result = run_script(
279279
UNSUBSCRIBE_SCRIPT,
280-
project_dir=tmp_path,
280+
project_dir=temp_project_dir,
281281
args=["--name", "../../evil"],
282282
evolve_dir=evolve_dir,
283283
expect_success=False,
284284
)
285285
assert result.returncode != 0
286286
assert "invalid subscription name" in result.stderr
287287

288-
def test_sync_quiet_exits_cleanly_without_changes(self, tmp_path, local_repo):
289-
evolve_dir = tmp_path / ".evolve"
288+
def test_sync_quiet_exits_cleanly_without_changes(self, temp_project_dir, local_repo):
289+
evolve_dir = temp_project_dir / ".evolve"
290290
run_script(
291291
SUBSCRIBE_SCRIPT,
292-
project_dir=tmp_path,
292+
project_dir=temp_project_dir,
293293
args=["--name", "alice", "--remote", str(local_repo["bare"]), "--branch", "main"],
294294
evolve_dir=evolve_dir,
295295
)
296-
run_script(SYNC_SCRIPT, project_dir=tmp_path, evolve_dir=evolve_dir)
296+
run_script(SYNC_SCRIPT, project_dir=temp_project_dir, evolve_dir=evolve_dir)
297297
result = run_script(
298298
SYNC_SCRIPT,
299-
project_dir=tmp_path,
299+
project_dir=temp_project_dir,
300300
args=["--quiet"],
301301
evolve_dir=evolve_dir,
302302
expect_success=False,
303303
)
304304
assert result.returncode == 0
305305
assert result.stdout.strip() == ""
306306

307-
def test_sync_no_subscriptions_exits_cleanly(self, tmp_path):
307+
def test_sync_no_subscriptions_exits_cleanly(self, temp_project_dir):
308308
result = run_script(
309309
SYNC_SCRIPT,
310-
project_dir=tmp_path,
311-
evolve_dir=tmp_path / ".evolve",
310+
project_dir=temp_project_dir,
311+
evolve_dir=temp_project_dir / ".evolve",
312312
expect_success=False,
313313
)
314314
assert result.returncode == 0
315315
assert "No subscriptions" in result.stdout
316316
assert "evolve-lite:subscribe" in result.stdout
317317

318-
def test_sync_writes_audit_log(self, tmp_path, local_repo):
319-
evolve_dir = tmp_path / ".evolve"
318+
def test_sync_writes_audit_log(self, temp_project_dir, local_repo):
319+
evolve_dir = temp_project_dir / ".evolve"
320320
run_script(
321321
SUBSCRIBE_SCRIPT,
322-
project_dir=tmp_path,
322+
project_dir=temp_project_dir,
323323
args=["--name", "alice", "--remote", str(local_repo["bare"]), "--branch", "main"],
324324
evolve_dir=evolve_dir,
325325
)
326-
run_script(SYNC_SCRIPT, project_dir=tmp_path, evolve_dir=evolve_dir)
327-
actions = [json.loads(line)["action"] for line in (tmp_path / ".evolve" / "audit.log").read_text().splitlines() if line.strip()]
326+
run_script(SYNC_SCRIPT, project_dir=temp_project_dir, evolve_dir=evolve_dir)
327+
actions = [json.loads(line)["action"] for line in (temp_project_dir / ".evolve" / "audit.log").read_text().splitlines() if line.strip()]
328328
assert "sync" in actions
329329

330-
def test_sync_picks_up_new_entity_after_push(self, tmp_path, local_repo):
331-
evolve_dir = tmp_path / ".evolve"
330+
def test_sync_picks_up_new_entity_after_push(self, temp_project_dir, local_repo):
331+
evolve_dir = temp_project_dir / ".evolve"
332332
run_script(
333333
SUBSCRIBE_SCRIPT,
334-
project_dir=tmp_path,
334+
project_dir=temp_project_dir,
335335
args=["--name", "alice", "--remote", str(local_repo["bare"]), "--branch", "main"],
336336
evolve_dir=evolve_dir,
337337
)
338-
run_script(SYNC_SCRIPT, project_dir=tmp_path, evolve_dir=evolve_dir)
338+
run_script(SYNC_SCRIPT, project_dir=temp_project_dir, evolve_dir=evolve_dir)
339339

340340
git_env = local_repo["env"]
341341
new_entity = local_repo["work"] / "guideline" / "tip-two.md"
@@ -344,20 +344,20 @@ def test_sync_picks_up_new_entity_after_push(self, tmp_path, local_repo):
344344
subprocess.run(["git", "-C", str(local_repo["work"]), "commit", "-m", "add tip-two"], check=True, env=git_env)
345345
subprocess.run(["git", "-C", str(local_repo["work"]), "push", "origin", "main"], check=True, env=git_env)
346346

347-
run_script(SYNC_SCRIPT, project_dir=tmp_path, evolve_dir=evolve_dir)
347+
run_script(SYNC_SCRIPT, project_dir=temp_project_dir, evolve_dir=evolve_dir)
348348
mirrored = evolve_dir / "entities" / "subscribed" / "alice" / "guideline" / "tip-two.md"
349349
assert mirrored.exists()
350350
assert "Delete dead code promptly." in mirrored.read_text()
351351

352-
def test_sync_removed_entity_disappears_after_sync(self, tmp_path, local_repo):
353-
evolve_dir = tmp_path / ".evolve"
352+
def test_sync_removed_entity_disappears_after_sync(self, temp_project_dir, local_repo):
353+
evolve_dir = temp_project_dir / ".evolve"
354354
run_script(
355355
SUBSCRIBE_SCRIPT,
356-
project_dir=tmp_path,
356+
project_dir=temp_project_dir,
357357
args=["--name", "alice", "--remote", str(local_repo["bare"]), "--branch", "main"],
358358
evolve_dir=evolve_dir,
359359
)
360-
run_script(SYNC_SCRIPT, project_dir=tmp_path, evolve_dir=evolve_dir)
360+
run_script(SYNC_SCRIPT, project_dir=temp_project_dir, evolve_dir=evolve_dir)
361361

362362
tip_one = evolve_dir / "entities" / "subscribed" / "alice" / "guideline" / "tip-one.md"
363363
assert tip_one.exists()
@@ -367,5 +367,5 @@ def test_sync_removed_entity_disappears_after_sync(self, tmp_path, local_repo):
367367
subprocess.run(["git", "-C", str(local_repo["work"]), "commit", "-m", "remove tip-one"], check=True, env=git_env)
368368
subprocess.run(["git", "-C", str(local_repo["work"]), "push", "origin", "main"], check=True, env=git_env)
369369

370-
run_script(SYNC_SCRIPT, project_dir=tmp_path, evolve_dir=evolve_dir)
370+
run_script(SYNC_SCRIPT, project_dir=temp_project_dir, evolve_dir=evolve_dir)
371371
assert not tip_one.exists()

0 commit comments

Comments
 (0)