Skip to content

Commit ae372a2

Browse files
committed
test(recorded): handle refresh edge cases
1 parent 653a792 commit ae372a2

3 files changed

Lines changed: 18 additions & 4 deletions

File tree

tests/recorded/cassette.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ def cassette_with_parsed_bodies(cassette: dict[str, Any]) -> dict[str, Any]:
180180
without changing stream semantics.
181181
"""
182182
cassette = deepcopy(cassette)
183-
for interaction in cassette.get("interactions", []):
183+
for interaction in cassette.get("interactions") or []:
184184
request = interaction.get("request", {})
185185
request_body = request.get("body")
186186
request_data = _json_body(request_body)
@@ -209,7 +209,7 @@ def cassette_with_parsed_bodies(cassette: dict[str, Any]) -> dict[str, Any]:
209209
def cassette_with_rehydrated_bodies(cassette: dict[str, Any]) -> dict[str, Any]:
210210
"""Convert readable cassette bodies back to raw strings for VCR replay."""
211211
cassette = deepcopy(cassette)
212-
for interaction in cassette.get("interactions", []):
212+
for interaction in cassette.get("interactions") or []:
213213
request = interaction.get("request", {})
214214
if "parsed_body" in request:
215215
request["body"] = _json_body_text(request["parsed_body"])

tests/recorded/test_cassette_sanitization.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
recorded_body_matcher,
3232
)
3333
from tests.recorded.sanitization import FILTERED_HEADERS
34-
from tests.recorded.utils import api_key_for_record_mode
34+
from tests.recorded.utils import api_key_for_record_mode, set_api_key_for_record_mode
3535

3636
pytestmark = [pytest.mark.recorded]
3737

@@ -124,6 +124,13 @@ def test_recorded_cassette_serializer_keeps_json_bodies_readable():
124124
assert ReadableYamlSerializer.deserialize(text)["interactions"][0]["response"]["body"]["string"].startswith("{")
125125

126126

127+
def test_recorded_cassette_serializer_handles_null_interactions():
128+
cassette = {"version": 1, "interactions": None}
129+
130+
assert yaml.safe_load(ReadableYamlSerializer.serialize(cassette)) == cassette
131+
assert ReadableYamlSerializer.deserialize("version: 1\ninteractions:\n") == cassette
132+
133+
127134
def test_recorded_cassette_serializer_redacts_access_tokens_from_parsed_bodies():
128135
request = Request(
129136
method="POST",
@@ -513,6 +520,13 @@ def test_recorded_refresh_uses_api_key_without_live_mode_gate(monkeypatch):
513520
assert api_key_for_record_mode("OPENAI_API_KEY", "dummy-key", "rewrite") == "real-key"
514521

515522

523+
def test_recorded_refresh_fixture_returns_selected_api_key(monkeypatch):
524+
monkeypatch.setenv("OPENAI_API_KEY", "real-key")
525+
526+
assert set_api_key_for_record_mode(monkeypatch, "OPENAI_API_KEY", "dummy-key", "rewrite") == "real-key"
527+
assert set_api_key_for_record_mode(monkeypatch, "OPENAI_API_KEY", "dummy-key", "none") == "dummy-key"
528+
529+
516530
def test_recorded_body_matcher_compares_sanitized_json_bodies():
517531
cassette_request = Request(
518532
method="POST",

tests/recorded/utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,4 @@ def set_api_key_for_record_mode(
3737
) -> str:
3838
value = api_key_for_record_mode(env_name, dummy_value, record_mode)
3939
monkeypatch.setenv(env_name, value)
40-
return dummy_value
40+
return value

0 commit comments

Comments
 (0)