Skip to content

Commit d3a4509

Browse files
committed
fix: address feedback
1 parent 50878e5 commit d3a4509

8 files changed

+117
-59
lines changed

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,5 @@ dev-dependencies = [
2121
"pytest-cov>=6.0.0",
2222
"pytest-reportlog>=0.4.0",
2323
"maturin>=1.7.4",
24+
"pytest-insta>=0.3.0",
2425
]

src/junit.rs

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use anyhow::{anyhow, Context};
1+
use anyhow::Context;
22
use pyo3::prelude::*;
33
use std::collections::HashSet;
44

@@ -148,13 +148,13 @@ pub fn use_reader(
148148
b"skipped" => {
149149
let testrun = saved_testrun
150150
.as_mut()
151-
.ok_or_else(|| anyhow!("Error accessing saved testrun"))?;
151+
.context("Error accessing saved testrun")?;
152152
testrun.outcome = Outcome::Skip;
153153
}
154154
b"error" => {
155155
let testrun = saved_testrun
156156
.as_mut()
157-
.ok_or_else(|| anyhow!("Error accessing saved testrun"))?;
157+
.context("Error accessing saved testrun")?;
158158
testrun.outcome = Outcome::Error;
159159

160160
testrun.failure_message = get_attribute(&e, "message")?
@@ -165,7 +165,7 @@ pub fn use_reader(
165165
b"failure" => {
166166
let testrun = saved_testrun
167167
.as_mut()
168-
.ok_or_else(|| anyhow!("Error accessing saved testrun"))?;
168+
.context("Error accessing saved testrun")?;
169169
testrun.outcome = Outcome::Failure;
170170

171171
testrun.failure_message = get_attribute(&e, "message")?
@@ -185,11 +185,9 @@ pub fn use_reader(
185185
},
186186
Event::End(e) => match e.name().as_ref() {
187187
b"testcase" => {
188-
let testrun = saved_testrun.take().ok_or_else(|| {
189-
anyhow!(
190-
"Met testcase closing tag without first meeting testcase opening tag",
191-
)
192-
})?;
188+
let testrun = saved_testrun.take().context(
189+
"Met testcase closing tag without first meeting testcase opening tag",
190+
)?;
193191
testruns.push(testrun);
194192
}
195193
b"failure" => in_failure = false,
@@ -220,7 +218,7 @@ pub fn use_reader(
220218
b"failure" => {
221219
let testrun = saved_testrun
222220
.as_mut()
223-
.ok_or_else(|| anyhow!("Error accessing saved testrun"))?;
221+
.context("Error accessing saved testrun")?;
224222
testrun.outcome = Outcome::Failure;
225223

226224
testrun.failure_message = get_attribute(&e, "message")?
@@ -229,13 +227,13 @@ pub fn use_reader(
229227
b"skipped" => {
230228
let testrun = saved_testrun
231229
.as_mut()
232-
.ok_or_else(|| anyhow!("Error accessing saved testrun"))?;
230+
.context("Error accessing saved testrun")?;
233231
testrun.outcome = Outcome::Skip;
234232
}
235233
b"error" => {
236234
let testrun = saved_testrun
237235
.as_mut()
238-
.ok_or_else(|| anyhow!("Error accessing saved testrun"))?;
236+
.context("Error accessing saved testrun")?;
239237
testrun.outcome = Outcome::Error;
240238

241239
testrun.failure_message = get_attribute(&e, "message")?
@@ -247,7 +245,7 @@ pub fn use_reader(
247245
if in_failure || in_error {
248246
let testrun = saved_testrun
249247
.as_mut()
250-
.ok_or_else(|| anyhow!("Error accessing saved testrun"))?;
248+
.context("Error accessing saved testrun")?;
251249

252250
xml_failure_message.inplace_trim_end();
253251
xml_failure_message.inplace_trim_start();

src/raw_upload.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,9 +113,10 @@ mod tests {
113113
let base64_data = BASE64_STANDARD.encode(compressed);
114114
let upload_json = format!(
115115
r#"{{"network": [], "test_results_files": [{{"filename": "{}", "format": "base64+compressed", "data": "{}"}}]}}"#,
116-
filename, base64_data,
116+
filename.split('/').last().unwrap(),
117+
base64_data,
117118
);
118-
upload_json.as_bytes().to_vec()
119+
upload_json.into()
119120
}
120121

121122
#[test]

src/snapshots/test_results_parser__raw_upload__tests__parse_raw_upload_success@error.xml.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ source: src/raw_upload.rs
33
expression: e.to_string()
44
input_file: tests/error.xml
55
---
6-
"Error parsing JUnit XML in /Users/josephsawaya/dev/codecov/test-results-parser/tests/error.xml at 8:24"
6+
"Error parsing JUnit XML in error.xml at 8:24"
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# path=junit.xml
2+
<?xml version="1.0" encoding="utf-8"?><testsuites><testsuite name="pytest" errors="0" failures="1" skipped="0" tests="2" time="0.186" timestamp="2023-11-10T12:32:56.675324" hostname="VFHNWJDWH9.local"><testcase classname="tests.test_parsers.TestParsers" name="test_junit[junit.xml--True]" time="0.001"><failure message="AssertionError: assert [{'duration': '0.010', 'name': 'tests.test_parsers.TestParsers.test_junit[junit.xml-]', 'outcome': 'failure'}, {'duration': '0.063', 'name': 'tests.test_parsers.TestParsers.test_junit[jest-junit.xml-]', 'outcome': 'pass'}] == ''">self = &lt;test_parsers.TestParsers object at 0x102182d10&gt;, filename = 'junit.xml', expected = '', check = True
3+
4+
@pytest.mark.parametrize(
5+
"filename,expected,check",
6+
[("junit.xml", "", True), ("jest-junit.xml", "", False)],
7+
)
8+
def test_junit(self, filename, expected, check):
9+
with open(filename) as f:
10+
junit_string = f.read()
11+
res = parse_junit_xml(junit_string)
12+
print(res)
13+
if check:
14+
&gt; assert res == expected
15+
E AssertionError: assert [{'duration': '0.010', 'name': 'tests.test_parsers.TestParsers.test_junit[junit.xml-]', 'outcome': 'failure'}, {'duration': '0.063', 'name': 'tests.test_parsers.TestParsers.test_junit[jest-junit.xml-]', 'outcome': 'pass'}] == ''
16+
17+
tests/test_parsers.py:16: AssertionError</failure></testcase><testcase classname="tests.test_parsers.TestParsers" name="test_junit[jest-junit.xml--False]" time="0.064" /></testsuite></testsuites>
18+
<<<<<< EOF
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
[
2+
{
3+
"framework": "Pytest",
4+
"testruns": [
5+
{
6+
"name": "test_junit[junit.xml--True]",
7+
"classname": "tests.test_parsers.TestParsers",
8+
"duration": 0.001,
9+
"outcome": "failure",
10+
"testsuite": "pytest",
11+
"failure_message": "self = <test_parsers.TestParsers object at 0x102182d10>, filename = 'junit.xml', expected = '', check = True\n\n @pytest.mark.parametrize(\n \"filename,expected,check\",\n [(\"junit.xml\", \"\", True), (\"jest-junit.xml\", \"\", False)],\n )\n def test_junit(self, filename, expected, check):\n with open(filename) as f:\n junit_string = f.read()\n res = parse_junit_xml(junit_string)\n print(res)\n if check:\n> assert res == expected\nE AssertionError: assert [{'duration': '0.010', 'name': 'tests.test_parsers.TestParsers.test_junit[junit.xml-]', 'outcome': 'failure'}, {'duration': '0.063', 'name': 'tests.test_parsers.TestParsers.test_junit[jest-junit.xml-]', 'outcome': 'pass'}] == ''\n\ntests/test_parsers.py:16: AssertionError",
12+
"filename": null,
13+
"build_url": null,
14+
"computed_name": "tests.test_parsers.TestParsers::test_junit[junit.xml--True]"
15+
},
16+
{
17+
"name": "test_junit[jest-junit.xml--False]",
18+
"classname": "tests.test_parsers.TestParsers",
19+
"duration": 0.064,
20+
"outcome": "pass",
21+
"testsuite": "pytest",
22+
"failure_message": null,
23+
"filename": null,
24+
"build_url": null,
25+
"computed_name": "tests.test_parsers.TestParsers::test_junit[jest-junit.xml--False]"
26+
}
27+
]
28+
}
29+
]

tests/test_parse_raw_upload.py

Lines changed: 3 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@
33
import zlib
44
import json
55
from test_results_parser import parse_raw_upload
6-
76
class TestParsers:
8-
def test_junit(self):
7+
def test_junit(self, snapshot):
98
with open("tests/junit.xml", "b+r") as f:
109
file_bytes = f.read()
1110
raw_upload = {
@@ -28,49 +27,10 @@ def test_junit(self):
2827

2928
readable_files = bytes(readable_files_bytes)
3029

31-
assert readable_files == f"""# path=junit.xml\n{file_bytes.decode()}\n<<<<<< EOF\n""".encode()
32-
33-
34-
assert parsing_infos[0]["framework"] == "Pytest"
35-
assert parsing_infos[0]["testruns"] == [
36-
{
37-
"name": "test_junit[junit.xml--True]",
38-
"classname": "tests.test_parsers.TestParsers",
39-
"duration": 0.001,
40-
"outcome": "failure",
41-
"testsuite": "pytest",
42-
"failure_message": """self = <test_parsers.TestParsers object at 0x102182d10>, filename = 'junit.xml', expected = '', check = True
4330

44-
@pytest.mark.parametrize(
45-
"filename,expected,check",
46-
[("junit.xml", "", True), ("jest-junit.xml", "", False)],
47-
)
48-
def test_junit(self, filename, expected, check):
49-
with open(filename) as f:
50-
junit_string = f.read()
51-
res = parse_junit_xml(junit_string)
52-
print(res)
53-
if check:
54-
> assert res == expected
55-
E AssertionError: assert [{'duration': '0.010', 'name': 'tests.test_parsers.TestParsers.test_junit[junit.xml-]', 'outcome': 'failure'}, {'duration': '0.063', 'name': 'tests.test_parsers.TestParsers.test_junit[jest-junit.xml-]', 'outcome': 'pass'}] == ''
31+
assert snapshot("bin") == readable_files
32+
assert snapshot("json") == parsing_infos
5633

57-
tests/test_parsers.py:16: AssertionError""",
58-
"filename": None,
59-
"build_url": None,
60-
"computed_name": "tests.test_parsers.TestParsers::test_junit[junit.xml--True]",
61-
},
62-
{
63-
"name": "test_junit[jest-junit.xml--False]",
64-
"classname": "tests.test_parsers.TestParsers",
65-
"duration": 0.064,
66-
"outcome": "pass",
67-
"testsuite": "pytest",
68-
"failure_message": None,
69-
"filename": None,
70-
"build_url": None,
71-
"computed_name": "tests.test_parsers.TestParsers::test_junit[jest-junit.xml--False]",
72-
}
73-
]
7434

7535

7636
def test_json_error(self):

uv.lock

Lines changed: 51 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)