Skip to content

Commit d66e7c6

Browse files
authored
Merge pull request #1837 from github/koesie10/fix-no-error-empty-repositories
Fix missing error message on repository selection
2 parents 597c9c4 + 7fd45ef commit d66e7c6

2 files changed

Lines changed: 59 additions & 7 deletions

File tree

extensions/ql-vscode/src/remote-queries/repository-selection.ts

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -78,15 +78,21 @@ export async function getRepositorySelection(
7878
options,
7979
);
8080

81-
if (quickpick?.repositories?.length) {
81+
if (!quickpick) {
82+
// We don't need to display a warning pop-up in this case, since the user just escaped out of the operation.
83+
// We set 'true' to make this a silent exception.
84+
throw new UserCancellationException("No repositories selected", true);
85+
}
86+
87+
if (quickpick.repositories?.length) {
8288
void extLogger.log(
8389
`Selected repositories: ${quickpick.repositories.join(", ")}`,
8490
);
8591
return { repositories: quickpick.repositories };
86-
} else if (quickpick?.repositoryList) {
92+
} else if (quickpick.repositoryList) {
8793
void extLogger.log(`Selected repository list: ${quickpick.repositoryList}`);
8894
return { repositoryLists: [quickpick.repositoryList] };
89-
} else if (quickpick?.useCustomRepo) {
95+
} else if (quickpick.useCustomRepo) {
9096
const customRepo = await getCustomRepo();
9197
if (customRepo === undefined) {
9298
// The user cancelled, do nothing.
@@ -99,7 +105,7 @@ export async function getRepositorySelection(
99105
}
100106
void extLogger.log(`Entered repository: ${customRepo}`);
101107
return { repositories: [customRepo] };
102-
} else if (quickpick?.useAllReposOfOwner) {
108+
} else if (quickpick.useAllReposOfOwner) {
103109
const owner = await getOwner();
104110
if (owner === undefined) {
105111
// The user cancelled, do nothing.
@@ -111,9 +117,9 @@ export async function getRepositorySelection(
111117
void extLogger.log(`Entered owner: ${owner}`);
112118
return { owners: [owner] };
113119
} else {
114-
// We don't need to display a warning pop-up in this case, since the user just escaped out of the operation.
115-
// We set 'true' to make this a silent exception.
116-
throw new UserCancellationException("No repositories selected", true);
120+
// This means the user has selected something, but there is nothing actually linked to this item. We want to show
121+
// this to the user.
122+
throw new UserCancellationException("No repositories selected", false);
117123
}
118124
}
119125

extensions/ql-vscode/src/vscode-tests/no-workspace/remote-queries/repository-selection.test.ts

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,28 @@ describe("repository selection", () => {
159159
expect(repoSelection.owners).toBeUndefined();
160160
expect(repoSelection.repositories).toEqual(["foo/bar", "foo/baz"]);
161161
});
162+
163+
it("should return an error for an empty repository list", async () => {
164+
// Fake return values
165+
quickPickSpy.mockResolvedValue({
166+
repositories: [],
167+
} as unknown as QuickPickItem);
168+
getRemoteRepositoryListsSpy.mockReturnValue({
169+
list1: ["foo/bar", "foo/baz"],
170+
list2: [],
171+
});
172+
173+
await expect(getRepositorySelection()).rejects.toThrow(
174+
"No repositories selected",
175+
);
176+
await expect(getRepositorySelection()).rejects.toThrow(
177+
UserCancellationException,
178+
);
179+
await expect(getRepositorySelection()).rejects.toHaveProperty(
180+
"silent",
181+
false,
182+
);
183+
});
162184
});
163185

164186
describe("system level repo lists", () => {
@@ -243,6 +265,10 @@ describe("repository selection", () => {
243265
await expect(getRepositorySelection()).rejects.toThrow(
244266
UserCancellationException,
245267
);
268+
await expect(getRepositorySelection()).rejects.toHaveProperty(
269+
"silent",
270+
true,
271+
);
246272
});
247273
});
248274

@@ -313,6 +339,10 @@ describe("repository selection", () => {
313339
await expect(getRepositorySelection()).rejects.toThrow(
314340
UserCancellationException,
315341
);
342+
await expect(getRepositorySelection()).rejects.toHaveProperty(
343+
"silent",
344+
true,
345+
);
316346
});
317347
});
318348

@@ -407,5 +437,21 @@ describe("repository selection", () => {
407437
expect(repoSelection.repositories).toEqual(["owner3/repo3"]);
408438
});
409439
});
440+
441+
it("should allow the user to cancel", async () => {
442+
// Fake return values
443+
quickPickSpy.mockResolvedValue(undefined);
444+
445+
await expect(getRepositorySelection()).rejects.toThrow(
446+
"No repositories selected",
447+
);
448+
await expect(getRepositorySelection()).rejects.toThrow(
449+
UserCancellationException,
450+
);
451+
await expect(getRepositorySelection()).rejects.toHaveProperty(
452+
"silent",
453+
true,
454+
);
455+
});
410456
});
411457
});

0 commit comments

Comments
 (0)