kiln_ai.test_pytest_test_output

 1from pathlib import Path
 2from unittest.mock import Mock, patch
 3
 4import kiln_ai.pytest_test_output as pytest_test_output
 5from kiln_ai.pytest_test_output import make_test_output_dir
 6
 7
 8def test_test_output_root():
 9    root = pytest_test_output.test_output_root()
10    assert isinstance(root, Path)
11    assert root.name == "test_output"
12
13
14def test_make_test_output_dir_basic(tmp_path):
15    with patch("kiln_ai.pytest_test_output.test_output_root", lambda: tmp_path):
16        request = Mock()
17        request.node.name = "test_example"
18        request.node.callspec = None
19
20        out_dir = make_test_output_dir(request)
21    assert out_dir.exists()
22    assert out_dir.is_dir()
23    assert "test_example" in str(out_dir)
24    assert "default" in str(out_dir)
25
26
27def test_make_test_output_dir_with_param_id(tmp_path):
28    with patch("kiln_ai.pytest_test_output.test_output_root", lambda: tmp_path):
29        request = Mock()
30        request.node.name = "test_param[case1]"
31        request.node.callspec.id = "my-param"
32
33        out_dir = make_test_output_dir(request)
34    assert out_dir.exists()
35    assert "my-param" in str(out_dir)
36
37
38def test_make_test_output_dir_sanitizes_names(tmp_path):
39    with patch("kiln_ai.pytest_test_output.test_output_root", lambda: tmp_path):
40        request = Mock()
41        request.node.name = "test_with spaces/and:special!chars"
42        request.node.callspec.id = "param with spaces"
43
44        out_dir = make_test_output_dir(request)
45    assert out_dir.exists()
46    # Special chars replaced with underscores
47    assert " " not in out_dir.parts[-3]
48    assert "/" not in out_dir.parts[-3]
49
50
51def test_make_test_output_dir_node_without_callspec(tmp_path):
52    with patch("kiln_ai.pytest_test_output.test_output_root", lambda: tmp_path):
53
54        class NodeWithoutCallspec:
55            name = "test_no_callspec"
56
57        request = Mock()
58        request.node = NodeWithoutCallspec()
59
60        out_dir = make_test_output_dir(request)
61    assert out_dir.exists()
62    assert "default" in str(out_dir)
63
64
65def test_make_test_output_dir_callspec_without_id(tmp_path):
66    with patch("kiln_ai.pytest_test_output.test_output_root", lambda: tmp_path):
67        callspec = Mock()
68        callspec.id = None
69
70        request = Mock()
71        request.node.name = "test_param[case1]"
72        request.node.callspec = callspec
73
74        out_dir = make_test_output_dir(request)
75    assert out_dir.exists()
76    assert "default" in str(out_dir)
def test_test_output_root():
 9def test_test_output_root():
10    root = pytest_test_output.test_output_root()
11    assert isinstance(root, Path)
12    assert root.name == "test_output"
def test_make_test_output_dir_basic(tmp_path):
15def test_make_test_output_dir_basic(tmp_path):
16    with patch("kiln_ai.pytest_test_output.test_output_root", lambda: tmp_path):
17        request = Mock()
18        request.node.name = "test_example"
19        request.node.callspec = None
20
21        out_dir = make_test_output_dir(request)
22    assert out_dir.exists()
23    assert out_dir.is_dir()
24    assert "test_example" in str(out_dir)
25    assert "default" in str(out_dir)
def test_make_test_output_dir_with_param_id(tmp_path):
28def test_make_test_output_dir_with_param_id(tmp_path):
29    with patch("kiln_ai.pytest_test_output.test_output_root", lambda: tmp_path):
30        request = Mock()
31        request.node.name = "test_param[case1]"
32        request.node.callspec.id = "my-param"
33
34        out_dir = make_test_output_dir(request)
35    assert out_dir.exists()
36    assert "my-param" in str(out_dir)
def test_make_test_output_dir_sanitizes_names(tmp_path):
39def test_make_test_output_dir_sanitizes_names(tmp_path):
40    with patch("kiln_ai.pytest_test_output.test_output_root", lambda: tmp_path):
41        request = Mock()
42        request.node.name = "test_with spaces/and:special!chars"
43        request.node.callspec.id = "param with spaces"
44
45        out_dir = make_test_output_dir(request)
46    assert out_dir.exists()
47    # Special chars replaced with underscores
48    assert " " not in out_dir.parts[-3]
49    assert "/" not in out_dir.parts[-3]
def test_make_test_output_dir_node_without_callspec(tmp_path):
52def test_make_test_output_dir_node_without_callspec(tmp_path):
53    with patch("kiln_ai.pytest_test_output.test_output_root", lambda: tmp_path):
54
55        class NodeWithoutCallspec:
56            name = "test_no_callspec"
57
58        request = Mock()
59        request.node = NodeWithoutCallspec()
60
61        out_dir = make_test_output_dir(request)
62    assert out_dir.exists()
63    assert "default" in str(out_dir)
def test_make_test_output_dir_callspec_without_id(tmp_path):
66def test_make_test_output_dir_callspec_without_id(tmp_path):
67    with patch("kiln_ai.pytest_test_output.test_output_root", lambda: tmp_path):
68        callspec = Mock()
69        callspec.id = None
70
71        request = Mock()
72        request.node.name = "test_param[case1]"
73        request.node.callspec = callspec
74
75        out_dir = make_test_output_dir(request)
76    assert out_dir.exists()
77    assert "default" in str(out_dir)