From bbaaf1bec8680d207d57c8196d147441c2196a98 Mon Sep 17 00:00:00 2001 From: Craig Atkinson Date: Sat, 28 May 2022 09:13:50 -0500 Subject: [PATCH] Handle scenario where a repo doesn't have any coverage (#776) --- .../Coverage/OrganizationCoverageDetails.tsx | 34 +++++----- .../OrganizationCoverageDetails.spec.tsx | 66 +++++++++++++++++++ 2 files changed, 84 insertions(+), 16 deletions(-) create mode 100644 ui/src/Organization/Coverage/__tests__/OrganizationCoverageDetails.spec.tsx diff --git a/ui/src/Organization/Coverage/OrganizationCoverageDetails.tsx b/ui/src/Organization/Coverage/OrganizationCoverageDetails.tsx index 1725898e6..dd86e57b6 100644 --- a/ui/src/Organization/Coverage/OrganizationCoverageDetails.tsx +++ b/ui/src/Organization/Coverage/OrganizationCoverageDetails.tsx @@ -24,22 +24,24 @@ const OrganizationCoverageDetails = ({ const classes = useStyles({}); if (organizationCoverage) { - const coverageTableRows = organizationCoverage.repositories.map( - (repositoryCoverage) => - ({ - name: repositoryCoverage.projectName - ? `${repositoryCoverage.repoName} ${repositoryCoverage.projectName}` - : repositoryCoverage.repoName, - stats: repositoryCoverage.coverage.overallStats, - previousTestRunId: repositoryCoverage.coverage.previousTestRunId, - nameLinkUrl: repositoryLinkUrlUI( - repositoryCoverage.repoName, - repositoryCoverage.projectName, - null - ), - coveredPercentageLink: `/tests/${repositoryCoverage.publicId}/`, - } as CoverageTableRow) - ); + const coverageTableRows = organizationCoverage.repositories + .filter((repositoryCoverage) => repositoryCoverage.coverage != null) + .map( + (repositoryCoverage) => + ({ + name: repositoryCoverage.projectName + ? `${repositoryCoverage.repoName} ${repositoryCoverage.projectName}` + : repositoryCoverage.repoName, + stats: repositoryCoverage.coverage.overallStats, + previousTestRunId: repositoryCoverage.coverage.previousTestRunId, + nameLinkUrl: repositoryLinkUrlUI( + repositoryCoverage.repoName, + repositoryCoverage.projectName, + null + ), + coveredPercentageLink: `/tests/${repositoryCoverage.publicId}/`, + } as CoverageTableRow) + ); return (
diff --git a/ui/src/Organization/Coverage/__tests__/OrganizationCoverageDetails.spec.tsx b/ui/src/Organization/Coverage/__tests__/OrganizationCoverageDetails.spec.tsx new file mode 100644 index 000000000..8a0456afa --- /dev/null +++ b/ui/src/Organization/Coverage/__tests__/OrganizationCoverageDetails.spec.tsx @@ -0,0 +1,66 @@ +import "@testing-library/jest-dom/extend-expect"; +import React from "react"; +import { render } from "@testing-library/react"; +import OrganizationCoverageDetails from "../OrganizationCoverageDetails"; +import { + OrganizationCoverage, + RepositoryCoverage, +} from "../../../model/OrganizationModel"; +import { + Coverage, + CoverageStat, + CoverageStats, +} from "../../../model/TestRunModel"; + +describe("OrganizationCoverageDetails", () => { + it("should render coverage details even when one project doesn't have any coverage stats", async () => { + const orgName = "my-org"; + const organizationCoverage = { + repositories: [ + { + publicId: "no-coverage-id", + repoName: "no-coverage-repo", + coverage: null, + } as RepositoryCoverage, + { + publicId: "has-coverage-id", + repoName: "has-coverage-repo", + coverage: { + groups: [], + overallStats: { + branchStat: { + covered: 80, + missed: 20, + total: 100, + coveredPercentage: 80, + } as CoverageStat, + lineStat: { + covered: 80, + missed: 20, + total: 100, + coveredPercentage: 80, + } as CoverageStat, + statementStat: { + covered: 80, + missed: 20, + total: 100, + coveredPercentage: 80, + } as CoverageStat, + } as CoverageStats, + } as Coverage, + } as RepositoryCoverage, + ], + } as OrganizationCoverage; + + const { findByTestId } = render( + + ); + + expect(await findByTestId("coverage-name-1")).toHaveTextContent( + `has-coverage-repo` + ); + }); +});