Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix/10036-duplicate-survey-triggers #10167

Open
wants to merge 21 commits into
base: develop
Choose a base branch
from

Conversation

aaemnnosttv
Copy link
Collaborator

@aaemnnosttv aaemnnosttv commented Feb 4, 2025

Summary

Addresses issue:

Relevant technical choices

  • Moves persisting survey timeout from dedicated endpoint to happen in handler for survey-trigger
  • Removes survey-timeout endpoint entirely
  • Includes various updates to tests that were needed as a result, including a few stability fixes
  • Adds coverage to PHP tests for surveys controller

Note: a few unrelated instabilities remain in JS + E2E tests

PR Author Checklist

  • My code is tested and passes existing unit tests.
  • My code has an appropriate set of unit tests which all pass.
  • My code is backward-compatible with WordPress 5.2 and PHP 7.4.
  • My code follows the WordPress coding standards.
  • My code has proper inline documentation.
  • I have added a QA Brief on the issue linked above.
  • I have signed the Contributor License Agreement (see https://cla.developers.google.com/).

Do not alter or remove anything below. The following sections will be managed by moderators only.

Code Reviewer Checklist

  • Run the code.
  • Ensure the acceptance criteria are satisfied.
  • Reassess the implementation with the IB.
  • Ensure no unrelated changes are included.
  • Ensure CI checks pass.
  • Check Storybook where applicable.
  • Ensure there is a QA Brief.
  • Ensure there are no unexpected significant changes to file sizes.

Merge Reviewer Checklist

  • Ensure the PR has the correct target branch.
  • Double-check that the PR is okay to be merged.
  • Ensure the corresponding issue has a ZenHub release assigned.
  • Add a changelog message to the issue.

Copy link

github-actions bot commented Feb 4, 2025

Build files for 256306d are ready:

Copy link

github-actions bot commented Feb 4, 2025

Size Change: +94 B (0%)

Total Size: 2 MB

Filename Size Change
./dist/assets/js/googlesitekit-ad-blocking-recovery-********************.js 54.1 kB -3 B (-0.01%)
./dist/assets/js/googlesitekit-data-********************.js 2.38 kB +1 B (+0.04%)
./dist/assets/js/googlesitekit-datastore-site-********************.js 20.2 kB +14 B (+0.07%)
./dist/assets/js/googlesitekit-datastore-user-********************.js 28.4 kB +173 B (+0.61%)
./dist/assets/js/googlesitekit-entity-dashboard-********************.js 82.8 kB -9 B (-0.01%)
./dist/assets/js/googlesitekit-modules-********************.js 22.4 kB +1 B (0%)
./dist/assets/js/googlesitekit-modules-ads-********************.js 36 kB -4 B (-0.01%)
./dist/assets/js/googlesitekit-modules-adsense-********************.js 119 kB -60 B (-0.05%)
./dist/assets/js/googlesitekit-modules-analytics-4-********************.js 192 kB -11 B (-0.01%)
./dist/assets/js/googlesitekit-modules-reader-revenue-manager-********************.js 41.1 kB -3 B (-0.01%)
./dist/assets/js/googlesitekit-modules-search-console-********************.js 69.4 kB +5 B (+0.01%)
./dist/assets/js/googlesitekit-modules-sign-in-with-google-********************.js 32.5 kB +6 B (+0.02%)
./dist/assets/js/googlesitekit-modules-tagmanager-********************.js 32.1 kB -16 B (-0.05%)
./dist/assets/js/googlesitekit-notifications-********************.js 43.3 kB +1 B (0%)
./dist/assets/js/googlesitekit-settings-********************.js 128 kB -2 B (0%)
./dist/assets/js/googlesitekit-wp-dashboard-********************.js 63.3 kB +1 B (0%)
ℹ️ View Unchanged
Filename Size
./dist/assets/css/googlesitekit-admin-css-********************.min.css 62.5 kB
./dist/assets/css/googlesitekit-adminbar-css-********************.min.css 11.8 kB
./dist/assets/css/googlesitekit-authorize-application-css-********************.min.css 846 B
./dist/assets/css/googlesitekit-wp-dashboard-css-********************.min.css 8.48 kB
./dist/assets/js/33-********************.js 2.76 kB
./dist/assets/js/34-********************.js 2.25 kB
./dist/assets/js/35-********************.js 3.64 kB
./dist/assets/js/36-********************.js 936 B
./dist/assets/js/37-********************.js 892 B
./dist/assets/js/38-********************.js 1.61 kB
./dist/assets/js/39-********************.js 1.57 kB
./dist/assets/js/40-********************.js 1.61 kB
./dist/assets/js/41-********************.js 1.59 kB
./dist/assets/js/42-********************.js 1.83 kB
./dist/assets/js/43-********************.js 3.12 kB
./dist/assets/js/analytics-advanced-tracking-********************.js 901 B
./dist/assets/js/googlesitekit-activation-********************.js 24.1 kB
./dist/assets/js/googlesitekit-adminbar-********************.js 35 kB
./dist/assets/js/googlesitekit-api-********************.js 10.1 kB
./dist/assets/js/googlesitekit-components-gm2-********************.js 6.41 kB
./dist/assets/js/googlesitekit-components-gm3-********************.js 10.1 kB
./dist/assets/js/googlesitekit-consent-mode-********************.js 25.6 kB
./dist/assets/js/googlesitekit-datastore-forms-********************.js 8.96 kB
./dist/assets/js/googlesitekit-datastore-location-********************.js 2.09 kB
./dist/assets/js/googlesitekit-datastore-ui-********************.js 10 kB
./dist/assets/js/googlesitekit-events-provider-contact-form-7-********************.js 646 B
./dist/assets/js/googlesitekit-events-provider-easy-digital-downloads-********************.js 624 B
./dist/assets/js/googlesitekit-events-provider-mailchimp-********************.js 630 B
./dist/assets/js/googlesitekit-events-provider-ninja-forms-********************.js 712 B
./dist/assets/js/googlesitekit-events-provider-optin-monster-********************.js 675 B
./dist/assets/js/googlesitekit-events-provider-popup-maker-********************.js 634 B
./dist/assets/js/googlesitekit-events-provider-woocommerce-********************.js 657 B
./dist/assets/js/googlesitekit-events-provider-wpforms-********************.js 633 B
./dist/assets/js/googlesitekit-i18n-********************.js 3.93 kB
./dist/assets/js/googlesitekit-main-dashboard-********************.js 163 kB
./dist/assets/js/googlesitekit-metric-selection-********************.js 52 kB
./dist/assets/js/googlesitekit-modules-pagespeed-insights-********************.js 22.7 kB
./dist/assets/js/googlesitekit-polyfills-********************.js 378 B
./dist/assets/js/googlesitekit-reader-revenue-manager-block-editor-********************.js 477 B
./dist/assets/js/googlesitekit-splash-********************.js 68.7 kB
./dist/assets/js/googlesitekit-user-input-********************.js 43.9 kB
./dist/assets/js/googlesitekit-vendor-********************.js 325 kB
./dist/assets/js/googlesitekit-widgets-********************.js 104 kB
./dist/assets/js/runtime-********************.js 1.4 kB

compressed-size-action

Comment on lines +47 to +51
jest.mock( 'react-use', () => ( {
...jest.requireActual( 'react-use' ),
useIntersection: () => ( {
isIntersecting: true,
} ),
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure how this wasn't broken before. The addition of requireActual here is something we do elsewhere and is necessary to preserve the normal function of other hooks from the package. Without this, the test was failing with useMountedState is not a function.

@@ -91,12 +86,6 @@ export default {
'^/google-site-kit/v1/core/user/data/survey-trigger'
)
);
fetchMock.postOnce(
new RegExp(
'^/google-site-kit/v1/core/user/data/survey-timeout'
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This endpoint has been entirely removed.

Comment on lines +121 to +123
yield commonActions.await(
dispatch( CORE_USER ).triggerSurvey( 'fpm_setup_completed' )
);
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While this seems unrelated, it fixes stability issues in other tests where submitChanges is awaited where additional arbitrary waits were necessary.

Comment on lines +42 to +45
const args = ttl ? { ttl } : {};
return API.set( 'core', 'user', 'survey-trigger', {
triggerID,
...args,
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I originally added the ttl unconditionally but it would have required many tests to be updated as there were several the have toHaveFetched with a specific body. Rather than modifying the tests to assert a partial (as some have been here), we pass it if it's a non-falsy value. It defaults to 0 and has no effect if it's not a positive value, so this should be safe.


function lockSurveyTrigger( triggerID ) {
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As simple "private" (self-describing) actions, these don't need doc blocks.

error: false,
};
} finally {
yield unlockSurveyTrigger( triggerID );
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This ensures the lock is always released regardless of when the return happens without duplicating throughout.

@@ -41,13 +37,8 @@ export const mockSurveyEndpoints = () => {
body: {},
} );

fetchMock.getOnce( surveyTimeoutEndpoint, {
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This mock was incorrect to start with since the survey-timeout endpoint was POST only – survey-timeouts has GET.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant