Instead of comparing all tables that exist with all tables that are registered with `WC_Install::get_tables()` (which was only introduced a few versions ago in #19436), rewrite the test to verify that all of the tables *registered* actually exist within the database.
This will prevent tests from failing when, for example, they're run against databases that may or may not have additional plugins installed/activated. This also prevents tests from failing when running WooCommerce 4.x (e.g. with WooCommerce Admin) on WordPress < 5.3, since the tables are created but the callback to register the custom tables is never hooked.
The WooCommerce unit tests started failing when running using WP nightly
with the following error:
```
Fatal error: require_once(): Failed opening required '/tmp/wordpress-tests-lib/src//wp-includes/class-phpmailer.php' (include_path='.:/home/travis/.phpenv/versions/7.4.2/share/pear') in /tmp/wordpress-tests-lib/includes/mock-mailer.php on line 2
```
https://travis-ci.org/woocommerce/woocommerce/jobs/646855363#L1955
This was happening because WP changed the syntax of the line where
ABSPATH is defined in the context of the unit tests
(https://core.trac.wordpress.org/changeset/47198/trunk/wp-tests-config-sample.php)
and we rely on this syntax to change ABSPATH when running
`tests/bin/install.sh`.
To fix this problem, this commit updates the sed command used to change
ABSPATH to work when both the old and new syntaxes are used. In the
future we might want to consider a more robust solution to the problem
of updating ABSPATH.
For some reason unknown to me, the following commit added logic to make
sure that negative fees never make the order total negative: 804feb9333
Probably by accident, commit 4326e39250 changed this logic when `$fees_total += $item->get_total()` was replaced by `$fees_total += $fee_total`:
4326e39250 (diff-9b4164165828b26c4b7aec01c7b17884R1594)
This commit adds a failing test that ensures that the old behavior is
tested. This test needs to be fixed before we merge the changes proposed
in PR #25504.
Note: The tests fail in this commit because of the defines. Ran individually there are no problems, but I'm going to make another PR to merge in a package to make testing constants possible, and then come back to fix this after it gets merged.
This commit fixes the unit test
WC_Tests_API_Functions::test_wc_rest_upload_image_from_url_should_return_error_when_invalid_image_is_passed() which was failing due to a change in a WordPress core message with the following error:
```
2) WC_Tests_API_Functions::test_wc_rest_upload_image_from_url_should_return_error_when_invalid_image_is_passed
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'Invalid image: File is empty. Please upload something more substantial. This error could also be caused by uploads being disabled in your php.ini or by post_max_size being defined as smaller than upload_max_filesize in php.ini.'
+'Invalid image: File is empty. Please upload something more substantial. This error could also be caused by uploads being disabled in your php.ini file or by post_max_size being defined as smaller than upload_max_filesize in php.ini.'
/home/travis/build/woocommerce/woocommerce/tests/unit-tests/util/api-functions.php:89
```
(https://travis-ci.org/woocommerce/woocommerce/jobs/637353161#L402)
This test only fails when using WordPress nightly build (the yet to be
released WP 5.4).
To fix this problem, this commit adds an if statement to check for different error
messages depending on the WordPress version that is being used to run
the tests. In the future, we might want to refactor this test to remove
its dependency to a WordPress error message to make it more robust and
stable.
This replaces the corresponding geolocation class functionality. We are deprecating the woocommerce_geolocation_local_database_path filter in favor of the woocommerce_maxmind_geolocation_databse_path filter. Since we want the option to turn this into a feature plugin, it's wise to make sure nothing is too generic.