Skip to content

Commit 5752488

Browse files
committed
clean up code around merging reports
1 parent d91319c commit 5752488

File tree

3 files changed

+60
-49
lines changed

3 files changed

+60
-49
lines changed

src/content/github/common/fetchers.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
import browser from "webextension-polyfill";
2-
import { FileMetadata, MessageType } from "src/types";
2+
import {
3+
FileCoverageReportResponse,
4+
FileMetadata,
5+
MessageType,
6+
} from "src/types";
37

48
export async function getMetadata(url: string): Promise<FileMetadata> {
59
const response = await fetch(url).then((response) => response.json());
@@ -51,7 +55,7 @@ export async function getCommitReport(
5155
metadata: FileMetadata,
5256
flag: string | undefined,
5357
component_id: string | undefined
54-
) {
58+
): Promise<FileCoverageReportResponse> {
5559
const payload = {
5660
service: "github",
5761
owner: metadata.owner,

src/content/github/file/main.tsx

Lines changed: 47 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import "./style.css";
1010
import {
1111
CoverageStatus,
1212
FileCoverageReport,
13+
FileCoverageReportResponse,
1314
FileMetadata,
1415
MessageType,
1516
} from "src/types";
@@ -121,30 +122,39 @@ async function execute(): Promise<void> {
121122
});
122123
}
123124

124-
let coverageReport: any;
125-
if (selectedFlags?.length > 0 || selectedComponents?.length > 0) {
126-
let coverageReports = [];
127-
if (selectedFlags.length > 0) {
128-
coverageReports = await Promise.all(
129-
selectedFlags.map((flag) => getCommitReport(metadata, flag, undefined))
130-
);
131-
} else {
132-
coverageReports = await Promise.all(
133-
selectedComponents.map((component) =>
134-
getCommitReport(metadata, undefined, component)
135-
)
136-
);
125+
let coverageReportResponses: Array<FileCoverageReportResponse>;
126+
if (selectedFlags?.length > 0) {
127+
coverageReportResponses = await Promise.all(
128+
selectedFlags.map((flag) => getCommitReport(metadata, flag, undefined))
129+
);
130+
} else if (selectedComponents?.length > 0) {
131+
coverageReportResponses = await Promise.all(
132+
selectedComponents.map((component) =>
133+
getCommitReport(metadata, undefined, component)
134+
)
135+
);
136+
} else {
137+
coverageReportResponses = await Promise.all([
138+
await getCommitReport(metadata, undefined, undefined),
139+
]);
140+
}
141+
142+
const coverageReports = coverageReportResponses.map(
143+
(reportResponse): FileCoverageReport => {
144+
const file = reportResponse.files?.[0];
145+
return Object.fromEntries(file?.line_coverage || []);
137146
}
138-
coverageReport = coverageReports
139-
.map((report) => {
140-
if (report.files?.length) {
141-
return Object.fromEntries(report.files[0].line_coverage);
142-
} else {
143-
return {};
144-
}
145-
})
146-
.reduce((finalReport, currentReport) => {
147-
return _.mergeWith(finalReport, currentReport, (x, y) => {
147+
);
148+
149+
const coverageReport = ((): FileCoverageReport => {
150+
if (coverageReports.length === 1) {
151+
return coverageReports[0];
152+
}
153+
return coverageReports.reduce((finalReport, currentReport) => {
154+
return _.mergeWith(
155+
finalReport,
156+
currentReport,
157+
(x: CoverageStatus, y: CoverageStatus) => {
148158
if (x === CoverageStatus.COVERED || y === CoverageStatus.COVERED) {
149159
return CoverageStatus.COVERED;
150160
} else if (
@@ -155,28 +165,19 @@ async function execute(): Promise<void> {
155165
} else {
156166
return CoverageStatus.UNCOVERED;
157167
}
158-
});
159-
}, {});
160-
if (!_.isEmpty(coverageReport)) {
161-
globals.coverageReport = coverageReport;
162-
const coveragePct = calculateCoveragePct();
163-
updateButton(`Coverage: ${coveragePct.toFixed(2)}%`);
164-
} else {
165-
updateButton(`Coverage: N/A`);
166-
globals.coverageReport = {};
167-
}
168+
}
169+
);
170+
}, {});
171+
})();
172+
173+
if (!_.isEmpty(coverageReport)) {
174+
const coveragePct = calculateCoveragePct(coverageReport);
175+
updateButton(`Coverage: ${coveragePct.toFixed(2)}%`);
168176
} else {
169-
coverageReport = await getCommitReport(metadata, undefined, undefined);
170-
if (coverageReport.files?.length) {
171-
const fileReport = coverageReport.files[0];
172-
updateButton(`Coverage: ${fileReport.totals.coverage}%`);
173-
globals.coverageReport = Object.fromEntries(fileReport.line_coverage);
174-
} else {
175-
updateButton(`Coverage: N/A`);
176-
globals.coverageReport = {};
177-
}
177+
updateButton(`Coverage: N/A`);
178178
}
179179

180+
globals.coverageReport = coverageReport;
180181
animateAndAnnotateLines(lineSelector, annotateLine);
181182
}
182183

@@ -227,10 +228,10 @@ async function handleComponentClick(selectedComponents: string[]) {
227228
await execute();
228229
}
229230

230-
function calculateCoveragePct(): number {
231-
const x = Object.entries(globals.coverageReport!);
232-
const totalLines = x.length;
233-
const coveredLines = x.filter(
231+
function calculateCoveragePct(coverageReport: FileCoverageReport): number {
232+
const report = Object.entries(coverageReport);
233+
const totalLines = report.length;
234+
const coveredLines = report.filter(
234235
([line, status]) => status !== CoverageStatus.UNCOVERED
235236
).length;
236237
return (coveredLines * 100) / totalLines;

src/types.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,20 @@ export type FileMetadata = {
33
repo: string;
44
path: string;
55
commit: string;
6-
}
6+
};
77

88
export enum CoverageStatus {
99
COVERED,
1010
UNCOVERED,
1111
PARTIAL,
1212
}
1313

14+
export type FileCoverageReportResponse = {
15+
files?: Array<{
16+
line_coverage: Array<[number, CoverageStatus]>;
17+
}>;
18+
};
19+
1420
export type FileCoverageReport = {
1521
[lineNumber: number]: CoverageStatus;
1622
};

0 commit comments

Comments
 (0)