aboutsummaryrefslogtreecommitdiff
path: root/src/index.ts
diff options
context:
space:
mode:
authorKevin J Hoerr <kjhoerr@protonmail.com>2019-11-29 18:28:54 -0500
committerKevin J Hoerr <kjhoerr@protonmail.com>2019-11-29 18:28:54 -0500
commit1158e558606034b681f4663d62677e798cf5ec23 (patch)
tree35e9ead895b0b0d2008d4c622f5d010a4098fc7c /src/index.ts
parent5964ec16673bd1474d32ffe87a2009b823c36f12 (diff)
downloadao-coverage-1158e558606034b681f4663d62677e798cf5ec23.tar.gz
ao-coverage-1158e558606034b681f4663d62677e798cf5ec23.tar.bz2
ao-coverage-1158e558606034b681f4663d62677e798cf5ec23.zip
Implement report parsing for Tarpaulin
The generated Tarpaulin HTML report does not have stats to parse via the DOM - the data is injected via a script tag, which only has line-by-line coverage, though it includes statistics for each file. The total coverage is counted by summing the covered/coverable stats reported for each file. Also, the bad version for express is fixed, and messages are included for errors that occur for the POST endpoint.
Diffstat (limited to 'src/index.ts')
-rw-r--r--src/index.ts11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/index.ts b/src/index.ts
index 4fe80a9..d592405 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -36,12 +36,12 @@ app.post("/v1/:org/:repo/:branch/:commit.html", (req, res) => {
const { token, format } = req.query;
//TODO @Metadata token should come from metadata
if (token != TOKEN) {
- return res.status(401).send();
+ return res.status(401).send("Invalid token");
}
const reporter = format || "tarpaulin";
if (!formats.list_formats().includes(reporter)) {
- return res.status(406).send();
+ return res.status(406).send("Report format unknown");
}
//TODO acquire file, verify file size/content type (HTML)
@@ -51,7 +51,12 @@ app.post("/v1/:org/:repo/:branch/:commit.html", (req, res) => {
const doc = new DOMParser().parseFromString(contents, "text/html");
const formatter = formats.get_format(reporter);
- const coverage = formatter.parse_coverage(doc);
+ let coverage: number;
+ try {
+ coverage = formatter.parse_coverage(doc);
+ } catch {
+ return res.status(400).send("Invalid report document");
+ }
const badge = badgen({
label: "coverage",