Skip to content

Commit a239899

Browse files
authored
Merge pull request #1729 from github/koesie10/failed-download-view
Handle failed result download in view
2 parents 8183c31 + bf52c71 commit a239899

File tree

5 files changed

+115
-9
lines changed

5 files changed

+115
-9
lines changed

extensions/ql-vscode/src/stories/variant-analysis/RepoRow.stories.tsx

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,22 @@ SucceededDownloading.args = {
7777
downloadStatus: VariantAnalysisScannedRepositoryDownloadStatus.InProgress,
7878
};
7979

80+
export const SucceededSuccessfulDownload = Template.bind({});
81+
SucceededSuccessfulDownload.args = {
82+
...Pending.args,
83+
status: VariantAnalysisRepoStatus.Succeeded,
84+
resultCount: 198,
85+
downloadStatus: VariantAnalysisScannedRepositoryDownloadStatus.Succeeded,
86+
};
87+
88+
export const SucceededFailedDownload = Template.bind({});
89+
SucceededFailedDownload.args = {
90+
...Pending.args,
91+
status: VariantAnalysisRepoStatus.Succeeded,
92+
resultCount: 198,
93+
downloadStatus: VariantAnalysisScannedRepositoryDownloadStatus.Failed,
94+
};
95+
8096
export const InterpretedResults = Template.bind({});
8197
InterpretedResults.args = {
8298
...Pending.args,

extensions/ql-vscode/src/view/variant-analysis/AnalyzedRepoItemContent.tsx

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@ import styled from 'styled-components';
33
import { AnalysisAlert, AnalysisRawResults } from '../../remote-queries/shared/analysis-result';
44
import AnalysisAlertResult from '../remote-queries/AnalysisAlertResult';
55
import RawResultsTable from '../remote-queries/RawResultsTable';
6-
import { VariantAnalysisRepoStatus } from '../../remote-queries/shared/variant-analysis';
6+
import {
7+
VariantAnalysisRepoStatus,
8+
VariantAnalysisScannedRepositoryDownloadStatus,
9+
} from '../../remote-queries/shared/variant-analysis';
710
import { Alert } from '../common';
811

912
const ContentContainer = styled.div`
@@ -32,14 +35,16 @@ const RawResultsContainer = styled.div`
3235
`;
3336

3437
export type AnalyzedRepoItemContentProps = {
35-
status: VariantAnalysisRepoStatus;
38+
status?: VariantAnalysisRepoStatus;
39+
downloadStatus?: VariantAnalysisScannedRepositoryDownloadStatus;
3640

3741
interpretedResults?: AnalysisAlert[];
3842
rawResults?: AnalysisRawResults;
3943
}
4044

4145
export const AnalyzedRepoItemContent = ({
4246
status,
47+
downloadStatus,
4348
interpretedResults,
4449
rawResults,
4550
}: AnalyzedRepoItemContentProps) => {
@@ -66,6 +71,13 @@ export const AnalyzedRepoItemContent = ({
6671
message="The variant analysis or this repository was canceled."
6772
/>
6873
</AlertContainer>}
74+
{downloadStatus === VariantAnalysisScannedRepositoryDownloadStatus.Failed && <AlertContainer>
75+
<Alert
76+
type="error"
77+
title="Download failed"
78+
message="The query was successful on this repository, but the extension failed to download the results for this repository."
79+
/>
80+
</AlertContainer>}
6981
{interpretedResults && (
7082
<InterpretedResultsContainer>
7183
{interpretedResults.map((r, i) =>

extensions/ql-vscode/src/view/variant-analysis/RepoRow.tsx

Lines changed: 57 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,50 @@ export type RepoRowProps = {
8282
rawResults?: AnalysisRawResults;
8383
}
8484

85+
const canExpand = (
86+
status: VariantAnalysisRepoStatus | undefined,
87+
downloadStatus: VariantAnalysisScannedRepositoryDownloadStatus | undefined,
88+
): boolean => {
89+
if (!status) {
90+
return false;
91+
}
92+
93+
if (!isCompletedAnalysisRepoStatus(status)) {
94+
return false;
95+
}
96+
97+
if (status !== VariantAnalysisRepoStatus.Succeeded) {
98+
return true;
99+
}
100+
101+
return downloadStatus === VariantAnalysisScannedRepositoryDownloadStatus.Succeeded || downloadStatus === VariantAnalysisScannedRepositoryDownloadStatus.Failed;
102+
};
103+
104+
const isExpandableContentLoaded = (
105+
status: VariantAnalysisRepoStatus | undefined,
106+
downloadStatus: VariantAnalysisScannedRepositoryDownloadStatus | undefined,
107+
resultsLoaded: boolean,
108+
): boolean => {
109+
if (!canExpand(status, downloadStatus)) {
110+
return false;
111+
}
112+
113+
if (!status) {
114+
return false;
115+
}
116+
117+
if (status !== VariantAnalysisRepoStatus.Succeeded) {
118+
return true;
119+
}
120+
121+
if (downloadStatus === VariantAnalysisScannedRepositoryDownloadStatus.Failed) {
122+
// If the download has failed, we allow expansion to show the error
123+
return true;
124+
}
125+
126+
return resultsLoaded;
127+
};
128+
85129
export const RepoRow = ({
86130
repository,
87131
status,
@@ -99,7 +143,7 @@ export const RepoRow = ({
99143
return;
100144
}
101145

102-
if (resultsLoaded || status !== VariantAnalysisRepoStatus.Succeeded) {
146+
if (resultsLoaded || status !== VariantAnalysisRepoStatus.Succeeded || downloadStatus !== VariantAnalysisScannedRepositoryDownloadStatus.Succeeded) {
103147
setExpanded(oldIsExpanded => !oldIsExpanded);
104148
return;
105149
}
@@ -110,7 +154,7 @@ export const RepoRow = ({
110154
});
111155

112156
setResultsLoading(true);
113-
}, [resultsLoading, resultsLoaded, repository.fullName, status]);
157+
}, [resultsLoading, resultsLoaded, repository.fullName, status, downloadStatus]);
114158

115159
useEffect(() => {
116160
if (resultsLoaded && resultsLoading) {
@@ -119,8 +163,8 @@ export const RepoRow = ({
119163
}
120164
}, [resultsLoaded, resultsLoading]);
121165

122-
const disabled = !status || !isCompletedAnalysisRepoStatus(status) || (status === VariantAnalysisRepoStatus.Succeeded && downloadStatus !== VariantAnalysisScannedRepositoryDownloadStatus.Succeeded);
123-
const expandableContentLoaded = status && (status !== VariantAnalysisRepoStatus.Succeeded || resultsLoaded);
166+
const disabled = !canExpand(status, downloadStatus);
167+
const expandableContentLoaded = isExpandableContentLoaded(status, downloadStatus, resultsLoaded);
124168

125169
return (
126170
<div>
@@ -139,13 +183,20 @@ export const RepoRow = ({
139183
{!status && <WarningIcon />}
140184
</span>
141185
{downloadStatus === VariantAnalysisScannedRepositoryDownloadStatus.InProgress && <LoadingIcon label="Downloading" />}
186+
{downloadStatus === VariantAnalysisScannedRepositoryDownloadStatus.Failed && <WarningIcon label="Failed to download the results" />}
142187
<MetadataContainer>
143188
<div><StarCount starCount={repository.stargazersCount} /></div>
144189
<LastUpdated lastUpdated={repository.updatedAt} />
145190
</MetadataContainer>
146191
</TitleContainer>
147-
{isExpanded && expandableContentLoaded &&
148-
<AnalyzedRepoItemContent status={status} interpretedResults={interpretedResults} rawResults={rawResults} />}
192+
{isExpanded && expandableContentLoaded && (
193+
<AnalyzedRepoItemContent
194+
status={status}
195+
downloadStatus={downloadStatus}
196+
interpretedResults={interpretedResults}
197+
rawResults={rawResults}
198+
/>
199+
)}
149200
</div>
150201
);
151202
};

extensions/ql-vscode/src/view/variant-analysis/__tests__/AnalyzedRepoItemContent.spec.tsx

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import * as React from 'react';
22
import { render as reactRender, screen } from '@testing-library/react';
3-
import { VariantAnalysisRepoStatus } from '../../../remote-queries/shared/variant-analysis';
3+
import {
4+
VariantAnalysisRepoStatus,
5+
VariantAnalysisScannedRepositoryDownloadStatus
6+
} from '../../../remote-queries/shared/variant-analysis';
47
import { AnalyzedRepoItemContent, AnalyzedRepoItemContentProps } from '../AnalyzedRepoItemContent';
58

69
describe(AnalyzedRepoItemContent.name, () => {
@@ -112,4 +115,13 @@ describe(AnalyzedRepoItemContent.name, () => {
112115

113116
expect(screen.getByText('Error: Canceled')).toBeInTheDocument();
114117
});
118+
119+
it('renders the failed download state', () => {
120+
render({
121+
status: VariantAnalysisRepoStatus.Succeeded,
122+
downloadStatus: VariantAnalysisScannedRepositoryDownloadStatus.Failed,
123+
});
124+
125+
expect(screen.getByText('Error: Download failed')).toBeInTheDocument();
126+
});
115127
});

extensions/ql-vscode/src/view/variant-analysis/__tests__/RepoRow.spec.tsx

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,21 @@ describe(RepoRow.name, () => {
104104
})).toBeEnabled();
105105
});
106106

107+
it('renders the succeeded state with failed download status', () => {
108+
render({
109+
status: VariantAnalysisRepoStatus.Succeeded,
110+
resultCount: 178,
111+
downloadStatus: VariantAnalysisScannedRepositoryDownloadStatus.Failed,
112+
});
113+
114+
expect(screen.getByRole<HTMLButtonElement>('button', {
115+
expanded: false
116+
})).toBeEnabled();
117+
expect(screen.getByRole('img', {
118+
name: 'Failed to download the results',
119+
})).toBeInTheDocument();
120+
});
121+
107122
it('renders the failed state', () => {
108123
render({
109124
status: VariantAnalysisRepoStatus.Failed,

0 commit comments

Comments
 (0)