1919use WC_Countries ;
2020use WC_Validation ;
2121use WC_Product ;
22+
2223use WooCommerce \PayPalCommerce \StoreSync \Enums \Priority ;
2324use WooCommerce \PayPalCommerce \StoreSync \Enums \ShippingIssue ;
2425use WooCommerce \PayPalCommerce \StoreSync \Helper \ProductManager ;
3132
3233class ShippingValidator implements ValidatorInterface {
3334
35+ /**
36+ * List of shipping countries that are supported by the agentic integration.
37+ * Managed on plugin-side for extra code and test stability.
38+ */
39+ private const PAYPAL_SUPPORTED_COUNTRIES = array ( 'US ' );
40+
3441 private ProductManager $ product_manager ;
3542
3643 public function __construct ( ProductManager $ product_manager ) {
@@ -109,52 +116,55 @@ private function validate_address_completeness( Address $address ): array {
109116 $ issues = array ();
110117
111118 if ( ! $ address ->address_line_1 () ) {
112- $ issues [] = ValidationIssue::create_invalid_address ( 'Shipping address is missing street address ' )
113- ->user_message ( 'Please provide a complete street address. ' )
114- ->for_field ( 'shipping_address.address_line_1 ' )
115- ->add_resolution (
116- ResolutionOption::create_provide_missing_field ()
117- ->label ( 'Provide street address ' )
118- ->set_meta ( 'field ' , 'address_line_1 ' )
119- )
120- ->add_resolution (
121- ResolutionOption::create_update_address ()
122- ->label ( 'Update shipping address ' )
123- ->priority ( Priority::LOW )
124- );
119+ $ issues [] =
120+ ValidationIssue::create_invalid_address ( 'Shipping address is missing street address ' )
121+ ->user_message ( 'Please provide a complete street address. ' )
122+ ->for_field ( 'shipping_address.address_line_1 ' )
123+ ->add_resolution (
124+ ResolutionOption::create_provide_missing_field ()
125+ ->label ( 'Provide street address ' )
126+ ->set_meta ( 'field ' , 'address_line_1 ' )
127+ )
128+ ->add_resolution (
129+ ResolutionOption::create_update_address ()
130+ ->label ( 'Update shipping address ' )
131+ ->priority ( Priority::LOW )
132+ );
125133 }
126134
127135 if ( ! $ address ->admin_area_2 () ) {
128- $ issues [] = ValidationIssue::create_invalid_address ( 'Shipping address is missing city ' )
129- ->user_message ( 'Please provide a city. ' )
130- ->for_field ( 'shipping_address.admin_area_2 ' )
131- ->add_resolution (
132- ResolutionOption::create_provide_missing_field ()
133- ->label ( 'Provide city ' )
134- ->set_meta ( 'field ' , 'admin_area_2 ' )
135- )
136- ->add_resolution (
137- ResolutionOption::create_update_address ()
138- ->label ( 'Update shipping address ' )
139- ->priority ( Priority::LOW )
140- );
136+ $ issues [] =
137+ ValidationIssue::create_invalid_address ( 'Shipping address is missing city ' )
138+ ->user_message ( 'Please provide a city. ' )
139+ ->for_field ( 'shipping_address.admin_area_2 ' )
140+ ->add_resolution (
141+ ResolutionOption::create_provide_missing_field ()
142+ ->label ( 'Provide city ' )
143+ ->set_meta ( 'field ' , 'admin_area_2 ' )
144+ )
145+ ->add_resolution (
146+ ResolutionOption::create_update_address ()
147+ ->label ( 'Update shipping address ' )
148+ ->priority ( Priority::LOW )
149+ );
141150 }
142151
143152 $ postal_code = $ address ->postal_code ();
144153 if ( ! $ postal_code ) {
145- $ issues [] = ValidationIssue::create_invalid_address ( 'Shipping address is missing postal code ' )
146- ->user_message ( 'Please provide a postal code. ' )
147- ->for_field ( 'shipping_address.postal_code ' )
148- ->add_resolution (
149- ResolutionOption::create_provide_missing_field ()
150- ->label ( 'Provide postal code ' )
151- ->set_meta ( 'field ' , 'postal_code ' )
152- )
153- ->add_resolution (
154- ResolutionOption::create_update_address ()
155- ->label ( 'Update shipping address ' )
156- ->priority ( Priority::LOW )
157- );
154+ $ issues [] =
155+ ValidationIssue::create_invalid_address ( 'Shipping address is missing postal code ' )
156+ ->user_message ( 'Please provide a postal code. ' )
157+ ->for_field ( 'shipping_address.postal_code ' )
158+ ->add_resolution (
159+ ResolutionOption::create_provide_missing_field ()
160+ ->label ( 'Provide postal code ' )
161+ ->set_meta ( 'field ' , 'postal_code ' )
162+ )
163+ ->add_resolution (
164+ ResolutionOption::create_update_address ()
165+ ->label ( 'Update shipping address ' )
166+ ->priority ( Priority::LOW )
167+ );
158168 } else {
159169 $ postal_validation =
160170 $ this ->validate_postal_code_format ( $ postal_code , $ address ->country_code () );
@@ -351,6 +361,10 @@ private function is_country_allowed( string $country_code ): bool {
351361 return true ;
352362 }
353363
364+ if ( ! $ this ->is_paypal_supported_country ( $ country_code ) ) {
365+ return false ;
366+ }
367+
354368 $ allowed_countries = $ wc_countries ->get_shipping_countries ();
355369
356370 if ( empty ( $ allowed_countries ) ) {
@@ -377,17 +391,18 @@ private function get_country_name( string $country_code ): string {
377391 return $ countries [ $ country_code ] ?? $ country_code ;
378392 }
379393
380- /**
381- * @return \WC_Countries|null
382- */
383- private function get_wc_countries () {
394+ private function get_wc_countries (): ?WC_Countries {
384395 if ( ! function_exists ( 'WC ' ) ) {
385396 return null ;
386397 }
387398
388399 // The only place in the class that has a `WC()` dependency.
389400 $ wc = WC ();
390401
391- return $ wc ? $ wc ->countries : null ;
402+ return $ wc ->countries ;
403+ }
404+
405+ private function is_paypal_supported_country ( string $ country_code ): bool {
406+ return in_array ( $ country_code , self ::PAYPAL_SUPPORTED_COUNTRIES , true );
392407 }
393408}
0 commit comments