Skip to content

Add combined testing for tracking number parsers #59469

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

Conversation

tpaksu
Copy link
Contributor

@tpaksu tpaksu commented Jul 7, 2025

Submission Review Guidelines:

Changes proposed in this Pull Request:

This PR adds combined testing for tracking number parsers across 10 major shipping providers with validation algorithms and comprehensive test coverage.

What was implemented:

  1. Tracking number validation functions with check digit algorithms (S10/UPU, Mod 7, Mod 10, Mod 11, UPS 1Z, FedEx)
  2. Comprehensive test coverage for all shipping providers: UPS, USPS, FedEx, DHL, DPD, Evri/Hermes, Royal Mail, Australia Post, Canada Post, Amazon Logistics
  3. Global test suite with 137+ test cases covering domestic and international tracking patterns
  4. Cross-border validation with destination-specific confidence scoring

Closes #59460 WOOPLUG-4914

How to test the changes in this Pull Request:

Using the WooCommerce Testing Instructions Guide, include your detailed testing instructions:

  1. Checkout this branch
  2. Run pnpm run watch:build to build script assets
  3. Enable fulfillment entity by setting the woocommerce_feature_fulfillments_enabled option to yes.
  4. Create an order if you don't have one
  5. Open https://docs.google.com/spreadsheets/d/1EGdA9QCEh-tLtH_6SYc0dm4wKiYcZ2VGufJ9mBmugl4/edit?gid=1161449752#gid=1161449752&fvid=1810897849
  6. Switch to "MVP" view from Top Menu > Data > Change View > MVP
  7. Test the numbers on the MVP filtered table, using the correct country for the store and the order (you can use the below tool patch to change the order country, and the plugin to change the store country)
  8. Most of it should show the correct provider (skip the return numbers)
Store country changer plugin
<?php
/**
 * Plugin Name: WooCommerce Quick Country Switcher
 * Description: Quick dropdown to change WooCommerce store country in admin
 * Version: 1.0
 * Author: Your Name
 */

// Prevent direct access
if (!defined('ABSPATH')) {
    exit;
}

class WC_Quick_Country_Switcher
{

    public function __construct()
    {
        add_action('admin_init', array($this, 'init'));
        add_action('admin_bar_menu', array($this, 'add_admin_bar_menu'), 100);
        add_action('wp_ajax_wc_change_country', array($this, 'ajax_change_country'));
        add_action('admin_enqueue_scripts', array($this, 'enqueue_scripts'));
    }

    public function init()
    {
        // Check if WooCommerce is active
        if (!class_exists('WooCommerce')) {
            add_action('admin_notices', array($this, 'woocommerce_missing_notice'));
            return;
        }
    }

    public function woocommerce_missing_notice()
    {
        echo '<div class="error"><p>WooCommerce Quick Country Switcher requires WooCommerce to be installed and active.</p></div>';
    }

    public function add_admin_bar_menu($wp_admin_bar)
    {
        if (!current_user_can('manage_woocommerce') || !class_exists('WooCommerce')) {
            return;
        }

        $current_country = get_option('woocommerce_default_country');
        $countries = WC()->countries->get_countries();
        $current_country_name = isset($countries[$current_country]) ? $countries[$current_country] : 'Unknown';

        $wp_admin_bar->add_node(
            array(
            'id'    => 'wc-country-switcher',
            'title' => '🌍 Store: ' . $current_country_name,
            'href'  => '#',
            'meta'  => array(
                'class' => 'wc-country-switcher-parent'
            )
            )
        );

        // Add dropdown HTML via JavaScript (since admin bar doesn't support complex HTML)
        add_action('admin_footer', array($this, 'add_country_dropdown'));
        add_action('wp_footer', array($this, 'add_country_dropdown'));
    }

    public function add_country_dropdown()
    {
        if (!current_user_can('manage_woocommerce') || !class_exists('WooCommerce')) {
            return;
        }

        $current_country = get_option('woocommerce_default_country');
        $countries = WC()->countries->get_countries();

        ?>
        <div id="wc-country-dropdown" style="display: none; position: absolute; background: white; border: 1px solid #ccc; border-radius: 4px; padding: 10px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); z-index: 999999; min-width: 200px;">
            <h4 style="margin: 0 0 10px 0; font-size: 14px;">Change Store Country</h4>
            <select id="wc-country-select" style="width: 100%; padding: 5px;">
                <?php foreach ($countries as $code => $name): ?>
                    <option value="<?php echo esc_attr($code); ?>" <?php selected($current_country, $code); ?>>
                        <?php echo esc_html($name); ?>
                    </option>
                <?php endforeach; ?>
            </select>
            <div style="margin-top: 10px;">
                <button id="wc-change-country-btn" class="button button-primary" style="margin-right: 5px;">Change</button>
                <button id="wc-cancel-country-btn" class="button">Cancel</button>
            </div>
            <div id="wc-country-loading" style="display: none; margin-top: 10px;">
                <em>Updating store country...</em>
            </div>
        </div>
        <?php
    }

    public function enqueue_scripts()
    {
        if (!current_user_can('manage_woocommerce') || !class_exists('WooCommerce')) {
            return;
        }

        // Enqueue jQuery
        wp_enqueue_script('jquery');

        // Add inline script
        $nonce = wp_create_nonce('wc_change_country_nonce');
        wp_add_inline_script(
            'jquery', "
        jQuery(document).ready(function($) {
            // Show/hide dropdown
            $('#wp-admin-bar-wc-country-switcher').click(function(e) {
                e.preventDefault();
                var dropdown = $('#wc-country-dropdown');
                var rect = this.getBoundingClientRect();

                if (dropdown.is(':visible')) {
                    dropdown.hide();
                } else {
                    dropdown.css({
                        position: 'fixed',
                        top: rect.bottom + 'px',
                        left: rect.left + 'px'
                    }).show();
                }
            });

            // Hide dropdown when clicking outside
            $(document).click(function(e) {
                if (!$(e.target).closest('#wp-admin-bar-wc-country-switcher, #wc-country-dropdown').length) {
                    $('#wc-country-dropdown').hide();
                }
            });

            // Cancel button
            $('#wc-cancel-country-btn').click(function() {
                $('#wc-country-dropdown').hide();
            });

            // Change country
            $('#wc-change-country-btn').click(function() {
                var selectedCountry = $('#wc-country-select').val();
                var selectedCountryName = $('#wc-country-select option:selected').text();

                $('#wc-country-loading').show();
                $(this).prop('disabled', true);

                $.ajax({
                    url: ajaxurl,
                    type: 'POST',
                    data: {
                        action: 'wc_change_country',
                        country: selectedCountry,
                        nonce: '{$nonce}'
                    },
                    success: function(response) {
                        if (response.success) {
                            // Update admin bar text
                            $('#wp-admin-bar-wc-country-switcher .ab-item').text('🌍 Store: ' + selectedCountryName);
                            $('#wc-country-dropdown').hide();

                            // Show success message
                            $('<div class=\"notice notice-success is-dismissible\"><p>Store country changed to ' + selectedCountryName + '</p></div>')
                                .insertAfter('.wp-header-end');
                        } else {
                            alert('Error: ' + (response.data || 'Failed to change country'));
                        }
                    },
                    error: function() {
                        alert('Error: Failed to change country');
                    },
                    complete: function() {
                        $('#wc-country-loading').hide();
                        $('#wc-change-country-btn').prop('disabled', false);
                    }
                });
            });
        });
        "
        );
    }

    public function ajax_change_country()
    {
        // Verify user permissions
        if (!current_user_can('manage_woocommerce')) {
            wp_die('Insufficient permissions');
        }

        // Verify nonce
        if (!wp_verify_nonce($_POST['nonce'], 'wc_change_country_nonce')) {
            wp_die('Security check failed');
        }

        $new_country = sanitize_text_field($_POST['country']);

        // Validate country code
        $countries = WC()->countries->get_countries();
        if (!isset($countries[$new_country])) {
            wp_send_json_error('Invalid country code');
        }

        // Update WooCommerce country setting
        update_option('woocommerce_default_country', $new_country);

        // Clear any caches
        if (function_exists('wc_delete_shop_order_transients')) {
            wc_delete_shop_order_transients();
        }

        wp_send_json_success(
            array(
            'country' => $new_country,
            'country_name' => $countries[$new_country]
            )
        );
    }
}

// Initialize the plugin
new WC_Quick_Country_Switcher();
Order country changer patch
diff --git a/plugins/woocommerce/client/admin/client/wp-admin-scripts/fulfillments/components/fulfillments/fulfillment-editor.tsx b/plugins/woocommerce/client/admin/client/wp-admin-scripts/fulfillments/components/fulfillments/fulfillment-editor.tsx
index 2d3bd9856c..441590c004 100644
--- a/plugins/woocommerce/client/admin/client/wp-admin-scripts/fulfillments/components/fulfillments/fulfillment-editor.tsx
+++ b/plugins/woocommerce/client/admin/client/wp-admin-scripts/fulfillments/components/fulfillments/fulfillment-editor.tsx
@@ -31,6 +31,8 @@ import { ShipmentFormProvider } from '../../context/shipment-form-context';
 import MetadataViewer from '../metadata-viewer';
 import { getFulfillmentLockState } from '../../utils/fulfillment-utils';
 import LockLabel from '../user-interface/lock-label';
+import ShippingCountryChanger from '../testing-tools/shipping-country-changer';
+import '../testing-tools/shipping-country-changer.scss';
 
 interface FulfillmentEditorProps {
 	index: number;
@@ -160,6 +162,7 @@ export default function FulfillmentEditor( {
 									! isEditing ) ) && (
 								<CustomerNotificationBox type="update" />
 							) }
+							<ShippingCountryChanger />
 							{ fulfillmentLockState.isLocked ? (
 								<div className="woocommerce-fulfillment-item-lock-container">
 									<LockLabel
diff --git a/plugins/woocommerce/client/admin/client/wp-admin-scripts/fulfillments/components/fulfillments/new-fulfillment-form.tsx b/plugins/woocommerce/client/admin/client/wp-admin-scripts/fulfillments/components/fulfillments/new-fulfillment-form.tsx
index 444e02b2d0..84cbce8650 100644
--- a/plugins/woocommerce/client/admin/client/wp-admin-scripts/fulfillments/components/fulfillments/new-fulfillment-form.tsx
+++ b/plugins/woocommerce/client/admin/client/wp-admin-scripts/fulfillments/components/fulfillments/new-fulfillment-form.tsx
@@ -19,6 +19,8 @@ import ErrorLabel from '../user-interface/error-label';
 import { ShipmentFormProvider } from '../../context/shipment-form-context';
 import ShipmentForm from '../shipment-form';
 import CustomerNotificationBox from '../customer-notification-form';
+import ShippingCountryChanger from '../testing-tools/shipping-country-changer';
+import '../testing-tools/shipping-country-changer.scss';
 
 const NewFulfillmentForm: React.FC = () => {
 	const {
@@ -124,7 +126,7 @@ const NewFulfillmentForm: React.FC = () => {
 							items={ remainingItems }
 						>
 							<ItemSelector editMode={ true } />
-
+							<ShippingCountryChanger />
 							<ShipmentForm />
 							<CustomerNotificationBox type="fulfill" />
 							<div className="woocommerce-fulfillment-item-actions">
diff --git a/plugins/woocommerce/client/admin/client/wp-admin-scripts/fulfillments/components/testing-tools/index.tsx b/plugins/woocommerce/client/admin/client/wp-admin-scripts/fulfillments/components/testing-tools/index.tsx
new file mode 100644
index 0000000000..d27c8baa61
--- /dev/null
+++ b/plugins/woocommerce/client/admin/client/wp-admin-scripts/fulfillments/components/testing-tools/index.tsx
@@ -0,0 +1,8 @@
+/**
+ * Testing tools components for fulfillments
+ *
+ * This module exports testing utility components that can be used
+ * in development environments to test fulfillment features.
+ */
+
+export { default as ShippingCountryChanger } from './shipping-country-changer';
diff --git a/plugins/woocommerce/client/admin/client/wp-admin-scripts/fulfillments/components/testing-tools/shipping-country-changer.scss b/plugins/woocommerce/client/admin/client/wp-admin-scripts/fulfillments/components/testing-tools/shipping-country-changer.scss
new file mode 100644
index 0000000000..91c7659e68
--- /dev/null
+++ b/plugins/woocommerce/client/admin/client/wp-admin-scripts/fulfillments/components/testing-tools/shipping-country-changer.scss
@@ -0,0 +1,54 @@
+.woocommerce-fulfillment-shipping-country-changer {
+	padding: 16px;
+
+	&__info {
+		margin-bottom: 16px;
+
+		p {
+			margin: 0 0 8px 0;
+			font-size: 14px;
+			color: #757575;
+		}
+
+		strong {
+			color: #1d2327;
+		}
+	}
+
+	&__controls {
+		display: flex;
+		flex-direction: column;
+		gap: 16px;
+		margin-bottom: 16px;
+
+		.components-base-control {
+			margin-bottom: 0;
+		}
+
+		.components-button {
+			align-self: flex-start;
+			font-size: 13px;
+			height: auto;
+			line-height: 1.4;
+			padding: 8px 16px;
+		}
+	}
+
+	&__warning {
+		.components-notice {
+			margin: 0;
+			font-size: 13px;
+		}
+	}
+}
+
+// Small screen adjustments
+@media (max-width: 600px) {
+	.woocommerce-fulfillment-shipping-country-changer {
+		padding: 12px;
+
+		&__controls {
+			gap: 12px;
+		}
+	}
+}
diff --git a/plugins/woocommerce/client/admin/client/wp-admin-scripts/fulfillments/components/testing-tools/shipping-country-changer.tsx b/plugins/woocommerce/client/admin/client/wp-admin-scripts/fulfillments/components/testing-tools/shipping-country-changer.tsx
new file mode 100644
index 0000000000..0ce720c93d
--- /dev/null
+++ b/plugins/woocommerce/client/admin/client/wp-admin-scripts/fulfillments/components/testing-tools/shipping-country-changer.tsx
@@ -0,0 +1,222 @@
+/**
+ * External dependencies
+ */
+import { Button, SelectControl, Notice } from '@wordpress/components';
+import { useState } from '@wordpress/element';
+import { __ } from '@wordpress/i18n';
+import apiFetch from '@wordpress/api-fetch';
+
+/**
+ * Internal dependencies
+ */
+import { useFulfillmentContext } from '../../context/fulfillment-context';
+import { ToolsIcon } from '../../utils/icons';
+import FulfillmentCard from '../user-interface/fulfillments-card/card';
+
+// Common shipping countries for testing
+const SHIPPING_COUNTRIES = [
+	{ label: __( 'United States', 'woocommerce' ), value: 'US' },
+	{ label: __( 'Canada', 'woocommerce' ), value: 'CA' },
+	{ label: __( 'United Kingdom', 'woocommerce' ), value: 'GB' },
+	{ label: __( 'Germany', 'woocommerce' ), value: 'DE' },
+	{ label: __( 'France', 'woocommerce' ), value: 'FR' },
+	{ label: __( 'Italy', 'woocommerce' ), value: 'IT' },
+	{ label: __( 'Spain', 'woocommerce' ), value: 'ES' },
+	{ label: __( 'Australia', 'woocommerce' ), value: 'AU' },
+	{ label: __( 'Japan', 'woocommerce' ), value: 'JP' },
+	{ label: __( 'Brazil', 'woocommerce' ), value: 'BR' },
+	{ label: __( 'India', 'woocommerce' ), value: 'IN' },
+	{ label: __( 'Mexico', 'woocommerce' ), value: 'MX' },
+	{ label: __( 'Netherlands', 'woocommerce' ), value: 'NL' },
+	{ label: __( 'Ireland', 'woocommerce' ), value: 'IE' },
+	{ label: __( 'Poland', 'woocommerce' ), value: 'PL' },
+	{ label: __( 'Portugal', 'woocommerce' ), value: 'PT' },
+	{ label: __( 'Czech Republic', 'woocommerce' ), value: 'CZ' },
+	{ label: __( 'Greece', 'woocommerce' ), value: 'GR' },
+	{ label: __( 'Hungary', 'woocommerce' ), value: 'HU' },
+	{ label: __( 'Romania', 'woocommerce' ), value: 'RO' },
+	{ label: __( 'Turkey', 'woocommerce' ), value: 'TR' },
+	{ label: __( 'South Africa', 'woocommerce' ), value: 'ZA' },
+	{ label: __( 'Russia', 'woocommerce' ), value: 'RU' },
+	{ label: __( 'South Korea', 'woocommerce' ), value: 'KR' },
+	{ label: __( 'New Zealand', 'woocommerce' ), value: 'NZ' },
+	{ label: __( 'Singapore', 'woocommerce' ), value: 'SG' },
+	{ label: __( 'United Arab Emirates', 'woocommerce' ), value: 'AE' },
+	{ label: __( 'Saudi Arabia', 'woocommerce' ), value: 'SA' },
+	{ label: __( 'Sweden', 'woocommerce' ), value: 'SE' },
+	{ label: __( 'Norway', 'woocommerce' ), value: 'NO' },
+	{ label: __( 'Denmark', 'woocommerce' ), value: 'DK' },
+	{ label: __( 'Finland', 'woocommerce' ), value: 'FI' },
+	{ label: __( 'Switzerland', 'woocommerce' ), value: 'CH' },
+	{ label: __( 'Austria', 'woocommerce' ), value: 'AT' },
+	{ label: __( 'Belgium', 'woocommerce' ), value: 'BE' },
+	{ label: __( 'Lithuania', 'woocommerce' ), value: 'LT' },
+	{ label: __( 'Latvia', 'woocommerce' ), value: 'LV' },
+	{ label: __( 'Estonia', 'woocommerce' ), value: 'EE' },
+	{ label: __( 'Slovakia', 'woocommerce' ), value: 'SK' },
+	{ label: __( 'Slovenia', 'woocommerce' ), value: 'SI' },
+	{ label: __( 'Croatia', 'woocommerce' ), value: 'HR' },
+];
+
+interface ShippingCountryChangerProps {
+	onCountryChanged?: () => void;
+}
+
+export default function ShippingCountryChanger( {
+	onCountryChanged,
+}: ShippingCountryChangerProps ) {
+	const { order } = useFulfillmentContext();
+	const [ selectedCountry, setSelectedCountry ] = useState(
+		order?.shipping?.country || 'US'
+	);
+	const [ isLoading, setIsLoading ] = useState( false );
+	const [ notice, setNotice ] = useState< {
+		type: 'success' | 'error';
+		message: string;
+	} | null >( null );
+
+	const handleCountryChange = async () => {
+		if ( ! order?.id || ! selectedCountry ) {
+			setNotice( {
+				type: 'error',
+				message: __(
+					'Invalid order or country selection.',
+					'woocommerce'
+				),
+			} );
+			return;
+		}
+
+		setIsLoading( true );
+		setNotice( null );
+
+		try {
+			// Update the order shipping country via REST API
+			await apiFetch( {
+				path: `/wc/v3/orders/${ order.id }`,
+				method: 'PUT',
+				data: {
+					shipping: {
+						...order.shipping,
+						country: selectedCountry,
+					},
+				},
+			} );
+
+			setNotice( {
+				type: 'success',
+				message: __(
+					'Shipping country updated successfully! Please refresh the page to see changes.',
+					'woocommerce'
+				),
+			} );
+
+			// Call the callback if provided
+			if ( onCountryChanged ) {
+				onCountryChanged();
+			}
+		} catch ( error ) {
+			setNotice( {
+				type: 'error',
+				message: __(
+					'Failed to update shipping country. Please try again.',
+					'woocommerce'
+				),
+			} );
+		} finally {
+			setIsLoading( false );
+		}
+	};
+
+	if ( ! order ) {
+		return null;
+	}
+
+	return (
+		<FulfillmentCard
+			isCollapsable={ true }
+			initialState="collapsed"
+			header={
+				<>
+					<ToolsIcon />
+					<h3>
+						{ __(
+							'Testing Tools - Change Shipping Country',
+							'woocommerce'
+						) }
+					</h3>
+				</>
+			}
+		>
+			<div className="woocommerce-fulfillment-shipping-country-changer">
+				{ notice && (
+					<Notice
+						status={ notice.type }
+						isDismissible={ true }
+						onRemove={ () => setNotice( null ) }
+					>
+						{ notice.message }
+					</Notice>
+				) }
+
+				<div className="woocommerce-fulfillment-shipping-country-changer__info">
+					<p>
+						{ __(
+							'Use this tool to change the shipping country for testing purposes. This will update the order shipping address.',
+							'woocommerce'
+						) }
+					</p>
+					<p>
+						<strong>
+							{ __( 'Current shipping country:', 'woocommerce' ) }
+						</strong>{ ' ' }
+						{ order.shipping?.country ||
+							__( 'Not set', 'woocommerce' ) }
+					</p>
+				</div>
+
+				<div className="woocommerce-fulfillment-shipping-country-changer__controls">
+					<SelectControl
+						label={ __( 'New shipping country', 'woocommerce' ) }
+						value={ selectedCountry }
+						options={ [
+							{
+								label: __( 'Select a country', 'woocommerce' ),
+								value: '',
+								disabled: true,
+							},
+							...SHIPPING_COUNTRIES,
+						] }
+						aria-sort="ascending"
+						onChange={ setSelectedCountry }
+						disabled={ isLoading }
+					/>
+
+					<Button
+						variant="primary"
+						onClick={ handleCountryChange }
+						disabled={
+							isLoading ||
+							! selectedCountry ||
+							selectedCountry === order.shipping?.country
+						}
+						isBusy={ isLoading }
+					>
+						{ isLoading
+							? __( 'Updating', 'woocommerce' )
+							: __( 'Update Shipping Country', 'woocommerce' ) }
+					</Button>
+				</div>
+
+				<div className="woocommerce-fulfillment-shipping-country-changer__warning">
+					<Notice status="warning" isDismissible={ false }>
+						{ __(
+							'⚠️ This is a testing tool. Only use this on test orders or in development environments.',
+							'woocommerce'
+						) }
+					</Notice>
+				</div>
+			</div>
+		</FulfillmentCard>
+	);
+}
diff --git a/plugins/woocommerce/client/admin/client/wp-admin-scripts/fulfillments/utils/icons.tsx b/plugins/woocommerce/client/admin/client/wp-admin-scripts/fulfillments/utils/icons.tsx
index ad9043bbdd..b82c20d43b 100644
--- a/plugins/woocommerce/client/admin/client/wp-admin-scripts/fulfillments/utils/icons.tsx
+++ b/plugins/woocommerce/client/admin/client/wp-admin-scripts/fulfillments/utils/icons.tsx
@@ -111,3 +111,18 @@ export const EditIcon = () => (
 		/>
 	</svg>
 );
+
+export const ToolsIcon = () => (
+	<svg
+		width="16"
+		height="16"
+		viewBox="0 0 16 16"
+		fill="none"
+		xmlns="http://www.w3.org/2000/svg"
+	>
+		<path
+			d="M10.5 3.5L12.5 1.5L14.5 3.5L12.5 5.5L10.5 3.5ZM9.5 4.5L7 7L8 8L10.5 5.5L9.5 4.5ZM5.5 9.5L2 13H5L6 12L5.5 9.5ZM1 1H7V2H1V8H0V1ZM15 8V14H9V15H16V8H15ZM1 15V9H0V16H7V15H1Z"
+			fill="#1E1E1E"
+		/>
+	</svg>
+);

Testing that has already taken place:

Changelog entry

  • Automatically create a changelog entry from the details below.
  • This Pull Request does not require a changelog entry. (Comment required below)
Changelog Entry Details

Significance

  • Patch
  • Minor
  • Major

Type

  • Fix - Fixes an existing bug
  • Add - Adds functionality
  • Update - Update existing functionality
  • Dev - Development related task
  • Tweak - A minor adjustment to the codebase
  • Performance - Address performance issues
  • Enhancement - Improvement to existing functionality

Message

Changelog Entry Comment

Comment

This is a part of a feature branch, and will be added as a single changelog entry to trunk. Sub issues don't need changelog entries.

@github-actions github-actions bot added the plugin: woocommerce Issues related to the WooCommerce Core plugin. label Jul 7, 2025
@tpaksu tpaksu self-assigned this Jul 8, 2025
@tpaksu tpaksu requested review from a team and samnajian and removed request for a team July 15, 2025 11:28
@tpaksu tpaksu marked this pull request as ready for review July 15, 2025 11:28
Copy link
Contributor

Testing Guidelines

Hi @samnajian ,

Apart from reviewing the code changes, please make sure to review the testing instructions (Guide) and verify that relevant tests (E2E, Unit, Integration, etc.) have been added or updated as needed.

Reminder: PR reviewers are required to document testing performed. This includes:

  • 🖼️ Screenshots or screen recordings.
  • 📝 List of functionality tested / steps followed.
  • 🌐 Site details (environment attributes such as hosting type, plugins, theme, store size, store age, and relevant settings).
  • 🔍 Any analysis performed, such as assessing potential impacts on environment attributes and other plugins, conducting performance profiling, or using LLM/AI-based analysis.

⚠️ Within the testing details you provide, please ensure that no sensitive information (such as API keys, passwords, user data, etc.) is included in this public issue.

Copy link
Contributor

github-actions bot commented Jul 15, 2025

Test using WordPress Playground

The changes in this pull request can be previewed and tested using a WordPress Playground instance.
WordPress Playground is an experimental project that creates a full WordPress instance entirely within the browser.

Test this pull request with WordPress Playground.

Note that this URL is valid for 30 days from when this comment was last updated. You can update it by closing/reopening the PR or pushing a new commit.

Copy link
Contributor

@samnajian samnajian left a comment

Choose a reason for hiding this comment

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

I tested with examples provided via the sheet and I'm getting around 24% mistakes or errors, please see the sheet under Column G

Copy link
Contributor

@samnajian samnajian left a comment

Choose a reason for hiding this comment

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

LGTM to for this phase, let's create a follow up issue to fine tune it for the next release.

@tpaksu tpaksu merged commit 1cabc7f into feature/57353-order-fulfillments-entity Jul 18, 2025
26 checks passed
@tpaksu tpaksu deleted the add/59460-global-testing-for-tracking-numbers branch July 18, 2025 12:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
plugin: woocommerce Issues related to the WooCommerce Core plugin.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants