1- from buildkite_test_collector .pytest_plugin import BuildkitePlugin
1+ import json
2+
23from buildkite_test_collector .collector .payload import Payload
3- from pathlib import Path
4+ from buildkite_test_collector . pytest_plugin import BuildkitePlugin
45
5- import json
66
77def test_runtest_logstart_with_unstarted_payload (fake_env ):
88 payload = Payload .init (fake_env )
@@ -15,14 +15,124 @@ def test_runtest_logstart_with_unstarted_payload(fake_env):
1515 assert plugin .payload .started_at is not None
1616
1717
18- def test_save_json_payload (fake_env , tmp_path , successful_test ):
18+ def test_save_json_payload_without_merge (fake_env , tmp_path , successful_test ):
19+ payload = Payload .init (fake_env )
20+ payload = Payload .started (payload )
21+ payload = payload .push_test_data (successful_test )
22+
23+ plugin = BuildkitePlugin (payload )
24+
25+ path = tmp_path / "result.json"
26+
27+ # Create an existing file with some data
28+ existing_data = [{"existing" : "data" }]
29+ path .write_text (json .dumps (existing_data ))
30+
31+ # Save without merge option
32+ plugin .save_payload_as_json (path , merge = False )
33+
34+ # Check if the data was not merged
35+ expected_data = [successful_test .as_json (payload .started_at )]
36+ assert json .loads (path .read_text ()) == expected_data
37+
38+
39+ def test_save_json_payload_with_merge (fake_env , tmp_path , successful_test ):
1940 payload = Payload .init (fake_env )
2041 payload = Payload .started (payload )
2142 payload = payload .push_test_data (successful_test )
2243
2344 plugin = BuildkitePlugin (payload )
2445
2546 path = tmp_path / "result.json"
26- plugin .save_payload_as_json (path )
2747
28- assert path .read_text () == json .dumps ([successful_test .as_json (payload .started_at )])
48+ # Create an existing file with some data
49+ existing_data = [{"existing" : "data" }]
50+ path .write_text (json .dumps (existing_data ))
51+
52+ # Save with merge option
53+ plugin .save_payload_as_json (path , merge = True )
54+
55+ # Check if the data was merged
56+ expected_data = existing_data + [successful_test .as_json (payload .started_at )]
57+ assert json .loads (path .read_text ()) == expected_data
58+
59+
60+ def test_save_json_payload_with_non_existent_file (fake_env , tmp_path , successful_test ):
61+ payload = Payload .init (fake_env )
62+ payload = Payload .started (payload )
63+ payload = payload .push_test_data (successful_test )
64+
65+ plugin = BuildkitePlugin (payload )
66+
67+ path = tmp_path / "non_existent.json"
68+
69+ # Ensure the file does not exist
70+ assert not path .exists ()
71+
72+ # Save with merge option
73+ plugin .save_payload_as_json (path , merge = True )
74+
75+ # Check if the data was saved correctly
76+ expected_data = [successful_test .as_json (payload .started_at )]
77+ assert json .loads (path .read_text ()) == expected_data
78+
79+
80+ def test_save_json_payload_with_empty_file (fake_env , tmp_path , successful_test ):
81+ payload = Payload .init (fake_env )
82+ payload = Payload .started (payload )
83+ payload = payload .push_test_data (successful_test )
84+
85+ plugin = BuildkitePlugin (payload )
86+
87+ path = tmp_path / "empty.json"
88+
89+ # Create an empty file
90+ path .write_text ("" )
91+
92+ # Save with merge option
93+ plugin .save_payload_as_json (path , merge = True )
94+
95+ # Check if the data was saved correctly
96+ expected_data = [successful_test .as_json (payload .started_at )]
97+ assert json .loads (path .read_text ()) == expected_data
98+
99+
100+ def test_save_json_payload_with_invalid_file (fake_env , tmp_path , successful_test ):
101+ payload = Payload .init (fake_env )
102+ payload = Payload .started (payload )
103+ payload = payload .push_test_data (successful_test )
104+
105+ plugin = BuildkitePlugin (payload )
106+
107+ path = tmp_path / "invalid.json"
108+
109+ # Create a file with invalid JSON
110+ path .write_text ("{invalid: json}" )
111+
112+ # Save with merge option
113+ plugin .save_payload_as_json (path , merge = True )
114+
115+ # Check if the data was saved correctly
116+ expected_data = [successful_test .as_json (payload .started_at )]
117+ assert json .loads (path .read_text ()) == expected_data
118+
119+
120+ def test_save_json_payload_with_large_data (fake_env , tmp_path , successful_test ):
121+ payload = Payload .init (fake_env )
122+ payload = Payload .started (payload )
123+ payload = payload .push_test_data (successful_test )
124+
125+ plugin = BuildkitePlugin (payload )
126+
127+ path = tmp_path / "large_data.json"
128+
129+ # Create an existing file with a large amount of data
130+ existing_data = [{"test" : f"data_{ i } " } for i in range (1000 )]
131+ path .write_text (json .dumps (existing_data ))
132+
133+ # Save with merge option
134+ plugin .save_payload_as_json (path , merge = True )
135+
136+ # Check if the data was merged correctly
137+ expected_data = existing_data + [successful_test .as_json (payload .started_at )]
138+ assert json .loads (path .read_text ()) == expected_data
0 commit comments