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 );
+ } );
+} );