Skip to content

Commit 0965448

Browse files
Merge pull request #1688 from github/elena/query-history-testing-with-different-items
Make query history tests work with remote queries & variant analyses
2 parents 3c860cf + 841c66c commit 0965448

File tree

9 files changed

+809
-636
lines changed

9 files changed

+809
-636
lines changed

extensions/ql-vscode/src/history-item-label-provider.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { RemoteQueryHistoryItem } from './remote-queries/remote-query-history-it
77
import { VariantAnalysisHistoryItem } from './remote-queries/variant-analysis-history-item';
88
import { assertNever } from './pure/helpers-pure';
99
import { pluralize } from './pure/word';
10+
import { humanizeQueryStatus } from './query-status';
1011

1112
interface InterpolateReplacements {
1213
t: string; // Start time
@@ -86,7 +87,7 @@ export class HistoryItemLabelProvider {
8687
q: `${item.remoteQuery.queryName} (${item.remoteQuery.language})`,
8788
d: buildRepoLabel(item),
8889
r: resultCount,
89-
s: item.status,
90+
s: humanizeQueryStatus(item.status),
9091
f: path.basename(item.remoteQuery.queryFilePath),
9192
'%': '%'
9293
};
@@ -99,7 +100,7 @@ export class HistoryItemLabelProvider {
99100
q: `${item.variantAnalysis.query.name} (${item.variantAnalysis.query.language})`,
100101
d: buildRepoLabel(item),
101102
r: resultCount,
102-
s: item.status,
103+
s: humanizeQueryStatus(item.status),
103104
f: path.basename(item.variantAnalysis.query.filePath),
104105
'%': '%',
105106
};

extensions/ql-vscode/src/query-status.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,16 @@ export function variantAnalysisStatusToQueryStatus(status: VariantAnalysisStatus
2121
assertNever(status);
2222
}
2323
}
24+
25+
export function humanizeQueryStatus(status: QueryStatus): string {
26+
switch (status) {
27+
case QueryStatus.InProgress:
28+
return 'in progress';
29+
case QueryStatus.Completed:
30+
return 'completed';
31+
case QueryStatus.Failed:
32+
return 'failed';
33+
default:
34+
return 'unknown';
35+
}
36+
}

extensions/ql-vscode/src/vscode-tests/factories/local-queries/local-query-history-item.ts

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ import {
44
CompletedLocalQueryInfo,
55
LocalQueryInfo,
66
} from '../../../query-results';
7+
import { QueryEvaluationInfo, QueryWithResults } from '../../../run-queries-shared';
8+
import { CancellationTokenSource } from 'vscode';
9+
import { QueryResultType } from '../../../pure/legacy-messages';
710

811
export function createMockLocalQueryInfo(
912
startTime: string,
@@ -31,3 +34,56 @@ export function createMockLocalQueryInfo(
3134
} as unknown) as CompletedQueryInfo,
3235
} as unknown) as CompletedLocalQueryInfo;
3336
}
37+
38+
export function createMockLocalQuery(
39+
dbName = 'a',
40+
queryWithResults?: QueryWithResults,
41+
isFail = false
42+
): LocalQueryInfo {
43+
const initialQueryInfo = {
44+
databaseInfo: { name: dbName },
45+
start: new Date(),
46+
queryPath: 'hucairz'
47+
} as InitialQueryInfo;
48+
49+
const cancellationToken = {
50+
dispose: () => { /**/ },
51+
} as CancellationTokenSource;
52+
53+
const fqi = new LocalQueryInfo(
54+
initialQueryInfo,
55+
cancellationToken,
56+
);
57+
58+
if (queryWithResults) {
59+
fqi.completeThisQuery(queryWithResults);
60+
}
61+
62+
if (isFail) {
63+
fqi.failureReason = 'failure reason';
64+
}
65+
66+
return fqi;
67+
}
68+
69+
export function createMockQueryWithResults(
70+
sandbox: sinon.SinonSandbox,
71+
didRunSuccessfully = true,
72+
hasInterpretedResults = true
73+
): QueryWithResults {
74+
return {
75+
query: {
76+
hasInterpretedResults: () => Promise.resolve(hasInterpretedResults),
77+
deleteQuery: sandbox.stub(),
78+
} as unknown as QueryEvaluationInfo,
79+
successful: didRunSuccessfully,
80+
message: 'foo',
81+
dispose: sandbox.spy(),
82+
result: {
83+
evaluationTime: 1,
84+
queryId: 0,
85+
runId: 0,
86+
resultType: QueryResultType.SUCCESS,
87+
}
88+
};
89+
}
Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,41 @@
11
import { RemoteQueryHistoryItem } from '../../../remote-queries/remote-query-history-item';
2+
import { QueryStatus } from '../../../query-status';
23

34
export function createMockRemoteQueryHistoryItem({
45
date = new Date('2022-01-01T00:00:00.000Z'),
6+
status = QueryStatus.InProgress,
7+
failureReason = undefined,
58
resultCount = 16,
6-
userSpecifiedLabel = undefined,
79
repositoryCount = 0,
10+
userSpecifiedLabel = undefined,
811
}: {
912
date?: Date;
13+
status?: QueryStatus;
14+
failureReason?: string;
1015
resultCount?: number;
11-
userSpecifiedLabel?: string;
1216
repositoryCount?: number;
17+
userSpecifiedLabel?: string;
1318
}): RemoteQueryHistoryItem {
1419
return ({
1520
t: 'remote',
16-
userSpecifiedLabel,
21+
failureReason,
22+
resultCount,
23+
status,
24+
completed: false,
25+
queryId: 'queryId',
1726
remoteQuery: {
18-
executionStartTime: date.getTime(),
1927
queryName: 'query-name',
2028
queryFilePath: 'query-file.ql',
29+
queryText: 'select 1',
30+
language: 'javascript',
2131
controllerRepository: {
2232
owner: 'github',
2333
name: 'vscode-codeql-integration-tests',
2434
},
25-
language: 'javascript',
35+
executionStartTime: date.getTime(),
36+
actionsWorkflowRunId: 1,
2637
repositoryCount,
2738
},
28-
status: 'in progress',
29-
resultCount,
30-
} as unknown) as RemoteQueryHistoryItem;
39+
userSpecifiedLabel,
40+
});
3141
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { VariantAnalysisHistoryItem } from '../../../remote-queries/variant-analysis-history-item';
2+
import { QueryStatus } from '../../../query-status';
3+
import { VariantAnalysisStatus } from '../../../remote-queries/shared/variant-analysis';
4+
import { createMockVariantAnalysis } from './shared/variant-analysis';
5+
6+
export function createMockVariantAnalysisHistoryItem(
7+
historyItemStatus: QueryStatus = QueryStatus.InProgress,
8+
variantAnalysisStatus: VariantAnalysisStatus = VariantAnalysisStatus.Succeeded,
9+
failureReason?: string,
10+
resultCount?: number,
11+
userSpecifiedLabel?: string
12+
): VariantAnalysisHistoryItem {
13+
return ({
14+
t: 'variant-analysis',
15+
failureReason,
16+
resultCount,
17+
status: historyItemStatus,
18+
completed: false,
19+
variantAnalysis: createMockVariantAnalysis(variantAnalysisStatus),
20+
userSpecifiedLabel,
21+
});
22+
}
23+

extensions/ql-vscode/src/vscode-tests/no-workspace/history-item-label-provider.test.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@ import { HistoryItemLabelProvider } from '../../history-item-label-provider';
55
import { createMockLocalQueryInfo } from '../factories/local-queries/local-query-history-item';
66
import { createMockRemoteQueryHistoryItem } from '../factories/remote-queries/remote-query-history-item';
77

8-
98
describe('HistoryItemLabelProvider', () => {
10-
119
let labelProvider: HistoryItemLabelProvider;
1210
let config: QueryHistoryConfig;
1311
const date = new Date('2022-01-01T00:00:00.000Z');

extensions/ql-vscode/test/pure-tests/query-history-info.test.ts renamed to extensions/ql-vscode/src/vscode-tests/no-workspace/query-history-info.test.ts

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
11
import { expect } from 'chai';
2-
3-
import { QueryStatus } from '../../src/query-status';
2+
import { QueryStatus } from '../../query-status';
43
import {
54
buildRepoLabel,
65
getActionsWorkflowRunUrl,
76
getQueryId,
87
getQueryText,
98
getRawQueryName
10-
} from '../../src/query-history-info';
11-
import { VariantAnalysisHistoryItem } from '../../src/remote-queries/variant-analysis-history-item';
12-
import { createMockVariantAnalysis } from '../../src/vscode-tests/factories/remote-queries/shared/variant-analysis';
13-
import { createMockScannedRepos } from '../../src/vscode-tests/factories/remote-queries/shared/scanned-repositories';
14-
import { createMockLocalQueryInfo } from '../../src/vscode-tests/factories/local-queries/local-query-history-item';
15-
import { createMockRemoteQueryHistoryItem } from '../../src/vscode-tests/factories/remote-queries/remote-query-history-item';
16-
import { VariantAnalysisRepoStatus, VariantAnalysisStatus } from '../../src/remote-queries/shared/variant-analysis';
9+
} from '../../query-history-info';
10+
import { VariantAnalysisHistoryItem } from '../../remote-queries/variant-analysis-history-item';
11+
import { createMockVariantAnalysis } from '../factories/remote-queries/shared/variant-analysis';
12+
import { createMockScannedRepos } from '../factories/remote-queries/shared/scanned-repositories';
13+
import { createMockLocalQueryInfo } from '../factories/local-queries/local-query-history-item';
14+
import { createMockRemoteQueryHistoryItem } from '../factories/remote-queries/remote-query-history-item';
15+
import { VariantAnalysisRepoStatus, VariantAnalysisStatus } from '../../remote-queries/shared/variant-analysis';
1716

1817
describe('Query history info', () => {
1918

0 commit comments

Comments
 (0)