Skip to content

Commit

Permalink
Add RRM submitChanges function.
Browse files Browse the repository at this point in the history
  • Loading branch information
nfmohit committed Feb 17, 2025
1 parent da4d522 commit beb4197
Show file tree
Hide file tree
Showing 3 changed files with 144 additions and 12 deletions.
3 changes: 2 additions & 1 deletion assets/js/modules/reader-revenue-manager/datastore/base.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,11 @@
*/
import Modules from 'googlesitekit-modules';
import { MODULES_READER_REVENUE_MANAGER } from './constants';
import { validateCanSubmitChanges } from './settings';
import { submitChanges, validateCanSubmitChanges } from './settings';

export default Modules.createModuleStore( 'reader-revenue-manager', {
storeName: MODULES_READER_REVENUE_MANAGER,
submitChanges,
validateCanSubmitChanges,
ownedSettingsSlugs: [ 'publicationID' ],
settingSlugs: [
Expand Down
31 changes: 31 additions & 0 deletions assets/js/modules/reader-revenue-manager/datastore/settings.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import invariant from 'invariant';
/**
* Internal dependencies
*/
import API from 'googlesitekit-api';
import { MODULES_READER_REVENUE_MANAGER } from './constants';
import {
INVARIANT_DOING_SUBMIT_CHANGES,
Expand Down Expand Up @@ -128,3 +129,33 @@ export function validateCanSubmitChanges( select ) {
);
}
}

export async function submitChanges( { dispatch, select } ) {
const { getSnippetMode, hasSettingChanged, haveSettingsChanged } = select(
MODULES_READER_REVENUE_MANAGER
);

if ( haveSettingsChanged() ) {
if (
isFeatureEnabled( 'rrmModuleV2' ) &&
hasSettingChanged( 'postTypes' ) &&
'post_types' !== getSnippetMode()
) {
await dispatch( MODULES_READER_REVENUE_MANAGER ).rollbackSetting(
'postTypes'
);
}

const { error } = await dispatch(
MODULES_READER_REVENUE_MANAGER
).saveSettings();

if ( error ) {
return { error };
}
}

await API.invalidateCache( 'modules', 'reader-revenue-manager' );

return {};
}
122 changes: 111 additions & 11 deletions assets/js/modules/reader-revenue-manager/datastore/settings.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,21 @@ import {
describe( 'modules/reader-revenue-manager settings', () => {
let registry;

const settingsEndpoint = new RegExp(
'^/google-site-kit/v1/modules/reader-revenue-manager/data/settings'
);

const validSettings = {
publicationID: 'ABCDEFGH',
publicationOnboardingState: 'ONBOARDING_ACTION_REQUIRED',
publicationOnboardingStateChanged: false,
snippetMode: 'post_types',
postTypes: [ 'post' ],
productID: 'valid-id',
productIDs: [ 'valid' ],
paymentOption: 'valid-option',
};

beforeAll( () => {
API.setUsingCache( false );
} );
Expand All @@ -50,17 +65,6 @@ describe( 'modules/reader-revenue-manager settings', () => {
} );

describe( 'validateCanSubmitChanges', () => {
const validSettings = {
publicationID: 'ABCDEFGH',
publicationOnboardingState: 'ONBOARDING_ACTION_REQUIRED',
publicationOnboardingStateChanged: false,
snippetMode: 'post_types',
postTypes: [ 'post' ],
productID: 'valid-id',
productIDs: [ 'valid' ],
paymentOption: 'valid-option',
};

it( 'should throw invariant error for invalid publication ID of type number', () => {
const settings = {
...validSettings,
Expand Down Expand Up @@ -260,4 +264,100 @@ describe( 'modules/reader-revenue-manager settings', () => {
);
} );
} );

describe( 'submitChanges', () => {
it( 'should dispatch saveSettings', async () => {
registry
.dispatch( MODULES_READER_REVENUE_MANAGER )
.setSettings( validSettings );

fetchMock.postOnce( settingsEndpoint, {
body: validSettings,
status: 200,
} );

await registry
.dispatch( MODULES_READER_REVENUE_MANAGER )
.submitChanges();

expect( fetchMock ).toHaveFetched( settingsEndpoint, {
body: { data: validSettings },
} );

expect(
registry
.select( MODULES_READER_REVENUE_MANAGER )
.haveSettingsChanged()
).toBe( false );
} );

describe( 'with "rrmModuleV2" feature flag enabled', () => {
beforeEach( () => {
enabledFeatures.add( 'rrmModuleV2' );
} );

it( 'should save selected post types', async () => {
fetchMock.post( settingsEndpoint, {
body: {
...validSettings,
snippetMode: 'post_types',
postTypes: [ 'post', 'page' ],
},
status: 200,
} );

registry
.dispatch( MODULES_READER_REVENUE_MANAGER )
.setSettings( {
...validSettings,
snippetMode: 'post_types',
postTypes: [ 'post', 'page' ],
} );

await registry
.dispatch( MODULES_READER_REVENUE_MANAGER )
.submitChanges();

expect(
registry
.select( MODULES_READER_REVENUE_MANAGER )
.getPostTypes()
).toEqual( [ 'post', 'page' ] );
} );

it( 'should not save selected post types for a different snippet mode', async () => {
registry
.dispatch( MODULES_READER_REVENUE_MANAGER )
.receiveGetSettings( {
...validSettings,
snippetMode: 'post_types',
postTypes: [ 'post', 'page' ],
} );

fetchMock.post( settingsEndpoint, ( url, { body } ) => {
const { data } = JSON.parse( body );

return { body: data };
} );

registry
.dispatch( MODULES_READER_REVENUE_MANAGER )
.setSettings( {
...validSettings,
snippetMode: 'per_post',
postTypes: [ 'page' ],
} );

await registry
.dispatch( MODULES_READER_REVENUE_MANAGER )
.submitChanges();

expect(
registry
.select( MODULES_READER_REVENUE_MANAGER )
.getPostTypes()
).toEqual( [ 'post', 'page' ] );
} );
} );
} );
} );

0 comments on commit beb4197

Please sign in to comment.