Skip to content

Commit b57bc31

Browse files
committed
test: cover audit-only context and nested model fallback
Signed-off-by: mday-io <mdaytn@gmail.com>
1 parent ca1b1e6 commit b57bc31

1 file changed

Lines changed: 104 additions & 0 deletions

File tree

‎tests/core/test_query_execution_context_observer.py‎

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,55 @@ def observer(event, facts, error):
120120
assert all(event[1]["batch_index"] == 0 for event in model_events)
121121

122122

123+
@pytest.mark.parametrize(("action_name", "audit_only"), [("audit_only", False), ("evaluate", True)])
124+
def test_audit_only_context_tags_nested_audits_and_restores(
125+
action_name: str,
126+
audit_only: bool,
127+
make_mocked_engine_adapter: Callable[..., EngineAdapter],
128+
):
129+
adapter = make_mocked_engine_adapter(EngineAdapter, query_execution_context=True)
130+
observed = []
131+
132+
def observer(event, facts, error):
133+
if facts["kind"] == "model":
134+
observed.append((event, facts["action"], get_query_execution_context()))
135+
136+
console = SimpleNamespace(get_execution_observer=lambda: observer)
137+
with console_observer_scope(console, query_execution_context=True):
138+
with action(
139+
"model",
140+
action_name,
141+
snapshot=_snapshot(),
142+
interval=_interval(1),
143+
batch_index=0,
144+
audit_only=audit_only,
145+
):
146+
outer = get_query_execution_context()
147+
assert outer is not None
148+
adapter.execute("SELECT audited model")
149+
model_sql = _last_sql(adapter)
150+
with action("audit", "audit", audit_name="not_null"):
151+
adapter.execute("SELECT audit")
152+
audit_sql = _last_sql(adapter)
153+
assert get_query_execution_context() == outer
154+
assert get_query_execution_context() is None
155+
156+
evaluation = outer.evaluation
157+
assert evaluation is not None
158+
assert evaluation.operation_type.value == "audit"
159+
model_payload = _payload(model_sql)
160+
audit_payload = _payload(audit_sql)
161+
assert model_payload is not None
162+
assert audit_payload is not None
163+
assert model_payload["operation"]["id"] == evaluation.evaluation_id
164+
assert audit_payload["operation"]["id"] == evaluation.evaluation_id
165+
assert model_payload["operation"]["type"] == "audit"
166+
assert model_payload["query"] == {"phase": "audit", "role": "audit"}
167+
assert audit_payload["query"] == {"phase": "audit", "role": "audit"}
168+
assert [event for event, _, _ in observed] == ["start", "finish"]
169+
assert all(context == outer for _, _, context in observed)
170+
171+
123172
def test_explicit_disabled_scope_suppresses_transport_then_outer_context_resumes(
124173
make_mocked_engine_adapter: Callable[..., EngineAdapter],
125174
):
@@ -162,6 +211,61 @@ def test_explicit_disabled_scope_suppresses_transport_then_outer_context_resumes
162211
assert resumed["operation"]["id"] == outer.evaluation.evaluation_id
163212

164213

214+
def test_nonmodel_and_malformed_nested_model_clear_then_restore_outer_context(
215+
make_mocked_engine_adapter: Callable[..., EngineAdapter],
216+
):
217+
adapter = make_mocked_engine_adapter(EngineAdapter, query_execution_context=True)
218+
console = SimpleNamespace(get_execution_observer=lambda: None)
219+
with console_observer_scope(console, query_execution_context=True):
220+
with action(
221+
"model",
222+
"evaluate",
223+
snapshot=_snapshot(),
224+
interval=_interval(1),
225+
batch_index=0,
226+
):
227+
outer = get_query_execution_context()
228+
assert outer is not None
229+
230+
with action(
231+
"model",
232+
"evaluate",
233+
snapshot=SimpleNamespace(is_model=False),
234+
interval=_interval(2),
235+
batch_index=1,
236+
):
237+
assert get_query_execution_context() is None
238+
adapter.execute("SELECT nonmodel")
239+
nonmodel_sql = _last_sql(adapter)
240+
assert get_query_execution_context() == outer
241+
242+
with action(
243+
"model",
244+
"evaluate",
245+
snapshot=_snapshot("analytics.malformed"),
246+
interval=_interval(3),
247+
batch_index=-1,
248+
):
249+
assert get_query_execution_context() is None
250+
adapter.execute("SELECT malformed model")
251+
malformed_sql = _last_sql(adapter)
252+
assert get_query_execution_context() == outer
253+
254+
with action("stage", "unclassified"):
255+
assert get_query_execution_context() == outer
256+
adapter.execute("SELECT outer context")
257+
outer_sql = _last_sql(adapter)
258+
259+
assert get_query_execution_context() is None
260+
261+
assert _payload(nonmodel_sql) is None
262+
assert _payload(malformed_sql) is None
263+
outer_payload = _payload(outer_sql)
264+
assert outer_payload is not None
265+
assert outer.evaluation is not None
266+
assert outer_payload["operation"]["id"] == outer.evaluation.evaluation_id
267+
268+
165269
@pytest.mark.parametrize("provider_kind", ["value", "none"])
166270
def test_custom_provider_remains_authoritative(
167271
provider_kind: str,

0 commit comments

Comments
 (0)