diff --git a/client/components/data/query-jetpack-modules/index.jsx b/client/components/data/query-jetpack-modules/index.jsx index 9b8e0e0353d984..47462cac3de879 100644 --- a/client/components/data/query-jetpack-modules/index.jsx +++ b/client/components/data/query-jetpack-modules/index.jsx @@ -3,9 +3,14 @@ import { useEffect } from 'react'; import { useDispatch } from 'react-redux'; import { fetchModuleList } from 'calypso/state/jetpack/modules/actions'; import isFetchingJetpackModules from 'calypso/state/selectors/is-fetching-jetpack-modules'; +import isSiteWpcomAtomic from 'calypso/state/selectors/is-site-wpcom-atomic'; +import { isJetpackSite } from 'calypso/state/sites/selectors'; const request = ( siteId ) => ( dispatch, getState ) => { - if ( siteId && ! isFetchingJetpackModules( getState(), siteId ) ) { + const isJetpack = isJetpackSite( getState(), siteId ); + const isAtomic = isSiteWpcomAtomic( getState(), siteId ); + + if ( siteId && ! isFetchingJetpackModules( getState(), siteId ) && ( isAtomic || isJetpack ) ) { dispatch( fetchModuleList( siteId ) ); } }; diff --git a/client/components/data/query-jetpack-modules/test/query-jetpack-modules.jsx b/client/components/data/query-jetpack-modules/test/query-jetpack-modules.jsx new file mode 100644 index 00000000000000..d2699ee2a826ae --- /dev/null +++ b/client/components/data/query-jetpack-modules/test/query-jetpack-modules.jsx @@ -0,0 +1,91 @@ +/** + * @jest-environment jsdom + */ + +import { render } from '@testing-library/react'; +import { Provider } from 'react-redux'; +import configureStore from 'redux-mock-store'; +import thunk from 'redux-thunk'; +import QueryJetpackModules from 'calypso/components/data/query-jetpack-modules'; +const middlewares = [ thunk ]; + +const mockFetchModuleList = jest.fn( () => { + return { + type: 'JETPACK_MODULES_REQUEST', + siteId: 1, + }; +} ); + +jest.mock( 'calypso/state/jetpack/modules/actions', () => ( { + fetchModuleList: () => mockFetchModuleList(), +} ) ); + +let isWpcomAtomic = false; +let isJetpack = false; +const siteId = 1; +const mockStore = configureStore( middlewares ); + +function getStore() { + return mockStore( { + currentUser: { + id: 1, + }, + sites: { + items: { + [ siteId ]: { + ID: siteId, + options: { + is_wpcom_atomic: isWpcomAtomic, + }, + jetpack: isJetpack, + }, + }, + }, + jetpack: { + modules: { + fetching: false, + }, + }, + } ); +} + +describe( 'fetchModuleList', () => { + test( "Ensure we're NOT calling fetchModuleList for simple sites", async () => { + isWpcomAtomic = false; + isJetpack = false; + + render( + + + + ); + + expect( mockFetchModuleList ).not.toHaveBeenCalled(); + } ); + + test( "Ensure we're calling fetchModuleList for Atomic sites", async () => { + isWpcomAtomic = true; + isJetpack = true; + + render( + + + + ); + + expect( mockFetchModuleList ).toHaveBeenCalled(); + } ); + + test( "Ensure we're calling fetchModuleList for Jetpack Non Atomic sites", async () => { + isWpcomAtomic = false; + isJetpack = true; + + render( + + + + ); + + expect( mockFetchModuleList ).toHaveBeenCalledTimes( 2 ); + } ); +} );