| 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 |