33 * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
44 * SPDX-License-Identifier: AGPL-3.0-or-later
55 */
6- import { basename } from 'path'
6+
7+ import type { Folder as CFolder , Navigation } from '@nextcloud/files'
8+
79import { expect } from '@jest/globals'
8- import { Folder , Navigation , getNavigation } from '@nextcloud/files'
10+ import * as filesUtils from '@nextcloud/files'
911import { CancelablePromise } from 'cancelable-promise'
10- import eventBus , { emit } from '@nextcloud/event-bus'
11- import * as initialState from '@nextcloud/initial-state '
12+ import * as eventBus from '@nextcloud/event-bus'
13+ import { basename } from 'path '
1214
1315import { action } from '../actions/favoriteAction'
1416import * as favoritesService from '../services/Favorites'
15- import registerFavoritesView from './favorites'
17+ import { registerFavoritesView } from './favorites'
18+
19+ const { Folder, getNavigation } = filesUtils
20+
21+ jest . mock ( '@nextcloud/axios' , ( ) => ( {
22+ post : jest . fn ( ) ,
23+ } ) )
1624
1725jest . mock ( 'webdav/dist/node/request.js' , ( ) => ( {
1826 request : jest . fn ( ) ,
1927} ) )
2028
29+ jest . mock ( '@nextcloud/files' , ( ) => ( {
30+ __esModule : true ,
31+ ...jest . requireActual ( '@nextcloud/files' ) ,
32+ } ) )
33+
34+ jest . mock ( '@nextcloud/event-bus' , ( ) => ( {
35+ __esModule : true ,
36+ ...jest . requireActual ( '@nextcloud/event-bus' ) ,
37+ } ) )
38+
2139window . OC = {
2240 ...window . OC ,
2341 TAG_FAVORITE : '_$!<Favorite>!$_' ,
@@ -40,11 +58,12 @@ describe('Favorites view definition', () => {
4058 delete window . _nc_navigation
4159 } )
4260
43- test ( 'Default empty favorite view' , ( ) => {
61+ test ( 'Default empty favorite view' , async ( ) => {
4462 jest . spyOn ( eventBus , 'subscribe' )
45- jest . spyOn ( favoritesService , 'getContents' ) . mockReturnValue ( CancelablePromise . resolve ( { folder : { } as Folder , contents : [ ] } ) )
63+ jest . spyOn ( filesUtils , 'getFavoriteNodes' ) . mockReturnValue ( CancelablePromise . resolve ( [ ] ) )
64+ jest . spyOn ( favoritesService , 'getContents' ) . mockReturnValue ( CancelablePromise . resolve ( { folder : { } as CFolder , contents : [ ] } ) )
4665
47- registerFavoritesView ( )
66+ await registerFavoritesView ( )
4867 const favoritesView = Navigation . views . find ( view => view . id === 'favorites' )
4968 const favoriteFoldersViews = Navigation . views . filter ( view => view . parent === 'favorites' )
5069
@@ -67,16 +86,31 @@ describe('Favorites view definition', () => {
6786 expect ( favoritesView ?. getContents ) . toBeDefined ( )
6887 } )
6988
70- test ( 'Default with favorites' , ( ) => {
89+ test ( 'Default with favorites' , async ( ) => {
7190 const favoriteFolders = [
72- { fileid : 1 , path : '/foo' } ,
73- { fileid : 2 , path : '/bar' } ,
74- { fileid : 3 , path : '/foo/bar' } ,
91+ new Folder ( {
92+ id : 1 ,
93+ root : '/files/admin' ,
94+ source : 'http://nextcloud.local/remote.php/dav/files/admin/foo' ,
95+ owner : 'admin' ,
96+ } ) ,
97+ new Folder ( {
98+ id : 2 ,
99+ root : '/files/admin' ,
100+ source : 'http://nextcloud.local/remote.php/dav/files/admin/bar' ,
101+ owner : 'admin' ,
102+ } ) ,
103+ new Folder ( {
104+ id : 3 ,
105+ root : '/files/admin' ,
106+ source : 'http://nextcloud.local/remote.php/dav/files/admin/foo/bar' ,
107+ owner : 'admin' ,
108+ } ) ,
75109 ]
76- jest . spyOn ( initialState , 'loadState ' ) . mockReturnValue ( favoriteFolders )
77- jest . spyOn ( favoritesService , 'getContents' ) . mockReturnValue ( CancelablePromise . resolve ( { folder : { } as Folder , contents : [ ] } ) )
110+ jest . spyOn ( filesUtils , 'getFavoriteNodes ' ) . mockReturnValue ( CancelablePromise . resolve ( favoriteFolders ) )
111+ jest . spyOn ( favoritesService , 'getContents' ) . mockReturnValue ( CancelablePromise . resolve ( { folder : { } as CFolder , contents : [ ] } ) )
78112
79- registerFavoritesView ( )
113+ await registerFavoritesView ( )
80114 const favoritesView = Navigation . views . find ( view => view . id === 'favorites' )
81115 const favoriteFoldersViews = Navigation . views . filter ( view => view . parent === 'favorites' )
82116
@@ -94,7 +128,7 @@ describe('Favorites view definition', () => {
94128 expect ( favoriteView ?. order ) . toBe ( index )
95129 expect ( favoriteView ?. params ) . toStrictEqual ( {
96130 dir : folder . path ,
97- fileid : folder . fileid . toString ( ) ,
131+ fileid : String ( folder . fileid ) ,
98132 view : 'favorites' ,
99133 } )
100134 expect ( favoriteView ?. parent ) . toBe ( 'favorites' )
@@ -116,10 +150,10 @@ describe('Dynamic update of favourite folders', () => {
116150
117151 test ( 'Add a favorite folder creates a new entry in the navigation' , async ( ) => {
118152 jest . spyOn ( eventBus , 'emit' )
119- jest . spyOn ( initialState , 'loadState ' ) . mockReturnValue ( [ ] )
120- jest . spyOn ( favoritesService , 'getContents' ) . mockReturnValue ( CancelablePromise . resolve ( { folder : { } as Folder , contents : [ ] } ) )
153+ jest . spyOn ( filesUtils , 'getFavoriteNodes ' ) . mockReturnValue ( CancelablePromise . resolve ( [ ] ) )
154+ jest . spyOn ( favoritesService , 'getContents' ) . mockReturnValue ( CancelablePromise . resolve ( { folder : { } as CFolder , contents : [ ] } ) )
121155
122- registerFavoritesView ( )
156+ await registerFavoritesView ( )
123157 const favoritesView = Navigation . views . find ( view => view . id === 'favorites' )
124158 const favoriteFoldersViews = Navigation . views . filter ( view => view . parent === 'favorites' )
125159
@@ -145,10 +179,17 @@ describe('Dynamic update of favourite folders', () => {
145179 test ( 'Remove a favorite folder remove the entry from the navigation column' , async ( ) => {
146180 jest . spyOn ( eventBus , 'emit' )
147181 jest . spyOn ( eventBus , 'subscribe' )
148- jest . spyOn ( initialState , 'loadState' ) . mockReturnValue ( [ { fileid : 42 , path : '/Foo/Bar' } ] )
149- jest . spyOn ( favoritesService , 'getContents' ) . mockReturnValue ( CancelablePromise . resolve ( { folder : { } as Folder , contents : [ ] } ) )
150-
151- registerFavoritesView ( )
182+ jest . spyOn ( filesUtils , 'getFavoriteNodes' ) . mockReturnValue ( CancelablePromise . resolve ( [
183+ new Folder ( {
184+ id : 42 ,
185+ root : '/files/admin' ,
186+ source : 'http://nextcloud.local/remote.php/dav/files/admin/Foo/Bar' ,
187+ owner : 'admin' ,
188+ } ) ,
189+ ] ) )
190+ jest . spyOn ( favoritesService , 'getContents' ) . mockReturnValue ( CancelablePromise . resolve ( { folder : { } as CFolder , contents : [ ] } ) )
191+
192+ await registerFavoritesView ( )
152193 let favoritesView = Navigation . views . find ( view => view . id === 'favorites' )
153194 let favoriteFoldersViews = Navigation . views . filter ( view => view . parent === 'favorites' )
154195
@@ -185,10 +226,10 @@ describe('Dynamic update of favourite folders', () => {
185226
186227 test ( 'Renaming a favorite folder updates the navigation' , async ( ) => {
187228 jest . spyOn ( eventBus , 'emit' )
188- jest . spyOn ( initialState , 'loadState ' ) . mockReturnValue ( [ ] )
189- jest . spyOn ( favoritesService , 'getContents' ) . mockReturnValue ( CancelablePromise . resolve ( { folder : { } as Folder , contents : [ ] } ) )
229+ jest . spyOn ( filesUtils , 'getFavoriteNodes ' ) . mockReturnValue ( CancelablePromise . resolve ( [ ] ) )
230+ jest . spyOn ( favoritesService , 'getContents' ) . mockReturnValue ( CancelablePromise . resolve ( { folder : { } as CFolder , contents : [ ] } ) )
190231
191- registerFavoritesView ( )
232+ await registerFavoritesView ( )
192233 const favoritesView = Navigation . views . find ( view => view . id === 'favorites' )
193234 const favoriteFoldersViews = Navigation . views . filter ( view => view . parent === 'favorites' )
194235
@@ -218,7 +259,7 @@ describe('Dynamic update of favourite folders', () => {
218259 } )
219260
220261 // Exec the rename action
221- emit ( 'files:node:renamed' , renamedFolder )
262+ eventBus . emit ( 'files:node:renamed' , renamedFolder )
222263 expect ( eventBus . emit ) . toHaveBeenNthCalledWith ( 2 , 'files:node:renamed' , renamedFolder )
223264 } )
224265} )
0 commit comments