11import { ensureDir , readJSON , remove , writeJson } from "fs-extra" ;
22import { 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" ;
47import { DbConfigStore } from "../../../src/databases/config/db-config-store" ;
58import {
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" ;
1421import { 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