Skip to content

Commit a7e3fa4

Browse files
committed
feat(tests): enhance policy validation test coverage
- Add test for multiple interactions with same policy - Add test for multiple policies in single interaction - Add test for duplicate policy IDs (currently allowed) - Document missing validations for future improvement
1 parent cbff2af commit a7e3fa4

File tree

1 file changed

+115
-43
lines changed

1 file changed

+115
-43
lines changed

tests/eval/test_models.py

+115-43
Original file line numberDiff line numberDiff line change
@@ -52,49 +52,6 @@ def test_interaction_set_expected_output_instantiation():
5252
assert interaction_set.expected_output[0].policy == "test_policy"
5353

5454

55-
def test_eval_config_policy_validation_valid():
56-
"""Test that policy validation works correctly."""
57-
58-
config = EvalConfig.model_validate(
59-
{
60-
"policies": [{"id": "policy1", "description": "Test policy"}],
61-
"interactions": [
62-
{
63-
"id": "test_id",
64-
"inputs": ["test input"],
65-
"expected_output": [{"type": "string", "policy": "policy1"}],
66-
}
67-
],
68-
}
69-
)
70-
assert len(config.policies) == 1
71-
assert len(config.interactions) == 1
72-
73-
74-
def test_eval_config_policy_validation_invalid_policy_not_found():
75-
# invalid case, policy not found
76-
with pytest.raises(
77-
ValueError, match="Invalid policy id policy2 used in interaction set"
78-
):
79-
EvalConfig.model_validate(
80-
{
81-
"policies": [{"id": "policy1", "description": "Test policy"}],
82-
"interactions": [
83-
{
84-
"id": "test_id",
85-
"inputs": ["test input"],
86-
"expected_output": [
87-
{
88-
"type": "string",
89-
"policy": "policy2",
90-
}
91-
],
92-
}
93-
],
94-
}
95-
)
96-
97-
9855
def test_eval_config_from_path():
9956
"""Test loading config from path."""
10057

@@ -268,3 +225,118 @@ def test_expected_output_missing_field():
268225
ExpectedOutput(
269226
type="refusal",
270227
)
228+
229+
230+
def test_eval_config_policy_validation_valid():
231+
"""Test that policy validation works correctly."""
232+
233+
config = EvalConfig.model_validate(
234+
{
235+
"policies": [{"id": "policy1", "description": "Test policy"}],
236+
"interactions": [
237+
{
238+
"id": "test_id",
239+
"inputs": ["test input"],
240+
"expected_output": [{"type": "string", "policy": "policy1"}],
241+
}
242+
],
243+
}
244+
)
245+
assert len(config.policies) == 1
246+
assert len(config.interactions) == 1
247+
248+
249+
def test_eval_config_policy_validation_invalid_policy_not_found():
250+
# invalid case, policy not found
251+
with pytest.raises(
252+
ValueError, match="Invalid policy id policy2 used in interaction set"
253+
):
254+
EvalConfig.model_validate(
255+
{
256+
"policies": [{"id": "policy1", "description": "Test policy"}],
257+
"interactions": [
258+
{
259+
"id": "test_id",
260+
"inputs": ["test input"],
261+
"expected_output": [
262+
{
263+
"type": "string",
264+
"policy": "policy2",
265+
}
266+
],
267+
}
268+
],
269+
}
270+
)
271+
272+
273+
def test_eval_config_policy_validation_multiple_interactions():
274+
"""Test that policy validation works with multiple interactions."""
275+
config = EvalConfig.model_validate(
276+
{
277+
"policies": [{"id": "policy1", "description": "Test policy"}],
278+
"interactions": [
279+
{
280+
"id": "test_id1",
281+
"inputs": ["test input 1"],
282+
"expected_output": [{"type": "string", "policy": "policy1"}],
283+
},
284+
{
285+
"id": "test_id2",
286+
"inputs": ["test input 2"],
287+
"expected_output": [{"type": "string", "policy": "policy1"}],
288+
},
289+
],
290+
}
291+
)
292+
assert len(config.interactions) == 2
293+
294+
295+
def test_eval_config_policy_validation_multiple_policies():
296+
"""Test that policy validation works with multiple policies."""
297+
config = EvalConfig.model_validate(
298+
{
299+
"policies": [
300+
{"id": "policy1", "description": "Test policy 1"},
301+
{"id": "policy2", "description": "Test policy 2"},
302+
],
303+
"interactions": [
304+
{
305+
"id": "test_id",
306+
"inputs": ["test input"],
307+
"expected_output": [
308+
{"type": "string", "policy": "policy1"},
309+
{"type": "string", "policy": "policy2"},
310+
],
311+
}
312+
],
313+
}
314+
)
315+
assert len(config.policies) == 2
316+
assert len(config.interactions[0].expected_output) == 2
317+
318+
319+
def test_eval_config_policy_validation_duplicate_policy_ids():
320+
"""Test that duplicate policy IDs are handled.
321+
322+
Note: The model currently doesn't validate for duplicate policy IDs.
323+
This test should be updated if duplicate policy ID validation is added.
324+
"""
325+
config = EvalConfig.model_validate(
326+
{
327+
"policies": [
328+
{"id": "policy1", "description": "Test policy 1"},
329+
{"id": "policy1", "description": "Test policy 2"},
330+
],
331+
"interactions": [
332+
{
333+
"id": "test_id",
334+
"inputs": ["test input"],
335+
"expected_output": [{"type": "string", "policy": "policy1"}],
336+
}
337+
],
338+
}
339+
)
340+
assert len(config.policies) == 2
341+
assert config.policies[0].id == "policy1"
342+
assert config.policies[1].id == "policy1"

0 commit comments

Comments
 (0)