Adapt tests for query history labels to use new LocalQueryInfo factory method

We're making a number of changes:

1. We're changing the userSpecifiedLabel value to be
`user-specified-name` instead of `xxx`

2. For local queries, we're changing `in progress` to `finished in 0
seconds` when the query has results. The previous version was
contradictory because any query still in progress wouldn't have results.

3. Similarly, for remote queries, we're changing `in progress` to
`completed` when the query has results. Here we actually set a `status`
property which means `in progress` becomes `completed`.
This commit is contained in:
Elena Tanasoiu
2022-11-03 14:08:16 +00:00
parent 028cc79bb9
commit 2fe0c7925d

View File

@@ -4,12 +4,15 @@ import { QueryHistoryConfig } from '../../config';
import { HistoryItemLabelProvider } from '../../history-item-label-provider';
import { createMockLocalQueryInfo } from '../factories/local-queries/local-query-history-item';
import { createMockRemoteQueryHistoryItem } from '../factories/remote-queries/remote-query-history-item';
import { QueryStatus } from '../../query-status';
describe('HistoryItemLabelProvider', () => {
let labelProvider: HistoryItemLabelProvider;
let config: QueryHistoryConfig;
const date = new Date('2022-01-01T00:00:00.000Z');
const dateStr = date.toLocaleString(env.language);
const executionStartTime = date.getTime();
const userSpecifiedLabel = 'user-specified-name';
beforeEach(() => {
config = {
@@ -20,47 +23,50 @@ describe('HistoryItemLabelProvider', () => {
describe('local queries', () => {
it('should interpolate query when user specified', () => {
const fqi = createMockLocalQueryInfo(dateStr, 'xxx');
const fqi = createMockLocalQueryInfo({ startTime: date, userSpecifiedLabel, resultCount: 456, hasMetadata: true });
expect(labelProvider.getLabel(fqi)).to.eq('xxx');
expect(labelProvider.getLabel(fqi)).to.eq('user-specified-name');
fqi.userSpecifiedLabel = '%t %q %d %s %f %r %%';
expect(labelProvider.getLabel(fqi)).to.eq(`${dateStr} query-name db-name in progress query-file.ql (456 results) %`);
expect(labelProvider.getLabel(fqi)).to.eq(`${dateStr} query-name db-name finished in 0 seconds query-file.ql (456 results) %`);
fqi.userSpecifiedLabel = '%t %q %d %s %f %r %%::%t %q %d %s %f %r %%';
expect(labelProvider.getLabel(fqi)).to.eq(`${dateStr} query-name db-name in progress query-file.ql (456 results) %::${dateStr} query-name db-name in progress query-file.ql (456 results) %`);
expect(labelProvider.getLabel(fqi)).to.eq(`${dateStr} query-name db-name finished in 0 seconds query-file.ql (456 results) %::${dateStr} query-name db-name finished in 0 seconds query-file.ql (456 results) %`);
});
it('should interpolate query when not user specified', () => {
const fqi = createMockLocalQueryInfo(dateStr);
const fqi = createMockLocalQueryInfo({ startTime: date, resultCount: 456, hasMetadata: true });
expect(labelProvider.getLabel(fqi)).to.eq('xxx query-name xxx');
config.format = '%t %q %d %s %f %r %%';
expect(labelProvider.getLabel(fqi)).to.eq(`${dateStr} query-name db-name in progress query-file.ql (456 results) %`);
expect(labelProvider.getLabel(fqi)).to.eq(`${dateStr} query-name db-name finished in 0 seconds query-file.ql (456 results) %`);
config.format = '%t %q %d %s %f %r %%::%t %q %d %s %f %r %%';
expect(labelProvider.getLabel(fqi)).to.eq(`${dateStr} query-name db-name in progress query-file.ql (456 results) %::${dateStr} query-name db-name in progress query-file.ql (456 results) %`);
expect(labelProvider.getLabel(fqi)).to.eq(`${dateStr} query-name db-name finished in 0 seconds query-file.ql (456 results) %::${dateStr} query-name db-name finished in 0 seconds query-file.ql (456 results) %`);
});
it('should get query short label', () => {
const fqi = createMockLocalQueryInfo(dateStr, 'xxx');
const fqi = createMockLocalQueryInfo({ startTime: date, userSpecifiedLabel, hasMetadata: true, resultCount: 456 });
// fall back on user specified if one exists.
expect(labelProvider.getShortLabel(fqi)).to.eq('xxx');
expect(labelProvider.getShortLabel(fqi)).to.eq('user-specified-name');
// use query name if no user-specified label exists
delete (fqi as any).userSpecifiedLabel;
fqi.userSpecifiedLabel = undefined;
expect(labelProvider.getShortLabel(fqi)).to.eq('query-name');
// use file name if no user-specified label exists and the query is not yet completed (meaning it has no results)
const fqi2 = createMockLocalQueryInfo({ startTime: date, hasMetadata: true });
expect(labelProvider.getShortLabel(fqi2)).to.eq('query-file.ql');
});
});
describe('remote queries', () => {
it('should interpolate query when user specified', () => {
const fqi = createMockRemoteQueryHistoryItem({ userSpecifiedLabel: 'xxx' });
const fqi = createMockRemoteQueryHistoryItem({ userSpecifiedLabel });
expect(labelProvider.getLabel(fqi)).to.eq('xxx');
expect(labelProvider.getLabel(fqi)).to.eq(userSpecifiedLabel);
fqi.userSpecifiedLabel = '%t %q %d %s %%';
expect(labelProvider.getLabel(fqi)).to.eq(`${dateStr} query-name (javascript) github/vscode-codeql-integration-tests in progress %`);
@@ -70,73 +76,73 @@ describe('HistoryItemLabelProvider', () => {
});
it('should interpolate query when not user-specified', () => {
const fqi = createMockRemoteQueryHistoryItem({});
const fqi = createMockRemoteQueryHistoryItem({ status: QueryStatus.Completed, executionStartTime, resultCount: 16 });
expect(labelProvider.getLabel(fqi)).to.eq('xxx query-name (javascript) xxx');
config.format = '%t %q %d %s %f %r %%';
expect(labelProvider.getLabel(fqi)).to.eq(`${dateStr} query-name (javascript) github/vscode-codeql-integration-tests in progress query-file.ql (16 results) %`);
expect(labelProvider.getLabel(fqi)).to.eq(`${dateStr} query-name (javascript) github/vscode-codeql-integration-tests completed query-file.ql (16 results) %`);
config.format = '%t %q %d %s %f %r %%::%t %q %d %s %f %r %%';
expect(labelProvider.getLabel(fqi)).to.eq(`${dateStr} query-name (javascript) github/vscode-codeql-integration-tests in progress query-file.ql (16 results) %::${dateStr} query-name (javascript) github/vscode-codeql-integration-tests in progress query-file.ql (16 results) %`);
expect(labelProvider.getLabel(fqi)).to.eq(`${dateStr} query-name (javascript) github/vscode-codeql-integration-tests completed query-file.ql (16 results) %::${dateStr} query-name (javascript) github/vscode-codeql-integration-tests completed query-file.ql (16 results) %`);
});
it('should use number of repositories instead of controller repo if available', () => {
const fqi = createMockRemoteQueryHistoryItem({ repositoryCount: 2 });
const fqi = createMockRemoteQueryHistoryItem({ status: QueryStatus.Completed, executionStartTime, resultCount: 16, repositoryCount: 2 });
config.format = '%t %q %d %s %f %r %%';
expect(labelProvider.getLabel(fqi)).to.eq(`${dateStr} query-name (javascript) 2 repositories in progress query-file.ql (16 results) %`);
expect(labelProvider.getLabel(fqi)).to.eq(`${dateStr} query-name (javascript) 2 repositories completed query-file.ql (16 results) %`);
});
it('should get query short label', () => {
const fqi = createMockRemoteQueryHistoryItem({ userSpecifiedLabel: 'xxx' });
const fqi = createMockRemoteQueryHistoryItem({ status: QueryStatus.Completed, executionStartTime, userSpecifiedLabel });
// fall back on user specified if one exists.
expect(labelProvider.getShortLabel(fqi)).to.eq('xxx');
expect(labelProvider.getShortLabel(fqi)).to.eq('user-specified-name');
// use query name if no user-specified label exists
delete (fqi as any).userSpecifiedLabel;
expect(labelProvider.getShortLabel(fqi)).to.eq('query-name');
const fqi2 = createMockRemoteQueryHistoryItem({});
expect(labelProvider.getShortLabel(fqi2)).to.eq('query-name');
});
describe('when results are present', () => {
it('should display results if there are any', () => {
const fqi = createMockRemoteQueryHistoryItem({ resultCount: 16, repositoryCount: 2 });
const fqi = createMockRemoteQueryHistoryItem({ status: QueryStatus.Completed, executionStartTime, resultCount: 16, repositoryCount: 2 });
config.format = '%t %q %d %s %f %r %%';
expect(labelProvider.getLabel(fqi)).to.eq(`${dateStr} query-name (javascript) 2 repositories in progress query-file.ql (16 results) %`);
expect(labelProvider.getLabel(fqi)).to.eq(`${dateStr} query-name (javascript) 2 repositories completed query-file.ql (16 results) %`);
});
});
describe('when results are not present', () => {
it('should skip displaying them', () => {
const fqi = createMockRemoteQueryHistoryItem({ resultCount: 0, repositoryCount: 2 });
const fqi = createMockRemoteQueryHistoryItem({ status: QueryStatus.Completed, executionStartTime, resultCount: 0, repositoryCount: 2 });
config.format = '%t %q %d %s %f %r %%';
expect(labelProvider.getLabel(fqi)).to.eq(`${dateStr} query-name (javascript) 2 repositories in progress query-file.ql %`);
expect(labelProvider.getLabel(fqi)).to.eq(`${dateStr} query-name (javascript) 2 repositories completed query-file.ql %`);
});
});
describe('when extra whitespace is present in the middle of the label', () => {
it('should squash it down to a single whitespace', () => {
const fqi = createMockRemoteQueryHistoryItem({ resultCount: 0, repositoryCount: 2 });
const fqi = createMockRemoteQueryHistoryItem({ status: QueryStatus.Completed, executionStartTime, resultCount: 0, repositoryCount: 2 });
config.format = '%t %q %d %s %f %r %%';
expect(labelProvider.getLabel(fqi)).to.eq(`${dateStr} query-name (javascript) 2 repositories in progress query-file.ql %`);
expect(labelProvider.getLabel(fqi)).to.eq(`${dateStr} query-name (javascript) 2 repositories completed query-file.ql %`);
});
});
describe('when extra whitespace is present at the start of the label', () => {
it('should squash it down to a single whitespace', () => {
const fqi = createMockRemoteQueryHistoryItem({ resultCount: 0, repositoryCount: 2 });
const fqi = createMockRemoteQueryHistoryItem({ status: QueryStatus.Completed, executionStartTime, resultCount: 0, repositoryCount: 2 });
config.format = ' %t %q %d %s %f %r %%';
expect(labelProvider.getLabel(fqi)).to.eq(` ${dateStr} query-name (javascript) 2 repositories in progress query-file.ql %`);
expect(labelProvider.getLabel(fqi)).to.eq(` ${dateStr} query-name (javascript) 2 repositories completed query-file.ql %`);
});
});
describe('when extra whitespace is present at the end of the label', () => {
it('should squash it down to a single whitespace', () => {
const fqi = createMockRemoteQueryHistoryItem({ resultCount: 0, repositoryCount: 2 });
const fqi = createMockRemoteQueryHistoryItem({ status: QueryStatus.Completed, executionStartTime, resultCount: 0, repositoryCount: 2 });
config.format = '%t %q %d %s %f %r %% ';
expect(labelProvider.getLabel(fqi)).to.eq(`${dateStr} query-name (javascript) 2 repositories in progress query-file.ql % `);
expect(labelProvider.getLabel(fqi)).to.eq(`${dateStr} query-name (javascript) 2 repositories completed query-file.ql % `);
});
});
});