main
py 81 lines 2.71 KB
Raw
1 import copy
2
3 from helpers import extension, settings
4
5
6 def test_settings_snapshot_is_limited_to_one_prompt(monkeypatch):
7 configured = settings.get_default_settings()
8 configured["api_keys"] = {"provider": "secret"}
9 versions = iter(["first", "second", "third", "fourth"])
10 calls = 0
11
12 def defaults():
13 nonlocal calls
14 calls += 1
15 result = copy.deepcopy(configured)
16 result["version"] = next(versions)
17 return result
18
19 monkeypatch.setattr(settings, "_settings", configured)
20 monkeypatch.setattr(settings, "_read_settings_file", lambda: configured)
21 monkeypatch.setattr(settings, "get_default_settings", defaults)
22 monkeypatch.setattr(settings, "_load_sensitive_settings", lambda _value: None)
23
24 token = settings.begin_prompt_settings_snapshot()
25 try:
26 configured["workdir_show"] = False
27 first = settings.get_settings_for_prompt()
28 second = settings.get_settings_for_prompt()
29
30 assert calls == 1
31 assert first == second
32 assert first["workdir_show"] is True
33 assert first is not second
34 assert first["api_keys"] is not second["api_keys"]
35
36 first["api_keys"]["provider"] = "masked"
37 assert settings.get_settings_for_prompt()["api_keys"]["provider"] == "secret"
38
39 current = settings.get_settings()
40 assert current["version"] == "second"
41 assert current["workdir_show"] is False
42 assert settings.get_settings_for_prompt()["workdir_show"] is True
43
44 reloaded = settings.reload_settings()
45 assert reloaded["version"] == "third"
46 assert reloaded["workdir_show"] is False
47 assert settings.get_settings_for_prompt() == reloaded
48 finally:
49 settings.end_prompt_settings_snapshot(token)
50
51 refreshed = settings.get_settings()
52 assert refreshed["workdir_show"] is False
53 assert refreshed["version"] == "fourth"
54 assert calls == 4
55
56
57 def test_prompt_snapshot_hooks_are_registered_and_paired():
58 start = next(
59 cls
60 for cls in extension._get_extension_classes( # type: ignore[attr-defined]
61 "_functions/agent/Agent/prepare_prompt/start"
62 )
63 if cls.__name__ == "SnapshotPromptSettings"
64 )
65 end = next(
66 cls
67 for cls in extension._get_extension_classes( # type: ignore[attr-defined]
68 "_functions/agent/Agent/prepare_prompt/end"
69 )
70 if cls.__name__ == "RestorePromptSettings"
71 )
72 previous = settings._prompt_settings_snapshot.get()
73 data = {}
74
75 start(agent=None).execute(data=data)
76 try:
77 assert settings._prompt_settings_snapshot.get() is not None
78 finally:
79 end(agent=None).execute(data=data)
80
81 assert settings._prompt_settings_snapshot.get() is previous