Commit Graph

34691 Commits

Author SHA1 Message Date
Nestor Soriano 8a7d955253 Improvements on the code hacker.
- Add methods to temporarily disable and reenable the code hacker.

The code hacker is causing issues in some tests that perform
write operations to the local filesystem. Since this happens only
in a few cases, the easiest fix is to temporarily disable the
code hacker when that happens. This commit adds two new methods
for that in `WC_Unit_Test_Case`: `disable_code_hacker` and
`reenable_code_hacker`.

These methods use a disabling requests count so that the hacker
isn't enabled before it should. E.g. you call `disable`, then
a helper method that does `disable` and `enable`, then `enable` -
then only the last `enable` will have effect.

- `CodeHacker::add_hack` has now a boolean `persistent` parameter.
Persistent hacks won't be cleared by `clear_hacks`.

- `CodeHackerTestHook::executeAfterTest` will now disable the hacker
only if no persistent hacks are registered.

- The existing `file_copy` method is made static for consistency.

- `CodeHacker::restore` method renamed to `disable` for clarity.
2020-05-20 09:56:26 +02:00
Nestor Soriano 6f2e0bf694 Improve error messaging in WC_Tests_MaxMind_Database::test_download_database_works 2020-05-20 09:56:25 +02:00
Nestor Soriano f04089d572 Add function docs to the CodeHacker class. 2020-05-20 09:56:25 +02:00
Nestor Soriano 884fd08462 Add a workaround for code hacking static methods on already loaded files.
The unit testing bootstrap loads and initializes WooCommerce, this
loads a bunch of code files that can't then be hacked in the test hooks.

A workaround is provided in this commit for the case of hacking
static methods. A new StaticWrapper class is created that allows
defining mock methods after the code file has been loaded.
This is applied to all classes from a fixed list in the bootstrap,
before WooCommerce is initialized. The list should be kept up to date
with the list of classes that require such workaround.
2020-05-20 09:56:25 +02:00
Nestor Soriano c7cf39bef4 Add a README file for the code hacker. 2020-05-20 09:56:25 +02:00
Nestor Soriano f0b0822c1c Fix code sniffer errors in CodeHacker and related classes. 2020-05-20 09:56:25 +02:00
Nestor Soriano 57845ef8b8 All code hacking files moved to src\Testing folder. 2020-05-20 09:56:25 +02:00
Nestor Soriano 1a68abbc28 Miscellaneous code hacking fixes:
- Fix how CodeHackerTestHook::executeBeforeTest parses the test name,
  to account for warnings and tests with data sets.

- CodeHackerTestHook now includes a executeAfterTest hook that
  disables the code hacker (needed to prevent it from inadvertently
  altering further tests). Also, clear_hacks is executed in
  executeBeforeTest for the same reason.

- CodeHacker gets restore, clear_hacks and is_enabled methods
  to support the changes in CodeHackerTestHook.

- FunctionsMockerHack fixed so that it doesn't modify strings
  that are class method definitions.

- Added the WC_Unit_Test_Case::file_copy method, it must be used
  instead of the PHP built-in "copy" in tests, otherwise tests
  that run with the code hacker active will fail.
  This is something to investigate.
2020-05-20 09:56:25 +02:00
Nestor Soriano 9a5b3b353d Add the @hack code annotation for tests.
Now @hack class and method annotations can be used to register
code hacks as an alternative to using before_ methods.
The syntax is /* @hack HackClassName param1 param2 */
where parameters will be passed to the class constructor.
If the class name ends with "Hack", then that suffix can be
omitted (e.g. "Foo" can be specified instead of "FooHack").
2020-05-20 09:56:25 +02:00
Nestor Soriano db58b51de3 Barebones implementation of a code hacker for unit tests.
The "code hacker" is a class that hooks on filesystem events
(using stream_wrapper_unregister) in order to allow for dynamically
modifying the content of PHP code files while they are loaded.
The code hacker class allows registering hacks, which are
functions that take source code as input and return the modified code.
A hack can be a standalone function or a class with a "hack" method.

A few hacks are provided off the shelf. One allows mocking standalone
PHP functions (WP, WOO or not), another one allows mocking static
methods, and there's the one that removes the "final" qualifier
from a class definition. This helps unit testing stuff that would
otherwise be quite hard to test.
2020-05-20 09:56:25 +02:00
Christopher Allford 4750a2d567
Merge pull request #26550 from woocommerce/fix/update-wp-minimum
Adhere to WP support policy
2020-05-19 09:21:09 -07:00
Vedanshu Jain 12ff70fb14
Merge pull request #26549 from woocommerce/fix/26493-error-handling
Call callback on tracking script load error
2020-05-19 21:09:06 +05:30
Joshua Flowers b7bca44beb Call callback on tracking script load error 2020-05-19 18:19:19 +03:00
Christopher Allford df7db72855 Cleaned up our Travis config to suit the WP support policy 2020-05-19 07:00:32 -07:00
Christopher Allford 7db709957b Increased the WordPress minimum version to 5.2 as per our support policy 2020-05-19 06:59:52 -07:00
Vedanshu Jain 5adaa5667e
Merge pull request #26493 from woocommerce/fix/26466
Add function to allow client-side enabling of tracks
2020-05-19 16:30:45 +05:30
Vedanshu Jain 7fb1079137
Merge pull request #26399 from woocommerce/fix/uploads_htaccess
Disable directory listing for redirect download method
2020-05-19 15:56:37 +05:30
Joshua Flowers 07b1887c2b Use var instead of const 2020-05-18 19:11:29 +03:00
Claudio Sanches eea062f9fa
Merge pull request #26519 from woocommerce/fix/csv-import-special-columns
Fixed the case conversion for meta key column mapping in product CSV imports
2020-05-18 11:33:50 -03:00
Peter Fabian e3e72e0423
Merge pull request #26500 from woocommerce/fix/26443
Refresh db update nonce on the Thank you notice
2020-05-18 14:36:13 +02:00
Néstor Soriano 8b0d4ef050
Merge pull request #26386 from woocommerce/fix/26355
Set an error ID for each WP_Error entry
2020-05-15 12:09:14 +02:00
Néstor Soriano 3d2927f6e1
Merge pull request #26407 from woocommerce/feature/build-zip
Introduced script to generate a zip package
2020-05-15 10:59:04 +02:00
Néstor Soriano eab8920a07
Merge pull request #26314 from woocommerce/add/build-workflow
Build release workflow
2020-05-15 10:36:34 +02:00
Peter Fabian 0934f4a147 Merged should_show_notice and show_reminder and simplified logic.
Removed redundant calls to the same functions as this code runs on each admin pageload.
2020-05-15 10:24:30 +02:00
Néstor Soriano b9875a4fc1
Merge pull request #26445 from tsteur/issue_26414
Add hooks to "Add payment method form" to show additional fields and validate input
2020-05-15 10:16:53 +02:00
Peter Fabian 2f141eca77 PHPCS 2020-05-15 09:40:23 +02:00
Peter Fabian 50e386cbe8 Corrected the comment. 2020-05-15 09:26:17 +02:00
Christopher Allford 7bf9c31f64 Adjusted the column name normalization to avoid squashing meta key case sensitivity
Since we were converting the field to lowercase we ended up inserting meta in all lowercase, regardless of what it was in the CSV file. We should only be using the normalized field name when looking at the default columns, and should instead rely on a case-insensitive regex for the special columns.

One thing to note is that we're still defaulting the $headers array to the normalized field, as we don't want to change what is being passed to the filter for unmapped columns.
2020-05-14 21:20:55 -07:00
Christopher Allford 63ba6f7ee0 Moved the PSR-4 namespaced test directory to the correct folder
I know this probably doesn't belong in this PR, but it has been thoroughly discussed and I don't think anyone will mind :)
2020-05-14 21:20:47 -07:00
Christopher Allford aa6a025526
Merge pull request #26517 from woocommerce/revert-25517-duplicated-custom-fields-after-import
Revert "Fix duplicated custom fields after import products from .csv file"
2020-05-14 14:32:09 -07:00
Thomas Steur 630b7f436d apply review feedback: better naming and coding style fix 2020-05-15 09:08:35 +12:00
Claudio Sanches c09a269589
Revert "Fix duplicated custom fields after import products from .csv file" 2020-05-14 14:06:01 -03:00
Néstor Soriano 2462877c56
Merge pull request #26410 from woocommerce/fix/message-type-styling
Allow different notice types with WC_Admin_Notices
2020-05-14 14:37:12 +02:00
Peter Fabian 777c140611 Skip tests when WC Admin is not active.
Since those Notes were created because of WC Admin and the display is handled by WC Admin, it does not make sense to test them without WC Admin.
In addition, the data store that handles these Notices is not loaded without WC Admin.
2020-05-14 14:35:09 +02:00
Peter Fabian 2c1625d3f9 Added a couple of tests for WC_Notes_Run_Db_Update, a poorly testable class. 2020-05-14 13:31:43 +02:00
Joshua Flowers ef131029a5 Add function to enable tracking client-side 2020-05-13 17:44:26 +03:00
Peter Fabian 6b11451b88 Replaced repeated code from get_current_notice with the function call. 2020-05-13 16:36:09 +02:00
Peter Fabian a2f985414e Added freshness check also for 'done' notice. 2020-05-13 16:34:23 +02:00
Peter Fabian ed64c0c731 Y U no nonce here? 2020-05-13 16:33:27 +02:00
Peter Fabian eb0879cd1a Extracted actions to the beginning of the function to allow usage in note_up_to_date check. 2020-05-13 16:32:42 +02:00
Joshua Flowers 3f9db6a558 Add property to check if wcTracks is enabled 2020-05-13 16:53:57 +03:00
Joshua Flowers 07087c79a7 Always show tracks function in footer 2020-05-13 16:49:54 +03:00
Peter Fabian a7203ec4d0 Added clean up of duplicate notes, if there are any.
There has been some reports about duplicate notes in the db, so this should remove the duplicates and keep the first one.
2020-05-13 15:00:04 +02:00
Christopher Allford 2c192410a2
Merge pull request #26477 from woocommerce/update/4-1-changelog
Added 4.1.0 entry in CHANGELOG.txt
2020-05-12 14:12:58 -07:00
Claudio Sanches ac1c6533eb Added 4.1.0 entry in CHANGELOG.txt 2020-05-12 18:03:53 -03:00
Christopher Allford 78197eb3de
Merge pull request #26476 from woocommerce/update/4.3-dev
Prepare master for 4.3.0 development
2020-05-12 13:52:41 -07:00
Claudio Sanches a7a1ffaaef Updated package.json 2020-05-12 17:50:33 -03:00
Claudio Sanches f01c5a3b79 Start 4.3.0 development 2020-05-12 17:49:20 -03:00
Claudio Sanches a8948291f6
Merge pull request #26448 from woocommerce/update/26447-readme-wc-docs-link
Update README.md link to WooCommerce documentation
2020-05-12 17:24:25 -03:00
Claudio Sanches 1d99c343e7 Added unit tests 2020-05-12 15:36:25 -03:00