Skip to content

Commit e322bf8

Browse files
authored
Add db manager tests for "removeDbItem" functionality (#1948)
1 parent 67fa920 commit e322bf8

1 file changed

Lines changed: 223 additions & 22 deletions

File tree

extensions/ql-vscode/test/unit-tests/databases/db-manager.test.ts

Lines changed: 223 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,21 @@
11
import { ensureDir, readJSON, remove, writeJson } from "fs-extra";
22
import { join } from "path";
3-
import { DbConfig } from "../../../src/databases/config/db-config";
3+
import {
4+
DbConfig,
5+
SelectedDbItemKind,
6+
} from "../../../src/databases/config/db-config";
47
import { DbConfigStore } from "../../../src/databases/config/db-config-store";
58
import {
69
flattenDbItems,
710
isLocalDatabaseDbItem,
811
isLocalListDbItem,
12+
isRemoteOwnerDbItem,
13+
isRemoteRepoDbItem,
914
isRemoteUserDefinedListDbItem,
1015
LocalDatabaseDbItem,
1116
LocalListDbItem,
17+
RemoteOwnerDbItem,
18+
RemoteRepoDbItem,
1219
RemoteUserDefinedListDbItem,
1320
} from "../../../src/databases/db-item";
1421
import { DbManager } from "../../../src/databases/db-manager";
@@ -27,7 +34,7 @@ describe("db manager", () => {
2734
let dbConfigFilePath: string;
2835

2936
beforeEach(async () => {
30-
tempWorkspaceStoragePath = join(__dirname, "test-workspace");
37+
tempWorkspaceStoragePath = join(__dirname, "db-manager-test-workspace");
3138

3239
const extensionPath = join(__dirname, "../../..");
3340
const app = createMockApp({
@@ -63,17 +70,18 @@ describe("db manager", () => {
6370
databases: [localDb],
6471
};
6572

66-
it("should rename remote db list", async () => {
73+
it("should rename remote user-defined list", async () => {
6774
const dbConfig = createDbConfig({
6875
remoteLists: [remoteList],
6976
localLists: [localList],
7077
});
7178

7279
await saveDbConfig(dbConfig);
7380

74-
const dbItem = getRemoteUserDefinedListDbItem("my-list-1");
81+
const remoteListDbItems = getRemoteUserDefinedListDbItems("my-list-1");
82+
expect(remoteListDbItems.length).toEqual(1);
7583

76-
await dbManager.renameList(dbItem, "my-list-2");
84+
await dbManager.renameList(remoteListDbItems[0], "my-list-2");
7785

7886
const dbConfigFileContents = await readDbConfigDirectly();
7987

@@ -102,9 +110,10 @@ describe("db manager", () => {
102110

103111
await saveDbConfig(dbConfig);
104112

105-
const dbItem = getLocalListDbItem("my-list-1");
113+
const localListDbItems = getLocalListDbItems("my-list-1");
114+
expect(localListDbItems.length).toEqual(1);
106115

107-
await dbManager.renameList(dbItem, "my-list-2");
116+
await dbManager.renameList(localListDbItems[0], "my-list-2");
108117

109118
const dbConfigFileContents = await readDbConfigDirectly();
110119

@@ -133,9 +142,10 @@ describe("db manager", () => {
133142

134143
await saveDbConfig(dbConfig);
135144

136-
const dbItem = getLocalDatabaseDbItem("db1");
145+
const localDbItems = getLocalDatabaseDbItems("db1");
146+
expect(localDbItems.length).toEqual(1);
137147

138-
await dbManager.renameLocalDb(dbItem, "db2");
148+
await dbManager.renameLocalDb(localDbItems[0], "db2");
139149

140150
const dbConfigFileContents = await readDbConfigDirectly();
141151

@@ -161,9 +171,10 @@ describe("db manager", () => {
161171

162172
await saveDbConfig(dbConfig);
163173

164-
const dbItem = getLocalDatabaseDbItem("db1", "my-list-1");
174+
const localDbItems = getLocalDatabaseDbItems("db1", "my-list-1");
175+
expect(localDbItems.length).toEqual(1);
165176

166-
await dbManager.renameLocalDb(dbItem, "db2");
177+
await dbManager.renameLocalDb(localDbItems[0], "db2");
167178

168179
const dbConfigFileContents = await readDbConfigDirectly();
169180

@@ -180,6 +191,173 @@ describe("db manager", () => {
180191
});
181192
});
182193

194+
describe("removing items", () => {
195+
const remoteRepo1 = "owner1/repo1";
196+
const remoteRepo2 = "owner1/repo2";
197+
const remoteList = {
198+
name: "my-list-1",
199+
repositories: [remoteRepo1, remoteRepo2],
200+
};
201+
const remoteOwner = "owner1";
202+
const localDb = createLocalDbConfigItem({ name: "db1" });
203+
const localList = {
204+
name: "my-list-1",
205+
databases: [localDb],
206+
};
207+
const dbConfig = createDbConfig({
208+
remoteLists: [remoteList],
209+
remoteOwners: [remoteOwner],
210+
remoteRepos: [remoteRepo1, remoteRepo2],
211+
localLists: [localList],
212+
localDbs: [localDb],
213+
selected: {
214+
kind: SelectedDbItemKind.RemoteUserDefinedList,
215+
listName: remoteList.name,
216+
},
217+
});
218+
219+
it("should remove remote user-defined list", async () => {
220+
await saveDbConfig(dbConfig);
221+
222+
const remoteListDbItems = getRemoteUserDefinedListDbItems("my-list-1");
223+
expect(remoteListDbItems.length).toEqual(1);
224+
225+
await dbManager.removeDbItem(remoteListDbItems[0]);
226+
227+
const dbConfigFileContents = await readDbConfigDirectly();
228+
229+
expect(dbConfigFileContents).toEqual({
230+
databases: {
231+
remote: {
232+
repositoryLists: [],
233+
repositories: [remoteRepo1, remoteRepo2],
234+
owners: [remoteOwner],
235+
},
236+
local: {
237+
lists: [localList],
238+
databases: [localDb],
239+
},
240+
},
241+
});
242+
});
243+
244+
it("should remove remote repo", async () => {
245+
await saveDbConfig(dbConfig);
246+
247+
const remoteRepoDbItems = getRemoteRepoDbItems("owner1/repo1");
248+
expect(remoteRepoDbItems.length).toBe(1);
249+
250+
await dbManager.removeDbItem(remoteRepoDbItems[0]);
251+
252+
const dbConfigFileContents = await readDbConfigDirectly();
253+
254+
expect(dbConfigFileContents).toEqual({
255+
databases: {
256+
remote: {
257+
repositoryLists: [remoteList],
258+
repositories: [remoteRepo2],
259+
owners: [remoteOwner],
260+
},
261+
local: {
262+
lists: [localList],
263+
databases: [localDb],
264+
},
265+
},
266+
selected: {
267+
kind: SelectedDbItemKind.RemoteUserDefinedList,
268+
listName: remoteList.name,
269+
},
270+
});
271+
});
272+
273+
it("should remove remote owner", async () => {
274+
await saveDbConfig(dbConfig);
275+
276+
const remoteOwnerDbItems = getRemoteOwnerDbItems("owner1");
277+
expect(remoteOwnerDbItems.length).toEqual(1);
278+
279+
await dbManager.removeDbItem(remoteOwnerDbItems[0]);
280+
281+
const dbConfigFileContents = await readDbConfigDirectly();
282+
283+
expect(dbConfigFileContents).toEqual({
284+
databases: {
285+
remote: {
286+
repositoryLists: [remoteList],
287+
repositories: [remoteRepo1, remoteRepo2],
288+
owners: [],
289+
},
290+
local: {
291+
lists: [localList],
292+
databases: [localDb],
293+
},
294+
},
295+
selected: {
296+
kind: SelectedDbItemKind.RemoteUserDefinedList,
297+
listName: remoteList.name,
298+
},
299+
});
300+
});
301+
302+
it("should remove local db list", async () => {
303+
await saveDbConfig(dbConfig);
304+
305+
const localListDbItems = getLocalListDbItems("my-list-1");
306+
expect(localListDbItems.length).toEqual(1);
307+
308+
await dbManager.removeDbItem(localListDbItems[0]);
309+
310+
const dbConfigFileContents = await readDbConfigDirectly();
311+
312+
expect(dbConfigFileContents).toEqual({
313+
databases: {
314+
remote: {
315+
repositoryLists: [remoteList],
316+
repositories: [remoteRepo1, remoteRepo2],
317+
owners: [remoteOwner],
318+
},
319+
local: {
320+
lists: [],
321+
databases: [localDb],
322+
},
323+
},
324+
selected: {
325+
kind: SelectedDbItemKind.RemoteUserDefinedList,
326+
listName: remoteList.name,
327+
},
328+
});
329+
});
330+
331+
it("should remove local database", async () => {
332+
await saveDbConfig(dbConfig);
333+
334+
const localDbItems = getLocalDatabaseDbItems("db1");
335+
expect(localDbItems.length).toEqual(1);
336+
337+
await dbManager.removeDbItem(localDbItems[0]);
338+
339+
const dbConfigFileContents = await readDbConfigDirectly();
340+
341+
expect(dbConfigFileContents).toEqual({
342+
databases: {
343+
remote: {
344+
repositoryLists: [remoteList],
345+
repositories: [remoteRepo1, remoteRepo2],
346+
owners: [remoteOwner],
347+
},
348+
local: {
349+
lists: [localList],
350+
databases: [],
351+
},
352+
},
353+
selected: {
354+
kind: SelectedDbItemKind.RemoteUserDefinedList,
355+
listName: remoteList.name,
356+
},
357+
});
358+
});
359+
});
360+
183361
async function saveDbConfig(dbConfig: DbConfig): Promise<void> {
184362
await writeJson(dbConfigFilePath, dbConfig);
185363

@@ -194,21 +372,20 @@ describe("db manager", () => {
194372
return (await readJSON(dbConfigFilePath)) as DbConfig;
195373
}
196374

197-
function getLocalListDbItem(listName: string): LocalListDbItem {
375+
function getLocalListDbItems(listName: string): LocalListDbItem[] {
198376
const dbItemsResult = dbManager.getDbItems();
199377
const dbItems = flattenDbItems(dbItemsResult.value);
200378
const listDbItems = dbItems
201379
.filter(isLocalListDbItem)
202380
.filter((i) => i.listName === listName);
203381

204-
expect(listDbItems.length).toEqual(1);
205-
return listDbItems[0];
382+
return listDbItems;
206383
}
207384

208-
function getLocalDatabaseDbItem(
385+
function getLocalDatabaseDbItems(
209386
dbName: string,
210387
parentListName?: string,
211-
): LocalDatabaseDbItem {
388+
): LocalDatabaseDbItem[] {
212389
const dbItemsResult = dbManager.getDbItems();
213390
const dbItems = flattenDbItems(dbItemsResult.value);
214391
const localDbItems = dbItems
@@ -217,20 +394,44 @@ describe("db manager", () => {
217394
(i) => i.databaseName === dbName && i.parentListName === parentListName,
218395
);
219396

220-
expect(localDbItems.length).toEqual(1);
221-
return localDbItems[0];
397+
return localDbItems;
398+
}
399+
400+
function getRemoteRepoDbItems(
401+
repoName: string,
402+
parentListName?: string,
403+
): RemoteRepoDbItem[] {
404+
const dbItemsResult = dbManager.getDbItems();
405+
const dbItems = flattenDbItems(dbItemsResult.value);
406+
const repoDbItems = dbItems
407+
.filter(isRemoteRepoDbItem)
408+
.filter(
409+
(i) =>
410+
i.repoFullName === repoName && i.parentListName === parentListName,
411+
);
412+
413+
return repoDbItems;
414+
}
415+
416+
function getRemoteOwnerDbItems(ownerName: string): RemoteOwnerDbItem[] {
417+
const dbItemsResult = dbManager.getDbItems();
418+
const dbItems = flattenDbItems(dbItemsResult.value);
419+
const ownerDbItems = dbItems
420+
.filter(isRemoteOwnerDbItem)
421+
.filter((i) => i.ownerName === ownerName);
422+
423+
return ownerDbItems;
222424
}
223425

224-
function getRemoteUserDefinedListDbItem(
426+
function getRemoteUserDefinedListDbItems(
225427
listName: string,
226-
): RemoteUserDefinedListDbItem {
428+
): RemoteUserDefinedListDbItem[] {
227429
const dbItemsResult = dbManager.getDbItems();
228430
const dbItems = flattenDbItems(dbItemsResult.value);
229431
const listDbItems = dbItems
230432
.filter(isRemoteUserDefinedListDbItem)
231433
.filter((i) => i.listName === listName);
232434

233-
expect(listDbItems.length).toEqual(1);
234-
return listDbItems[0];
435+
return listDbItems;
235436
}
236437
});

0 commit comments

Comments
 (0)