Skip to content
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

Add ENUM class for country codes #7925

Merged
merged 24 commits into from
Jan 19, 2024
Merged

Conversation

zmaglica
Copy link
Contributor

@zmaglica zmaglica commented Dec 15, 2023

Fixes #7886

Changes proposed in this Pull Request

This pull request introduces a class that functions similarly to an enum class, specifically designed for managing country codes.

Testing instructions

  • Make sure that all tests are passing

  • Run npm run changelog to add a changelog file, choose patch to leave it empty if the change is not significant. You can add multiple changelog files in one PR by running this command a few times.
  • Covered with tests (or have a good reason not to test in description ☝️)
  • Tested on mobile (or does not apply)

Post merge

@zmaglica zmaglica changed the title Add ENUM for country codes Add ENUM class for country codes Dec 15, 2023
@botwoo
Copy link
Collaborator

botwoo commented Dec 15, 2023

Test the build

Option 1. Jetpack Beta

  • Install and activate Jetpack Beta.
  • Use this build by searching for PR number 7925 or branch name dev/7886-add-country-codes-enum in your-test.site/wp-admin/admin.php?page=jetpack-beta&plugin=woocommerce-payments

Option 2. Jurassic Ninja - available for logged-in A12s

🚀 Launch a JN site with this branch 🚀

ℹ️ Install this Tampermonkey script to get more options.


Build info:

  • Latest commit: a8e9f93
  • Build time: 2024-01-19 15:19:24 UTC

Note: the build is updated when a new commit is pushed to this PR.

Copy link
Contributor

github-actions bot commented Dec 15, 2023

Size Change: 0 B

Total Size: 1.27 MB

ℹ️ View Unchanged
Filename Size
release/woocommerce-payments/assets/css/admin.css 1.06 kB
release/woocommerce-payments/assets/css/success.css 158 B
release/woocommerce-payments/dist/blocks-checkout-rtl.css 1.81 kB
release/woocommerce-payments/dist/blocks-checkout.css 1.81 kB
release/woocommerce-payments/dist/blocks-checkout.js 85.1 kB
release/woocommerce-payments/dist/checkout-rtl.css 318 B
release/woocommerce-payments/dist/checkout.css 319 B
release/woocommerce-payments/dist/checkout.js 37.2 kB
release/woocommerce-payments/dist/index-rtl.css 37 kB
release/woocommerce-payments/dist/index.css 37 kB
release/woocommerce-payments/dist/index.js 289 kB
release/woocommerce-payments/dist/multi-currency-analytics.js 1.05 kB
release/woocommerce-payments/dist/multi-currency-rtl.css 3.4 kB
release/woocommerce-payments/dist/multi-currency-switcher-block.js 60.8 kB
release/woocommerce-payments/dist/multi-currency.css 3.4 kB
release/woocommerce-payments/dist/multi-currency.js 56 kB
release/woocommerce-payments/dist/order-rtl.css 676 B
release/woocommerce-payments/dist/order.css 679 B
release/woocommerce-payments/dist/order.js 42.3 kB
release/woocommerce-payments/dist/payment-gateways-rtl.css 1.31 kB
release/woocommerce-payments/dist/payment-gateways.css 1.31 kB
release/woocommerce-payments/dist/payment-gateways.js 39.6 kB
release/woocommerce-payments/dist/payment-request-rtl.css 153 B
release/woocommerce-payments/dist/payment-request.css 153 B
release/woocommerce-payments/dist/payment-request.js 13.5 kB
release/woocommerce-payments/dist/product-details.js 919 B
release/woocommerce-payments/dist/settings-rtl.css 10.3 kB
release/woocommerce-payments/dist/settings.css 10.3 kB
release/woocommerce-payments/dist/settings.js 234 kB
release/woocommerce-payments/dist/subscription-edit-page.js 669 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal-rtl.css 519 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal.css 519 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal.js 20.5 kB
release/woocommerce-payments/dist/subscription-product-onboarding-toast.js 710 B
release/woocommerce-payments/dist/subscriptions-empty-state-rtl.css 117 B
release/woocommerce-payments/dist/subscriptions-empty-state.css 117 B
release/woocommerce-payments/dist/subscriptions-empty-state.js 19.6 kB
release/woocommerce-payments/dist/tos-rtl.css 230 B
release/woocommerce-payments/dist/tos.css 231 B
release/woocommerce-payments/dist/tos.js 22.1 kB
release/woocommerce-payments/dist/woopay-express-button-rtl.css 153 B
release/woocommerce-payments/dist/woopay-express-button.css 153 B
release/woocommerce-payments/dist/woopay-express-button.js 52.5 kB
release/woocommerce-payments/dist/woopay-rtl.css 4.18 kB
release/woocommerce-payments/dist/woopay.css 4.19 kB
release/woocommerce-payments/dist/woopay.js 72.1 kB
release/woocommerce-payments/includes/subscriptions/assets/css/plugin-page.css 622 B
release/woocommerce-payments/includes/subscriptions/assets/js/plugin-page.js 812 B
release/woocommerce-payments/vendor/automattic/jetpack-assets/build/i18n-loader.js 2.43 kB
release/woocommerce-payments/vendor/automattic/jetpack-assets/src/js/i18n-loader.js 1.01 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/tracks-ajax.js 522 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/tracks-callables.js 581 B
release/woocommerce-payments/vendor/automattic/jetpack-identity-crisis/babel.config.js 160 B
release/woocommerce-payments/vendor/automattic/jetpack-identity-crisis/build/index.css 2.37 kB
release/woocommerce-payments/vendor/automattic/jetpack-identity-crisis/build/index.js 13.5 kB
release/woocommerce-payments/vendor/automattic/jetpack-identity-crisis/build/index.rtl.css 2.37 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/about.css 1.03 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/admin-empty-state.css 291 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/admin-order-statuses.css 403 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/admin.css 3.6 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/checkout.css 299 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/modal.css 742 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/view-subscription.css 572 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/wcs-upgrade.css 411 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/admin-pointers.js 544 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/admin.js 9.4 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/jstz.js 6.8 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/jstz.min.js 3.83 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/meta-boxes-coupon.js 544 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/meta-boxes-subscription.js 2.52 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/moment.js 22.1 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/moment.min.js 11.6 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/payment-method-restrictions.js 1.29 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/wcs-meta-boxes-order.js 502 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/payment-methods.js 355 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/single-product.js 429 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/view-subscription.js 1.38 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/wcs-cart.js 781 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/modal.js 1.1 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/wcs-upgrade.js 1.27 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/build/index.css 392 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/build/index.js 3.05 kB

compressed-size-action

*
* @psalm-immutable
*/
class Country_Codes extends Base_Constant {
Copy link
Contributor

@jessy-p jessy-p Dec 18, 2023

Choose a reason for hiding this comment

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

Can we use Country instead of Country_Codes?
It would be easier to read e.g. Country::JAPAN === $account_country

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I've considered your point, but there's a potential for confusion. Some might expect Country::JAPAN to return 'Japan' or its equivalent in the currently configured language. To avoid this confusion, I opted for Country_Code.

Copy link
Contributor

Choose a reason for hiding this comment

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

Makes sense, so I guess we can use Country_Code?

Copy link
Contributor

Choose a reason for hiding this comment

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

Country_Code makes more sense, +1

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Good point. Refactored in d3ce810

@zmaglica zmaglica requested a review from a team January 4, 2024 10:19
*
* @psalm-immutable
*/
class Country_Codes extends Base_Constant {
Copy link
Contributor

Choose a reason for hiding this comment

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

Country_Code makes more sense, +1

*/
class Country_Codes extends Base_Constant {
const AFGHANISTAN = 'AF';
const ALAND_ISLANDS = 'AX';
Copy link
Contributor

Choose a reason for hiding this comment

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

Can we write a test for the output of this class? If that test breaks devs will know that some change has been made here willingly or not

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Added tests here: 0942465

@naman03malhotra
Copy link
Contributor

@zmaglica do you plan to replace country code in locale-info.php as well?

@zmaglica
Copy link
Contributor Author

zmaglica commented Jan 8, 2024

@zmaglica do you plan to replace country code in locale-info.php as well?

The linked file, is taken from the WooCommerce Repository (link), which serves as a fallback for older WooCommerce installations lacking locale-info.php at that time. Given its introduction three years ago and its specific use-case, I excluded it from the country codes refactor, since all our supported versions of WooCommerce uses one provided by WooCommerce plugin.

@naman03malhotra
Copy link
Contributor

all our supported versions of WooCommerce uses one provided by WooCommerce plugin.

Can you please link the file where this logic is present?

@naman03malhotra
Copy link
Contributor

Testing instructions
Make sure that all tests are passing

@zmaglica is it enough to verify If this change is working or do you think we need some manual testing as well?

@zmaglica
Copy link
Contributor Author

zmaglica commented Jan 9, 2024

all our supported versions of WooCommerce uses one provided by WooCommerce plugin.

Can you please link the file where this logic is present?

There are 2 places where this logic can be found and only in these two places, the mentioned locale-info.php is used.

One of the places is located here:

$locale_info_path = WC()->plugin_path() . '/i18n/locale-info.php';
// The full locale data was introduced in the currency-info.php file.
// If it doesn't exist we have to use the fallback.
if ( ! file_exists( WC()->plugin_path() . '/i18n/currency-info.php' ) ) {
$locale_info_path = WCPAY_ABSPATH . 'i18n/locale-info.php';

If you check the code, you will notice that the locale-info.php is loaded from the WooCommerce plugin folder, and if that file is missing, the fallback locale-info.php is loaded from our codebase

Another instance where this particular file is loaded can be found here:

if ( version_compare( WC_VERSION, '6.0', '<' ) ) {
$path = WCPAY_ABSPATH . 'i18n/locale-info.php';
} else {
$path = WC()->plugin_path() . '/i18n/locale-info.php';
}

Basically, this code check is WooCommerce version below 6.0, and if it is, it loads locale-info.php from WooPayments plugin folder, instead of the WooCommerce plugin folder.

And if you take a look inside the WooCommerce repository, the locale-info.php is added in 5.7.0 version

In terms of content, these file from WooCommerce and WooPayments are identical.

@zmaglica
Copy link
Contributor Author

zmaglica commented Jan 9, 2024

Testing instructions
Make sure that all tests are passing

@zmaglica is it enough to verify If this change is working or do you think we need some manual testing as well?

Unit tests cover this topic very well, so we don't have to do manual testing. This is a static class, and if it not included or used somewhere, the unit tests will fail.

Copy link
Contributor

@jessy-p jessy-p left a comment

Choose a reason for hiding this comment

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

LGTM!

@zmaglica zmaglica added this pull request to the merge queue Jan 19, 2024
Merged via the queue into develop with commit 5a1d4b9 Jan 19, 2024
24 of 26 checks passed
@zmaglica zmaglica deleted the dev/7886-add-country-codes-enum branch January 19, 2024 15:47
Jinksi pushed a commit that referenced this pull request Jan 30, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Introduce country constants
4 participants