mirror of
https://gh.wpcy.net/https://github.com/wp-cli/extension-command.git
synced 2026-04-29 05:20:35 +08:00
548 lines
15 KiB
Gherkin
548 lines
15 KiB
Gherkin
Feature: Manage WordPress plugins
|
|
|
|
Scenario: Create, activate and check plugin status
|
|
Given a WP install
|
|
And I run `wp plugin path`
|
|
And save STDOUT as {PLUGIN_DIR}
|
|
|
|
When I run `wp plugin scaffold --skip-tests plugin1`
|
|
Then STDOUT should not be empty
|
|
And the {PLUGIN_DIR}/plugin1/plugin1.php file should exist
|
|
And the {PLUGIN_DIR}/zombieland/phpunit.xml.dist file should not exist
|
|
|
|
When I run `wp plugin path plugin1`
|
|
Then STDOUT should be:
|
|
"""
|
|
{PLUGIN_DIR}/plugin1/plugin1.php
|
|
"""
|
|
|
|
When I run `wp plugin path plugin1 --dir`
|
|
Then STDOUT should be:
|
|
"""
|
|
{PLUGIN_DIR}/plugin1
|
|
"""
|
|
|
|
When I run `wp plugin scaffold Zombieland`
|
|
Then STDOUT should not be empty
|
|
And the {PLUGIN_DIR}/Zombieland/Zombieland.php file should exist
|
|
And the {PLUGIN_DIR}/Zombieland/phpunit.xml.dist file should exist
|
|
|
|
# Ensure case sensitivity
|
|
When I try `wp plugin status zombieLand`
|
|
Then STDERR should contain:
|
|
"""
|
|
The 'zombieLand' plugin could not be found.
|
|
"""
|
|
And STDOUT should be empty
|
|
And the return code should be 1
|
|
|
|
# Check that the inner-plugin is not picked up
|
|
When I run `mv {PLUGIN_DIR}/plugin1 {PLUGIN_DIR}/Zombieland/`
|
|
And I run `wp plugin status Zombieland`
|
|
Then STDOUT should contain:
|
|
"""
|
|
Plugin Zombieland details:
|
|
Name: Zombieland
|
|
Status: Inactive
|
|
Version: 0.1.0
|
|
Author: YOUR NAME HERE
|
|
Description: PLUGIN DESCRIPTION HERE
|
|
"""
|
|
|
|
When I run `wp plugin activate Zombieland`
|
|
Then STDOUT should not be empty
|
|
|
|
When I run `wp plugin status Zombieland`
|
|
Then STDOUT should contain:
|
|
"""
|
|
Status: Active
|
|
"""
|
|
|
|
When I run `wp plugin status`
|
|
Then STDOUT should not be empty
|
|
|
|
When I run `wp plugin list`
|
|
Then STDOUT should be a table containing rows:
|
|
| name | status | update | version |
|
|
| Zombieland | active | none | 0.1.0 |
|
|
|
|
When I try `wp plugin uninstall Zombieland`
|
|
Then STDERR should be:
|
|
"""
|
|
Warning: The 'Zombieland' plugin is active.
|
|
Error: No plugins uninstalled.
|
|
"""
|
|
And the return code should be 1
|
|
|
|
When I run `wp plugin deactivate Zombieland`
|
|
Then STDOUT should not be empty
|
|
|
|
When I run `wp option get recently_activated`
|
|
Then STDOUT should contain:
|
|
"""
|
|
Zombieland/Zombieland.php
|
|
"""
|
|
|
|
When I run `wp plugin uninstall Zombieland`
|
|
Then STDOUT should be:
|
|
"""
|
|
Uninstalled and deleted 'Zombieland' plugin.
|
|
Success: Uninstalled 1 of 1 plugins.
|
|
"""
|
|
And the {PLUGIN_DIR}/zombieland file should not exist
|
|
|
|
When I try the previous command again
|
|
Then STDERR should contain:
|
|
"""
|
|
Warning:
|
|
"""
|
|
And STDERR should contain:
|
|
"""
|
|
Zombieland
|
|
"""
|
|
And STDERR should contain:
|
|
"""
|
|
Error: No plugins uninstalled.
|
|
"""
|
|
And STDOUT should be empty
|
|
And the return code should be 1
|
|
|
|
Scenario: Install a plugin, activate, then force install an older version of the plugin
|
|
Given a WP install
|
|
|
|
When I run `wp plugin install wordpress-importer --version=0.5 --force`
|
|
Then STDOUT should not be empty
|
|
|
|
When I run `wp plugin list --name=wordpress-importer --field=update_version`
|
|
Then STDOUT should not be empty
|
|
And save STDOUT as {UPDATE_VERSION}
|
|
|
|
When I run `wp plugin list --fields=name,status,update,version,update_version`
|
|
Then STDOUT should be a table containing rows:
|
|
| name | status | update | version | update_version |
|
|
| wordpress-importer | inactive | available | 0.5 | {UPDATE_VERSION} |
|
|
|
|
When I run `wp plugin activate wordpress-importer`
|
|
Then STDOUT should not be empty
|
|
|
|
When I run `wp plugin install wordpress-importer --version=0.5 --force`
|
|
Then STDOUT should not be empty
|
|
|
|
When I run `wp plugin list`
|
|
Then STDOUT should be a table containing rows:
|
|
| name | status | update | version |
|
|
| wordpress-importer | active | available | 0.5 |
|
|
|
|
When I try `wp plugin update`
|
|
Then STDERR should be:
|
|
"""
|
|
Error: Please specify one or more plugins, or use --all.
|
|
"""
|
|
And STDOUT should be empty
|
|
And the return code should be 1
|
|
|
|
When I run `wp plugin update --all --format=summary | grep 'updated successfully from'`
|
|
Then STDOUT should contain:
|
|
"""
|
|
WordPress Importer updated successfully from version 0.5 to version
|
|
"""
|
|
|
|
When I try `wp plugin update xxx yyy`
|
|
Then STDERR should contain:
|
|
"""
|
|
Warning: The 'xxx' plugin could not be found.
|
|
"""
|
|
And STDERR should contain:
|
|
"""
|
|
Warning: The 'yyy' plugin could not be found.
|
|
"""
|
|
And STDERR should contain:
|
|
"""
|
|
Error: No plugins updated.
|
|
"""
|
|
And the return code should be 1
|
|
|
|
When I run `wp plugin install wordpress-importer --version=0.5 --force`
|
|
Then STDOUT should not be empty
|
|
|
|
When I try `wp plugin update wordpress-importer hello xxx`
|
|
Then STDERR should contain:
|
|
"""
|
|
Warning: The 'xxx' plugin could not be found.
|
|
"""
|
|
And STDERR should contain:
|
|
"""
|
|
Error: Only updated 1 of 3 plugins.
|
|
"""
|
|
And the return code should be 1
|
|
|
|
Scenario: Activate a network-only plugin on single site
|
|
Given a WP install
|
|
And a wp-content/plugins/network-only.php file:
|
|
"""
|
|
// Plugin Name: Example Plugin
|
|
// Network: true
|
|
"""
|
|
|
|
When I run `wp plugin activate network-only`
|
|
Then STDOUT should be:
|
|
"""
|
|
Plugin 'network-only' activated.
|
|
Success: Activated 1 of 1 plugins.
|
|
"""
|
|
|
|
When I run `wp plugin status network-only`
|
|
Then STDOUT should contain:
|
|
"""
|
|
Status: Active
|
|
"""
|
|
|
|
Scenario: Activate a network-only plugin on multisite
|
|
Given a WP multisite install
|
|
And a wp-content/plugins/network-only.php file:
|
|
"""
|
|
// Plugin Name: Example Plugin
|
|
// Network: true
|
|
"""
|
|
|
|
When I run `wp plugin activate network-only`
|
|
Then STDOUT should be:
|
|
"""
|
|
Plugin 'network-only' network activated.
|
|
Success: Activated 1 of 1 plugins.
|
|
"""
|
|
|
|
When I run `wp plugin status network-only`
|
|
Then STDOUT should contain:
|
|
"""
|
|
Status: Network Active
|
|
"""
|
|
|
|
Scenario: Network activate a plugin
|
|
Given a WP multisite install
|
|
|
|
When I run `wp plugin activate akismet`
|
|
Then STDOUT should be:
|
|
"""
|
|
Plugin 'akismet' activated.
|
|
Success: Activated 1 of 1 plugins.
|
|
"""
|
|
|
|
When I run `wp plugin list --fields=name,status`
|
|
Then STDOUT should be a table containing rows:
|
|
| name | status |
|
|
| akismet | active |
|
|
|
|
When I try `wp plugin activate akismet`
|
|
Then STDERR should contain:
|
|
"""
|
|
Warning: Plugin 'akismet' is already active.
|
|
"""
|
|
And STDOUT should be:
|
|
"""
|
|
Success: Plugin already activated.
|
|
"""
|
|
And the return code should be 0
|
|
|
|
When I run `wp plugin activate akismet --network`
|
|
Then STDOUT should be:
|
|
"""
|
|
Plugin 'akismet' network activated.
|
|
Success: Network activated 1 of 1 plugins.
|
|
"""
|
|
|
|
When I try `wp plugin activate akismet --network`
|
|
Then STDERR should be:
|
|
"""
|
|
Warning: Plugin 'akismet' is already network active.
|
|
"""
|
|
And STDOUT should be:
|
|
"""
|
|
Success: Plugin already network activated.
|
|
"""
|
|
And the return code should be 0
|
|
|
|
When I try `wp plugin deactivate akismet`
|
|
Then STDERR should be:
|
|
"""
|
|
Warning: Plugin 'akismet' is network active and must be deactivated with --network flag.
|
|
Error: No plugins deactivated.
|
|
"""
|
|
And STDOUT should be empty
|
|
And the return code should be 1
|
|
|
|
When I run `wp plugin deactivate akismet --network`
|
|
Then STDOUT should be:
|
|
"""
|
|
Plugin 'akismet' network deactivated.
|
|
Success: Network deactivated 1 of 1 plugins.
|
|
"""
|
|
And the return code should be 0
|
|
|
|
When I try `wp plugin deactivate akismet`
|
|
Then STDERR should be:
|
|
"""
|
|
Warning: Plugin 'akismet' isn't active.
|
|
"""
|
|
And STDOUT should be:
|
|
"""
|
|
Success: Plugin already deactivated.
|
|
"""
|
|
And the return code should be 0
|
|
|
|
Scenario: List plugins
|
|
Given a WP install
|
|
|
|
When I run `wp plugin activate akismet hello`
|
|
Then STDOUT should not be empty
|
|
|
|
When I run `wp plugin list --status=inactive --field=name`
|
|
Then STDOUT should be empty
|
|
|
|
When I run `wp plugin list --status=active --fields=name,status`
|
|
Then STDOUT should be a table containing rows:
|
|
| name | status |
|
|
| akismet | active |
|
|
|
|
Scenario: Install a plugin when directory doesn't yet exist
|
|
Given a WP install
|
|
|
|
When I run `rm -rf wp-content/plugins`
|
|
And I run `if test -d wp-content/plugins; then echo "fail"; fi`
|
|
Then STDOUT should be empty
|
|
|
|
When I run `wp plugin install wordpress-importer --activate`
|
|
Then STDOUT should not be empty
|
|
|
|
When I run `wp plugin list --status=active --fields=name,status`
|
|
Then STDOUT should be a table containing rows:
|
|
| name | status |
|
|
| wordpress-importer | active |
|
|
|
|
Scenario: Plugin name with HTML entities
|
|
Given a WP install
|
|
|
|
When I run `wp plugin install debug-bar-list-dependencies`
|
|
Then STDOUT should contain:
|
|
"""
|
|
Installing Debug Bar List Script & Style Dependencies
|
|
"""
|
|
|
|
Scenario: Enable and disable all plugins
|
|
Given a WP install
|
|
|
|
When I run `wp plugin activate --all`
|
|
Then STDOUT should be:
|
|
"""
|
|
Plugin 'akismet' activated.
|
|
Plugin 'hello' activated.
|
|
Success: Activated 2 of 2 plugins.
|
|
"""
|
|
|
|
When I run `wp plugin activate --all`
|
|
Then STDOUT should be:
|
|
"""
|
|
Success: Plugins already activated.
|
|
"""
|
|
|
|
When I run `wp plugin list --field=status`
|
|
Then STDOUT should be:
|
|
"""
|
|
active
|
|
active
|
|
must-use
|
|
"""
|
|
|
|
When I run `wp plugin deactivate --all`
|
|
Then STDOUT should be:
|
|
"""
|
|
Plugin 'akismet' deactivated.
|
|
Plugin 'hello' deactivated.
|
|
Success: Deactivated 2 of 2 plugins.
|
|
"""
|
|
|
|
When I run `wp plugin deactivate --all`
|
|
Then STDOUT should be:
|
|
"""
|
|
Success: Plugins already deactivated.
|
|
"""
|
|
|
|
When I run `wp plugin list --field=status`
|
|
Then STDOUT should be:
|
|
"""
|
|
inactive
|
|
inactive
|
|
must-use
|
|
"""
|
|
|
|
Scenario: Deactivate and uninstall a plugin, part one
|
|
Given a WP install
|
|
And these installed and active plugins:
|
|
"""
|
|
wordpress-importer
|
|
"""
|
|
|
|
When I run `wp plugin deactivate wordpress-importer --uninstall`
|
|
Then STDOUT should be:
|
|
"""
|
|
Plugin 'wordpress-importer' deactivated.
|
|
Uninstalling 'wordpress-importer'...
|
|
Uninstalled and deleted 'wordpress-importer' plugin.
|
|
Success: Deactivated 1 of 1 plugins.
|
|
"""
|
|
|
|
When I try `wp plugin get wordpress-importer`
|
|
Then STDERR should be:
|
|
"""
|
|
Error: The 'wordpress-importer' plugin could not be found.
|
|
"""
|
|
And STDOUT should be empty
|
|
And the return code should be 1
|
|
|
|
Scenario: Deactivate and uninstall a plugin, part two
|
|
Given a WP install
|
|
And these installed and active plugins:
|
|
"""
|
|
wordpress-importer
|
|
"""
|
|
|
|
When I run `wp plugin uninstall wordpress-importer --deactivate`
|
|
Then STDOUT should be:
|
|
"""
|
|
Deactivating 'wordpress-importer'...
|
|
Plugin 'wordpress-importer' deactivated.
|
|
Uninstalled and deleted 'wordpress-importer' plugin.
|
|
Success: Uninstalled 1 of 1 plugins.
|
|
"""
|
|
|
|
When I try `wp plugin get wordpress-importer`
|
|
Then STDERR should be:
|
|
"""
|
|
Error: The 'wordpress-importer' plugin could not be found.
|
|
"""
|
|
And STDOUT should be empty
|
|
And the return code should be 1
|
|
|
|
Scenario: Uninstall a plugin without deleting
|
|
Given a WP install
|
|
|
|
When I run `wp plugin install akismet --version=2.5.7 --force`
|
|
Then STDOUT should not be empty
|
|
|
|
When I run `wp plugin uninstall akismet --skip-delete`
|
|
Then STDOUT should be:
|
|
"""
|
|
Ran uninstall procedure for 'akismet' plugin without deleting.
|
|
Success: Uninstalled 1 of 1 plugins.
|
|
"""
|
|
|
|
Scenario: Two plugins, one directory
|
|
Given a WP install
|
|
And a wp-content/plugins/handbook/handbook.php file:
|
|
"""
|
|
<?php
|
|
/**
|
|
* Plugin Name: Handbook
|
|
* Description: Features for a handbook, complete with glossary and table of contents
|
|
* Author: Nacin
|
|
*/
|
|
"""
|
|
And a wp-content/plugins/handbook/functionality-for-pages.php file:
|
|
"""
|
|
<?php
|
|
/**
|
|
* Plugin Name: Handbook Functionality for Pages
|
|
* Description: Adds handbook-like table of contents to all Pages for a site. Covers Table of Contents and the "watch this page" widget
|
|
* Author: Nacin
|
|
*/
|
|
"""
|
|
|
|
When I run `wp plugin list --fields=name,status`
|
|
Then STDOUT should be a table containing rows:
|
|
| name | status |
|
|
| handbook/handbook | inactive |
|
|
| handbook/functionality-for-pages | inactive |
|
|
|
|
When I run `wp plugin activate handbook/functionality-for-pages`
|
|
Then STDOUT should not be empty
|
|
|
|
When I run `wp plugin list --fields=name,status`
|
|
Then STDOUT should be a table containing rows:
|
|
| name | status |
|
|
| handbook/handbook | inactive |
|
|
| handbook/functionality-for-pages | active |
|
|
|
|
Scenario: Install a plugin, then update to a specific version of that plugin
|
|
Given a WP install
|
|
|
|
When I run `wp plugin install akismet --version=2.5.7 --force`
|
|
Then STDOUT should not be empty
|
|
|
|
When I run `wp plugin update akismet --version=2.6.0`
|
|
Then STDOUT should not be empty
|
|
|
|
When I run `wp plugin list --fields=name,version`
|
|
Then STDOUT should be a table containing rows:
|
|
| name | version |
|
|
| akismet | 2.6.0 |
|
|
|
|
Scenario: Ignore empty slugs
|
|
Given a WP install
|
|
|
|
When I try `wp plugin install ''`
|
|
Then STDERR should contain:
|
|
"""
|
|
Warning: Ignoring ambiguous empty slug value.
|
|
"""
|
|
And STDOUT should not contain:
|
|
"""
|
|
Plugin installed successfully
|
|
"""
|
|
And the return code should be 0
|
|
|
|
Scenario: Plugin hidden by "all_plugins" filter
|
|
Given a WP install
|
|
And these installed and active plugins:
|
|
"""
|
|
akismet
|
|
jetpack
|
|
query-monitor
|
|
"""
|
|
And a wp-content/mu-plugins/hide-qm-plugin.php file:
|
|
"""
|
|
<?php
|
|
/**
|
|
* Plugin Name: Hide Query Monitor on Production
|
|
* Description: Hides the Query Monitor plugin on production sites
|
|
* Author: WP-CLI tests
|
|
*/
|
|
|
|
add_filter( 'all_plugins', function( $all_plugins ) {
|
|
unset( $all_plugins['query-monitor/query-monitor.php'] );
|
|
return $all_plugins;
|
|
} );
|
|
"""
|
|
|
|
When I run `wp plugin list --fields=name`
|
|
Then STDOUT should not contain:
|
|
"""
|
|
query-monitor
|
|
"""
|
|
|
|
Scenario: Show dropins plugin list
|
|
Given a WP install
|
|
And a wp-content/db-error.php file:
|
|
"""
|
|
<?php
|
|
"""
|
|
|
|
When I run `wp plugin list --status=active`
|
|
Then STDOUT should not contain:
|
|
"""
|
|
db-error.php
|
|
"""
|
|
|
|
When I run `wp plugin list --status=dropin --fields=name,title,description`
|
|
Then STDOUT should be a table containing rows:
|
|
| name | title | description |
|
|
| db-error.php | | Custom database error message. |
|