diff --git a/extensions/ql-vscode/src/stories/variant-analysis/VariantAnalysis.stories.tsx b/extensions/ql-vscode/src/stories/variant-analysis/VariantAnalysis.stories.tsx index a28b122d789..530c9f3dff8 100644 --- a/extensions/ql-vscode/src/stories/variant-analysis/VariantAnalysis.stories.tsx +++ b/extensions/ql-vscode/src/stories/variant-analysis/VariantAnalysis.stories.tsx @@ -385,3 +385,19 @@ Failed.args = { repoStates, repoResults, }; + +export const FailedInternal = Template.bind({}); +FailedInternal.args = { + variantAnalysis: { + ...variantAnalysis, + status: VariantAnalysisStatus.Failed, + failureReason: VariantAnalysisFailureReason.InternalError, + completedAt: new Date( + new Date(variantAnalysis.createdAt).getTime() + 100_000, + ).toISOString(), + scannedRepos: [], + skippedRepos: {}, + }, + repoStates, + repoResults, +}; diff --git a/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysisOutcomePanels.tsx b/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysisOutcomePanels.tsx index f44a339bcd2..8e36aee3276 100644 --- a/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysisOutcomePanels.tsx +++ b/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysisOutcomePanels.tsx @@ -110,6 +110,14 @@ export const VariantAnalysisOutcomePanels = ({ ); + const noPanels = + scannedReposCount === 0 && + !noCodeqlDbRepos?.repositoryCount && + !notFoundRepos?.repositoryCount; + if (noPanels) { + return warnings; + } + if (!noCodeqlDbRepos?.repositoryCount && !notFoundRepos?.repositoryCount) { return ( <> @@ -138,12 +146,14 @@ export const VariantAnalysisOutcomePanels = ({ onChange={setFilterSortState} /> - - Analyzed - - {formatDecimal(variantAnalysis.scannedRepos?.length ?? 0)} - - + {scannedReposCount > 0 && ( + + Analyzed + + {formatDecimal(variantAnalysis.scannedRepos?.length ?? 0)} + + + )} {notFoundRepos?.repositoryCount && ( No access @@ -160,16 +170,18 @@ export const VariantAnalysisOutcomePanels = ({ )} - - - + {scannedReposCount > 0 && ( + + + + )} {notFoundRepos?.repositoryCount && ( { expect(screen.getByText("No database")).toBeInTheDocument(); }); + it("does not render analyzed panel when there are no scanned repos", () => { + render({ + scannedRepos: [], + skippedRepos: { + notFoundRepos: defaultVariantAnalysis.skippedRepos.notFoundRepos, + noCodeqlDbRepos: defaultVariantAnalysis.skippedRepos.noCodeqlDbRepos, + }, + }); + + expect(screen.queryByRole("Analyzed")).not.toBeInTheDocument(); + expect(screen.getByText("No access")).toBeInTheDocument(); + expect(screen.getByText("No database")).toBeInTheDocument(); + }); + + it("does not render any tabs when there are no repos", () => { + render({ + status: VariantAnalysisStatus.Failed, + failureReason: VariantAnalysisFailureReason.InternalError, + scannedRepos: [], + skippedRepos: {}, + }); + + expect(screen.queryByRole("Analyzed")).not.toBeInTheDocument(); + expect(screen.queryByRole("No access")).not.toBeInTheDocument(); + expect(screen.queryByRole("No database")).not.toBeInTheDocument(); + expect( + screen.getByText("Error: Something unexpected happened"), + ).toBeInTheDocument(); + }); + it("renders warning with canceled variant analysis", () => { render({ status: VariantAnalysisStatus.Canceled,