@@ -3,20 +3,30 @@ import { configureStore } from '@reduxjs/toolkit';
33import { renderHook , act } from '@testing-library/react' ;
44import nock from 'nock' ;
55import { Provider } from 'react-redux' ;
6+ import { useSyncSites } from 'src/hooks/sync-sites' ;
67import { useAddSite } from 'src/hooks/use-add-site' ;
8+ import { useContentTabs } from 'src/hooks/use-content-tabs' ;
79import { useSiteDetails } from 'src/hooks/use-site-details' ;
810import { getWordPressProvider } from 'src/lib/wordpress-provider' ;
911import providerConstantsReducer from 'src/stores/provider-constants-slice' ;
12+ import { useConnectedSitesOperations } from 'src/stores/sync' ;
13+ import type { SyncSite } from 'src/hooks/use-fetch-wpcom-sites/types' ;
1014
1115jest . mock ( 'src/hooks/use-site-details' ) ;
1216jest . mock ( 'src/hooks/use-feature-flags' ) ;
17+ jest . mock ( 'src/hooks/sync-sites' ) ;
18+ jest . mock ( 'src/hooks/use-content-tabs' ) ;
1319jest . mock ( 'src/hooks/use-import-export' , ( ) => ( {
1420 useImportExport : ( ) => ( {
1521 importFile : jest . fn ( ) ,
1622 clearImportState : jest . fn ( ) ,
1723 } ) ,
1824} ) ) ;
1925
26+ jest . mock ( 'src/stores/sync' , ( ) => ( {
27+ useConnectedSitesOperations : jest . fn ( ) ,
28+ } ) ) ;
29+
2030jest . mock ( 'src/lib/get-ipc-api' , ( ) => ( {
2131 getIpcApi : ( ) => ( {
2232 generateProposedSitePath : jest . fn ( ) . mockResolvedValue ( {
@@ -62,6 +72,9 @@ describe( 'useAddSite', () => {
6272 const mockCreateSite = jest . fn ( ) ;
6373 const mockUpdateSite = jest . fn ( ) ;
6474 const mockStartServer = jest . fn ( ) ;
75+ const mockConnectSite = jest . fn ( ) ;
76+ const mockPullSite = jest . fn ( ) ;
77+ const mockSetSelectedTab = jest . fn ( ) ;
6578
6679 beforeEach ( ( ) => {
6780 jest . clearAllMocks ( ) ;
@@ -74,6 +87,38 @@ describe( 'useAddSite', () => {
7487 startServer : mockStartServer ,
7588 } ) ;
7689
90+ mockConnectSite . mockResolvedValue ( undefined ) ;
91+
92+ ( useConnectedSitesOperations as jest . Mock ) . mockReturnValue ( {
93+ connectSite : mockConnectSite ,
94+ } ) ;
95+
96+ mockPullSite . mockReset ( ) ;
97+ ( useSyncSites as jest . Mock ) . mockReturnValue ( {
98+ pullSite : mockPullSite ,
99+ syncSites : [ ] ,
100+ refetchSites : jest . fn ( ) ,
101+ isFetching : false ,
102+ isAnySitePulling : false ,
103+ isSiteIdPulling : jest . fn ( ) ,
104+ clearPullState : jest . fn ( ) ,
105+ cancelPull : jest . fn ( ) ,
106+ getPullState : jest . fn ( ) ,
107+ pushSite : jest . fn ( ) ,
108+ isAnySitePushing : false ,
109+ isSiteIdPushing : jest . fn ( ) ,
110+ clearPushState : jest . fn ( ) ,
111+ getPushState : jest . fn ( ) ,
112+ getLastSyncTimeText : jest . fn ( ) ,
113+ } ) ;
114+
115+ mockSetSelectedTab . mockReset ( ) ;
116+ ( useContentTabs as jest . Mock ) . mockReturnValue ( {
117+ selectedTab : 'overview' ,
118+ setSelectedTab : mockSetSelectedTab ,
119+ tabs : [ ] ,
120+ } ) ;
121+
77122 nock ( 'https://api.wordpress.org' )
78123 . get ( '/core/version-check/1.7/' )
79124 . query ( { channel : 'beta' , version : '5.9.9' } )
@@ -210,4 +255,51 @@ describe( 'useAddSite', () => {
210255 wpVersion,
211256 } ) ;
212257 } ) ;
258+
259+ it ( 'should connect and start pulling when a remote site is selected' , async ( ) => {
260+ const remoteSite : SyncSite = {
261+ id : 123 ,
262+ localSiteId : 'remote-site-id' ,
263+ name : 'Remote Site' ,
264+ url : 'https://example.com' ,
265+ isStaging : false ,
266+ isPressable : false ,
267+ environmentType : null ,
268+ syncSupport : 'syncable' ,
269+ lastPullTimestamp : null ,
270+ lastPushTimestamp : null ,
271+ } ;
272+
273+ const createdSite = {
274+ id : 'local-id' ,
275+ name : 'New Site' ,
276+ path : '/test/path' ,
277+ wpVersion : 'latest' ,
278+ phpVersion : '8.3' ,
279+ } ;
280+
281+ mockCreateSite . mockImplementation (
282+ ( path , name , version , customDomain , enableHttps , blueprint , callback ) => {
283+ callback ( createdSite ) ;
284+ return Promise . resolve ( ) ;
285+ }
286+ ) ;
287+
288+ const { result } = renderHookWithProvider ( ( ) => useAddSite ( ) ) ;
289+
290+ act ( ( ) => {
291+ result . current . setSelectedRemoteSite ( remoteSite ) ;
292+ result . current . setSitePath ( createdSite . path ) ;
293+ } ) ;
294+
295+ await act ( async ( ) => {
296+ await result . current . handleAddSiteClick ( ) ;
297+ } ) ;
298+
299+ expect ( mockConnectSite ) . toHaveBeenCalledWith ( remoteSite , createdSite . id ) ;
300+ expect ( mockPullSite ) . toHaveBeenCalledWith ( remoteSite , createdSite , {
301+ optionsToSync : [ 'all' ] ,
302+ } ) ;
303+ expect ( mockSetSelectedTab ) . toHaveBeenCalledWith ( 'sync' ) ;
304+ } ) ;
213305} ) ;
0 commit comments