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(),