Commit 8a87cc1ef16 for woocommerce
commit 8a87cc1ef160190fb6a87df08fea12dcb950a53d
Author: Herman <KokkieH@users.noreply.github.com>
Date: Tue Sep 29 16:33:13 2026 +0200
Update newsletter opt-in wording and link to Privacy Policy (#69201)
* Update newsletter opt-in wording and link to Privacy Policy
* Add changefile(s) from automation for the following project(s): woocommerce, woocommerce/client/admin
---------
Co-authored-by: woocommercebot <woocommercebot@users.noreply.github.com>
diff --git a/plugins/woocommerce/changelog/69201-update-wccom-2980-newsletter-opt-in-wording b/plugins/woocommerce/changelog/69201-update-wccom-2980-newsletter-opt-in-wording
new file mode 100644
index 00000000000..8dc7db1ab28
--- /dev/null
+++ b/plugins/woocommerce/changelog/69201-update-wccom-2980-newsletter-opt-in-wording
@@ -0,0 +1,4 @@
+Significance: minor
+Type: tweak
+
+Update copy and add privacy policy link to newsletter opt-in in the onboarding profiler.
diff --git a/plugins/woocommerce/client/admin/client/core-profiler/pages/BusinessInfo.tsx b/plugins/woocommerce/client/admin/client/core-profiler/pages/BusinessInfo.tsx
index 2b28bf8216a..8c808873d8d 100644
--- a/plugins/woocommerce/client/admin/client/core-profiler/pages/BusinessInfo.tsx
+++ b/plugins/woocommerce/client/admin/client/core-profiler/pages/BusinessInfo.tsx
@@ -29,6 +29,7 @@ import { BusinessInfoEvent } from '../events';
import { CountryStateOption } from '../services/country';
import { Heading } from '../components/heading/heading';
import { Navigation } from '../components/navigation/navigation';
+import { TrackedLink } from '~/components/tracked-link/tracked-link';
import { GeolocationCountrySelect } from '../components/geolocation-country-select/geolocation-country-select';
/** These are some store names that are known to be set by default and not likely to be used as actual names */
@@ -385,10 +386,20 @@ export const BusinessInfo = ( {
<CheckboxControl
__nextHasNoMarginBottom
className="core-profiler__checkbox"
- label={ __(
- 'Opt-in to receive tips, discounts, and recommendations from the Woo team directly in your inbox.',
- 'woocommerce'
- ) }
+ // @ts-expect-error - Type definition is not correct. Label can be a string or JSX.Element.
+ label={
+ <TrackedLink
+ message={ __(
+ // translators: {{Link}} is a placeholder for a html element.
+ 'Get tips, discounts, and recommendations from Woo. You can opt out at any time. We track email opens and clicks to improve our emails. See our {{Link}}Privacy Policy{{/Link}} for details.',
+ 'woocommerce'
+ ) }
+ eventName="coreprofiler_business_info_privacy_policy_click"
+ targetUrl="https://automattic.com/privacy/"
+ linkType="external"
+ target="_blank"
+ />
+ }
checked={ isOptInMarketing }
onChange={ ( isChecked ) => {
setIsOptInMarketing( isChecked );
diff --git a/plugins/woocommerce/client/admin/client/core-profiler/pages/test/business-info.test.tsx b/plugins/woocommerce/client/admin/client/core-profiler/pages/test/business-info.test.tsx
index e5618147188..0693c5457a1 100644
--- a/plugins/woocommerce/client/admin/client/core-profiler/pages/test/business-info.test.tsx
+++ b/plugins/woocommerce/client/admin/client/core-profiler/pages/test/business-info.test.tsx
@@ -3,6 +3,7 @@
*/
import { render, screen, waitFor } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
+import { recordEvent } from '@woocommerce/tracks';
/**
* Internal dependencies
@@ -10,6 +11,11 @@ import userEvent from '@testing-library/user-event';
import { BusinessInfo } from '../BusinessInfo';
import { CoreProfilerStateMachineContext } from '../..';
+jest.mock( '@woocommerce/tracks', () => ( {
+ ...jest.requireActual( '@woocommerce/tracks' ),
+ recordEvent: jest.fn(),
+} ) );
+
describe( 'BusinessInfo', () => {
let props: {
sendEvent: jest.Mock;
@@ -332,7 +338,7 @@ describe( 'BusinessInfo', () => {
props.context.onboardingProfile.is_store_country_set = true;
render( <BusinessInfo { ...props } /> );
const checkbox = screen.getByRole( 'checkbox', {
- name: /Opt-in to receive tips, discounts, and recommendations from the Woo team directly in your inbox./i,
+ name: /Get tips, discounts, and recommendations from Woo./i,
} );
userEvent.click( checkbox );
const continueButton = screen.getByRole( 'button', {
@@ -346,7 +352,7 @@ describe( 'BusinessInfo', () => {
props.context.onboardingProfile.is_store_country_set = true;
render( <BusinessInfo { ...props } /> );
const checkbox = screen.getByRole( 'checkbox', {
- name: /Opt-in to receive tips, discounts, and recommendations from the Woo team directly in your inbox./i,
+ name: /Get tips, discounts, and recommendations from Woo./i,
} );
userEvent.click( checkbox );
const emailInput = screen.getByRole( 'textbox', {
@@ -416,7 +422,7 @@ describe( 'BusinessInfo', () => {
props.context.businessInfo.location = 'AW';
render( <BusinessInfo { ...props } /> );
const checkbox = screen.getByRole( 'checkbox', {
- name: /Opt-in to receive tips, discounts, and recommendations from the Woo team directly in your inbox./i,
+ name: /Get tips, discounts, and recommendations from Woo./i,
} );
userEvent.click( checkbox );
const emailInput = screen.getByRole( 'textbox', {
@@ -432,7 +438,7 @@ describe( 'BusinessInfo', () => {
props.context.businessInfo.location = 'AW';
render( <BusinessInfo { ...props } /> );
const checkbox = screen.getByRole( 'checkbox', {
- name: /Opt-in to receive tips, discounts, and recommendations from the Woo team directly in your inbox./i,
+ name: /Get tips, discounts, and recommendations from Woo./i,
} );
userEvent.click( checkbox );
const emailInput = screen.getByRole( 'textbox', {
@@ -452,7 +458,7 @@ describe( 'BusinessInfo', () => {
} );
userEvent.type( emailInput, 'invalid email' );
const checkbox = screen.getByRole( 'checkbox', {
- name: /Opt-in to receive tips, discounts, and recommendations from the Woo team directly in your inbox./i,
+ name: /Get tips, discounts, and recommendations from Woo./i,
} );
userEvent.click( checkbox );
expect(
@@ -464,7 +470,7 @@ describe( 'BusinessInfo', () => {
props.context.businessInfo.location = 'AW';
render( <BusinessInfo { ...props } /> );
const checkbox = screen.getByRole( 'checkbox', {
- name: /Opt-in to receive tips, discounts, and recommendations from the Woo team directly in your inbox./i,
+ name: /Get tips, discounts, and recommendations from Woo./i,
} );
userEvent.click( checkbox );
const emailInput = screen.getByRole( 'textbox', {
@@ -485,7 +491,7 @@ describe( 'BusinessInfo', () => {
props.context.businessInfo.location = 'AW';
render( <BusinessInfo { ...props } /> );
const checkbox = screen.getByRole( 'checkbox', {
- name: /Opt-in to receive tips, discounts, and recommendations from the Woo team directly in your inbox./i,
+ name: /Get tips, discounts, and recommendations from Woo./i,
} );
userEvent.click( checkbox );
const emailInput = screen.getByRole( 'textbox', {
@@ -519,7 +525,7 @@ describe( 'BusinessInfo', () => {
props.context.onboardingProfile.is_store_country_set = true;
render( <BusinessInfo { ...props } /> );
const checkbox = screen.getByRole( 'checkbox', {
- name: /Opt-in to receive tips, discounts, and recommendations from the Woo team directly in your inbox./i,
+ name: /Get tips, discounts, and recommendations from Woo./i,
} );
userEvent.click( checkbox );
const emailInput = screen.getByRole( 'textbox', {
@@ -531,5 +537,21 @@ describe( 'BusinessInfo', () => {
} );
expect( continueButton ).not.toBeDisabled();
} );
+
+ it( 'should link to the privacy policy and record a Tracks event when it is clicked', () => {
+ render( <BusinessInfo { ...props } /> );
+ const link = screen.getByRole( 'link', {
+ name: 'Privacy Policy (opens in a new tab)',
+ } );
+ expect( link ).toHaveAttribute(
+ 'href',
+ 'https://automattic.com/privacy/'
+ );
+ userEvent.click( link );
+ expect( recordEvent ).toHaveBeenCalledWith(
+ 'coreprofiler_business_info_privacy_policy_click',
+ {}
+ );
+ } );
} );
} );
diff --git a/plugins/woocommerce/tests/e2e/tests/onboarding/onboarding-wizard.spec.ts b/plugins/woocommerce/tests/e2e/tests/onboarding/onboarding-wizard.spec.ts
index 4dbb6b59e94..0a260d347b3 100644
--- a/plugins/woocommerce/tests/e2e/tests/onboarding/onboarding-wizard.spec.ts
+++ b/plugins/woocommerce/tests/e2e/tests/onboarding/onboarding-wizard.spec.ts
@@ -110,7 +110,7 @@ test.describe(
await page
.getByPlaceholder( 'wordpress@example.com' )
.fill( 'merchant@example.com' );
- await page.getByLabel( 'Opt-in to receive tips,' ).uncheck();
+ await page.getByLabel( 'Get tips, discounts,' ).uncheck();
await page.getByRole( 'button', { name: 'Continue' } ).click();
} );
@@ -274,7 +274,7 @@ test.describe(
await page
.getByPlaceholder( 'wordpress@example.com' )
.fill( 'merchant@example.com' );
- await page.getByLabel( 'Opt-in to receive tips,' ).uncheck();
+ await page.getByLabel( 'Get tips, discounts,' ).uncheck();
await page.getByRole( 'button', { name: 'Continue' } ).click();
} );