Commit ea9ab0276ca for woocommerce
commit ea9ab0276ca4b86ff2dfd864d942a8e1314004f0
Author: Ján Mikláš <neosinner@gmail.com>
Date: Mon Jul 13 10:58:21 2026 +0200
Fix email_type Tracks format mismatch in test email sends (#66490)
diff --git a/plugins/woocommerce/client/admin/client/settings-email/__tests__/settings-email-listing-listview.test.tsx b/plugins/woocommerce/client/admin/client/settings-email/__tests__/settings-email-listing-listview.test.tsx
new file mode 100644
index 00000000000..db233b60616
--- /dev/null
+++ b/plugins/woocommerce/client/admin/client/settings-email/__tests__/settings-email-listing-listview.test.tsx
@@ -0,0 +1,100 @@
+/**
+ * External dependencies
+ */
+import { render } from '@testing-library/react';
+import type { ComponentType } from 'react';
+
+/**
+ * Internal dependencies
+ */
+import { ListView } from '../settings-email-listing-listview';
+import type { EmailType } from '../settings-email-listing-slotfill';
+import { useSendTestEmail } from '../settings-email-send-test';
+
+jest.mock( '@wordpress/dataviews/wp', () => ( {
+ DataViews: ( {
+ actions,
+ data,
+ }: {
+ actions: Array< {
+ id: string;
+ RenderModal?: ComponentType< {
+ items: EmailType[];
+ closeModal?: () => void;
+ } >;
+ } >;
+ data: EmailType[];
+ } ) => {
+ const SendTestEmailModal = actions.find(
+ ( action ) => action.id === 'test'
+ )?.RenderModal;
+
+ return SendTestEmailModal ? (
+ <SendTestEmailModal items={ data } closeModal={ () => {} } />
+ ) : null;
+ },
+} ) );
+
+jest.mock( '../settings-email-listing-data', () => ( {
+ useTransactionalEmails: ( emailTypes: EmailType[] ) => ( {
+ emails: emailTypes,
+ total: emailTypes.length,
+ updateEmailEnabledStatus: jest.fn(),
+ recreateEmailPost: jest.fn(),
+ } ),
+} ) );
+
+jest.mock( '../settings-email-send-test', () => ( {
+ useSendTestEmail: jest.fn( () => ( {
+ email: '',
+ setEmail: jest.fn(),
+ isSending: false,
+ notice: '',
+ noticeType: '',
+ sendEmail: jest.fn(),
+ } ) ),
+ SendTestEmailForm: () => null,
+} ) );
+
+const useSendTestEmailMock = useSendTestEmail as jest.MockedFunction<
+ typeof useSendTestEmail
+>;
+
+const emailType: EmailType = {
+ title: 'New order',
+ description: 'New order notification',
+ id: 'new_order',
+ email_key: 'wc_email_new_order',
+ email_class_name: 'WC_Email_New_Order',
+ post_id: '123',
+ recipients: {
+ to: 'admin@example.com',
+ cc: '',
+ bcc: '',
+ },
+ enabled: true,
+ manual: false,
+ templateStatus: null,
+ templateVersion: null,
+ currentVersion: null,
+ wasBackfilled: false,
+};
+
+describe( 'ListView', () => {
+ beforeEach( () => {
+ useSendTestEmailMock.mockClear();
+ } );
+
+ it( 'uses the email class name when tracking a test send', () => {
+ render( <ListView emailTypes={ [ emailType ] } /> );
+
+ expect( useSendTestEmailMock ).toHaveBeenCalledWith(
+ {
+ endpoint: 'editor',
+ postId: 123,
+ emailType: 'WC_Email_New_Order',
+ },
+ 'email_listing'
+ );
+ } );
+} );
diff --git a/plugins/woocommerce/client/admin/client/settings-email/__tests__/settings-email-listing-slotfill.test.tsx b/plugins/woocommerce/client/admin/client/settings-email/__tests__/settings-email-listing-slotfill.test.tsx
index 2cf2e5a6f5a..9d806f747ce 100644
--- a/plugins/woocommerce/client/admin/client/settings-email/__tests__/settings-email-listing-slotfill.test.tsx
+++ b/plugins/woocommerce/client/admin/client/settings-email/__tests__/settings-email-listing-slotfill.test.tsx
@@ -51,6 +51,7 @@ const baseEmail: EmailType = {
enabled: true,
manual: false,
email_key: 'new_order',
+ email_class_name: 'WC_Email_New_Order',
recipients: { to: '', cc: '', bcc: '' },
status: 'enabled',
templateStatus: null,
@@ -180,6 +181,7 @@ describe( 'normalizeEmailTypePayload — regression for eligible_count=0', () =>
enabled: true,
manual: false,
email_key: 'customer_processing_order',
+ email_class_name: 'WC_Email_Customer_Processing_Order',
recipients: { to: '', cc: '', bcc: '' },
status: 'enabled',
template_status: 'core_updated_customized',
@@ -222,6 +224,9 @@ describe( 'normalizeEmailTypePayload — regression for eligible_count=0', () =>
expect( normalized.templateVersion ).toBe( '9.4.0-test' );
expect( normalized.currentVersion ).toBe( '10.7.0' );
expect( normalized.wasBackfilled ).toBe( false );
+ expect( normalized.email_class_name ).toBe(
+ 'WC_Email_Customer_Processing_Order'
+ );
render(
<EmailListingFill
diff --git a/plugins/woocommerce/client/admin/client/settings-email/__tests__/settings-email-listing-update-cell.test.tsx b/plugins/woocommerce/client/admin/client/settings-email/__tests__/settings-email-listing-update-cell.test.tsx
index 9f4c861490b..567ce2d91cd 100644
--- a/plugins/woocommerce/client/admin/client/settings-email/__tests__/settings-email-listing-update-cell.test.tsx
+++ b/plugins/woocommerce/client/admin/client/settings-email/__tests__/settings-email-listing-update-cell.test.tsx
@@ -40,6 +40,7 @@ const baseEmail: EmailType = {
enabled: true,
manual: false,
email_key: 'new_order',
+ email_class_name: 'WC_Email_New_Order',
recipients: { to: '', cc: '', bcc: '' },
status: 'enabled',
templateStatus: null,
diff --git a/plugins/woocommerce/client/admin/client/settings-email/__tests__/settings-email-send-test.test.tsx b/plugins/woocommerce/client/admin/client/settings-email/__tests__/settings-email-send-test.test.tsx
index 086b4cef3ae..d605781f9f8 100644
--- a/plugins/woocommerce/client/admin/client/settings-email/__tests__/settings-email-send-test.test.tsx
+++ b/plugins/woocommerce/client/admin/client/settings-email/__tests__/settings-email-send-test.test.tsx
@@ -61,7 +61,7 @@ const Harness = ( {
const editorTarget: SendTestEmailTarget = {
endpoint: 'editor',
postId: 123,
- emailType: 'new_order',
+ emailType: 'WC_Email_New_Order',
};
const settingsTarget: SendTestEmailTarget = {
@@ -127,7 +127,7 @@ describe( 'useSendTestEmail + SendTestEmailForm', () => {
expect( recordEventMock ).toHaveBeenCalledWith(
'settings_emails_preview_test_sent_successful',
{
- email_type: 'new_order',
+ email_type: 'WC_Email_New_Order',
source: 'email_listing',
}
);
@@ -183,7 +183,7 @@ describe( 'useSendTestEmail + SendTestEmailForm', () => {
expect( recordEventMock ).toHaveBeenCalledWith(
'settings_emails_preview_test_sent_failed',
{
- email_type: 'new_order',
+ email_type: 'WC_Email_New_Order',
error: 'Cookie check failed',
error_code: 'rest_cookie_invalid_nonce',
source: 'email_listing',
diff --git a/plugins/woocommerce/client/admin/client/settings-email/settings-email-listing-listview.tsx b/plugins/woocommerce/client/admin/client/settings-email/settings-email-listing-listview.tsx
index 1baba445f23..6ae858544df 100644
--- a/plugins/woocommerce/client/admin/client/settings-email/settings-email-listing-listview.tsx
+++ b/plugins/woocommerce/client/admin/client/settings-email/settings-email-listing-listview.tsx
@@ -25,16 +25,16 @@ import {
const SendTestEmailModalContent = ( {
postId,
- emailId,
+ emailClassName,
onClose,
}: {
postId: number;
- emailId: string;
+ emailClassName: string;
onClose: () => void;
} ) => {
const { email, setEmail, isSending, notice, noticeType, sendEmail } =
useSendTestEmail(
- { endpoint: 'editor', postId, emailType: emailId },
+ { endpoint: 'editor', postId, emailType: emailClassName },
'email_listing'
);
@@ -220,7 +220,7 @@ export const ListView = ( { emailTypes }: { emailTypes: EmailType[] } ) => {
} ) => (
<SendTestEmailModalContent
postId={ parseInt( items[ 0 ].post_id, 10 ) }
- emailId={ items[ 0 ].id }
+ emailClassName={ items[ 0 ].email_class_name }
onClose={ closeModal ?? ( () => {} ) }
/>
),
diff --git a/plugins/woocommerce/client/admin/client/settings-email/settings-email-listing-slotfill.tsx b/plugins/woocommerce/client/admin/client/settings-email/settings-email-listing-slotfill.tsx
index e61552e0b29..da0b2826971 100644
--- a/plugins/woocommerce/client/admin/client/settings-email/settings-email-listing-slotfill.tsx
+++ b/plugins/woocommerce/client/admin/client/settings-email/settings-email-listing-slotfill.tsx
@@ -40,6 +40,7 @@ export type EmailType = {
description: string;
id: string;
email_key: string;
+ email_class_name: string;
post_id: string;
recipients: Recipients;
enabled: boolean;
diff --git a/plugins/woocommerce/client/admin/client/settings-email/settings-email-listing-update-cell.story.tsx b/plugins/woocommerce/client/admin/client/settings-email/settings-email-listing-update-cell.story.tsx
index 8126195d27d..c14b46ec9af 100644
--- a/plugins/woocommerce/client/admin/client/settings-email/settings-email-listing-update-cell.story.tsx
+++ b/plugins/woocommerce/client/admin/client/settings-email/settings-email-listing-update-cell.story.tsx
@@ -12,6 +12,7 @@ const baseEmail: EmailType = {
enabled: true,
manual: false,
email_key: 'new_order',
+ email_class_name: 'WC_Email_New_Order',
recipients: { to: '', cc: '', bcc: '' },
templateStatus: null,
templateVersion: null,
diff --git a/plugins/woocommerce/includes/admin/settings/class-wc-settings-emails.php b/plugins/woocommerce/includes/admin/settings/class-wc-settings-emails.php
index c62bb12282a..b91c98c3249 100644
--- a/plugins/woocommerce/includes/admin/settings/class-wc-settings-emails.php
+++ b/plugins/woocommerce/includes/admin/settings/class-wc-settings-emails.php
@@ -624,6 +624,7 @@ class WC_Settings_Emails extends WC_Settings_Page {
'description' => $email->get_description(),
'id' => $email->id,
'email_key' => strtolower( $email_key ),
+ 'email_class_name' => get_class( $email ),
'post_id' => $post_id,
'enabled' => $email->is_enabled(),
'manual' => $email->is_manual(),