mirror of
https://gh.wpcy.net/https://github.com/wp-cli/extension-command.git
synced 2026-06-11 01:53:58 +08:00
505 lines
16 KiB
Gherkin
505 lines
16 KiB
Gherkin
Feature: Install WordPress plugins
|
|
|
|
Background:
|
|
Given an empty cache
|
|
|
|
Scenario: Branch names should be removed from Github projects
|
|
Given a WP install
|
|
|
|
When I run `wp plugin install https://github.com/wp-cli-test/generic-example-plugin/archive/refs/heads/master.zip --activate`
|
|
Then STDOUT should contain:
|
|
"""
|
|
Downloading install
|
|
"""
|
|
And STDOUT should contain:
|
|
"""
|
|
package from https://github.com/wp-cli-test/generic-example-plugin/archive/refs/heads/master.zip
|
|
"""
|
|
And STDOUT should contain:
|
|
"""
|
|
Renamed Github-based project from 'generic-example-plugin-master' to 'generic-example-plugin'.
|
|
"""
|
|
And STDOUT should contain:
|
|
"""
|
|
Plugin installed successfully.
|
|
"""
|
|
And the wp-content/plugins/generic-example-plugin directory should exist
|
|
And the wp-content/plugins/generic-example-plugin-master directory should not exist
|
|
|
|
When I try `wp plugin install https://github.com/wp-cli-test/generic-example-plugin/archive/refs/heads/master.zip`
|
|
Then STDERR should contain:
|
|
"""
|
|
Warning: Destination folder already exists
|
|
"""
|
|
And STDERR should contain:
|
|
"""
|
|
Error: No plugins installed.
|
|
"""
|
|
And the wp-content/plugins/generic-example-plugin directory should exist
|
|
And the wp-content/plugins/generic-example-plugin-master directory should not exist
|
|
And the return code should be 1
|
|
|
|
When I run `wp plugin install https://github.com/wp-cli-test/generic-example-plugin/archive/refs/heads/master.zip --force`
|
|
Then STDOUT should contain:
|
|
"""
|
|
Plugin updated successfully.
|
|
"""
|
|
And the wp-content/plugins/generic-example-plugin directory should exist
|
|
And the wp-content/plugins/generic-example-plugin-master directory should not exist
|
|
|
|
# However if the plugin slug ('modern-framework') does not match the project name then it's downloaded to wrong directory.
|
|
When I run `wp plugin install https://github.com/Miller-Media/modern-wordpress/archive/master.zip`
|
|
Then STDOUT should contain:
|
|
"""
|
|
Plugin installed successfully.
|
|
"""
|
|
And STDOUT should match /Renamed Github-based project from 'modern-(?:wordpress|framework)-master' to 'modern-wordpress'/
|
|
# Wrong directory.
|
|
And the wp-content/plugins/modern-wordpress directory should exist
|
|
And the wp-content/plugins/modern-framework directory should not exist
|
|
|
|
Scenario: Don't attempt to rename ZIPs uploaded to GitHub's releases page
|
|
Given a WP install
|
|
|
|
When I run `wp plugin install https://github.com/wp-cli-test/generic-example-plugin/releases/download/v0.1.0/generic-example-plugin.0.1.0.zip`
|
|
Then STDOUT should contain:
|
|
"""
|
|
Plugin installed successfully.
|
|
"""
|
|
And STDOUT should not contain:
|
|
"""
|
|
Renamed Github-based project from 'generic-example-plugin-0.1.0' to 'generic-example-plugin'.
|
|
"""
|
|
And the wp-content/plugins/generic-example-plugin directory should exist
|
|
|
|
Scenario: Don't attempt to rename ZIPs coming from a GitHub raw source
|
|
Given a WP install
|
|
|
|
When I run `wp plugin install https://github.com/Miller-Media/modern-wordpress/raw/master/builds/modern-framework-stable.zip`
|
|
Then STDOUT should contain:
|
|
"""
|
|
Plugin installed successfully.
|
|
"""
|
|
And STDOUT should not contain:
|
|
"""
|
|
Renamed Github-based project from 'modern-framework-stable' to 'modern-framework'.
|
|
"""
|
|
And the wp-content/plugins/modern-framework directory should exist
|
|
|
|
Scenario: Installing respects WP_PROXY_HOST and WP_PROXY_PORT
|
|
Given a WP install
|
|
And a invalid-proxy-details.php file:
|
|
"""
|
|
<?php
|
|
define( 'WP_PROXY_HOST', 'https://wp-cli.org' );
|
|
define( 'WP_PROXY_PORT', '443' );
|
|
"""
|
|
|
|
When I try `wp --require=invalid-proxy-details.php plugin install debug-bar`
|
|
Then STDERR should contain:
|
|
"""
|
|
Warning: debug-bar: An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration.
|
|
"""
|
|
And STDERR should contain:
|
|
"""
|
|
Error: No plugins installed.
|
|
"""
|
|
And STDOUT should be empty
|
|
And the return code should be 1
|
|
|
|
When I run `wp plugin install debug-bar`
|
|
Then STDOUT should contain:
|
|
"""
|
|
Plugin installed successfully.
|
|
"""
|
|
|
|
Scenario: Return code is 1 when one or more plugin installations fail
|
|
Given a WP install
|
|
|
|
When I try `wp plugin install site-secrets site-secrets-not-a-plugin`
|
|
Then STDERR should contain:
|
|
"""
|
|
Warning:
|
|
"""
|
|
And STDERR should contain:
|
|
"""
|
|
site-secrets-not-a-plugin
|
|
"""
|
|
And STDERR should contain:
|
|
"""
|
|
Error: Only installed 1 of 2 plugins.
|
|
"""
|
|
And STDOUT should contain:
|
|
"""
|
|
Installing Site Secrets
|
|
"""
|
|
And STDOUT should contain:
|
|
"""
|
|
Plugin installed successfully.
|
|
"""
|
|
And the return code should be 1
|
|
|
|
When I try `wp plugin install site-secrets`
|
|
Then STDOUT should be:
|
|
"""
|
|
Success: Plugin already installed.
|
|
"""
|
|
And STDERR should be:
|
|
"""
|
|
Warning: site-secrets: Plugin already installed.
|
|
"""
|
|
And the return code should be 0
|
|
|
|
When I try `wp plugin install site-secrets-not-a-plugin`
|
|
Then STDERR should contain:
|
|
"""
|
|
Warning:
|
|
"""
|
|
And STDERR should contain:
|
|
"""
|
|
site-secrets-not-a-plugin
|
|
"""
|
|
And STDERR should contain:
|
|
"""
|
|
Error: No plugins installed.
|
|
"""
|
|
And the return code should be 1
|
|
|
|
Scenario: Paths aren't backslashed when destination folder already exists
|
|
Given a WP install
|
|
|
|
When I run `wp eval "echo str_replace(chr(92), '/', getcwd());"`
|
|
Then save STDOUT as {WORKING_DIR}
|
|
|
|
When I run `rm wp-content/plugins/akismet/akismet.php`
|
|
Then the return code should be 0
|
|
|
|
When I try `wp plugin install akismet --ignore-requirements`
|
|
Then STDERR should contain:
|
|
"""
|
|
Warning: Destination folder already exists. "{WORKING_DIR}/wp-content/plugins/akismet/"
|
|
"""
|
|
And STDERR should contain:
|
|
"""
|
|
Error: No plugins installed.
|
|
"""
|
|
And the return code should be 1
|
|
|
|
Scenario: For Github archive URLs use the Github project name as the plugin directory
|
|
Given a WP install
|
|
|
|
When I run `wp plugin install https://github.com/wp-cli-test/generic-example-plugin/archive/v0.1.0.zip`
|
|
Then STDOUT should contain:
|
|
"""
|
|
Plugin installed successfully.
|
|
"""
|
|
And STDOUT should contain:
|
|
"""
|
|
package from https://github.com/wp-cli-test/generic-example-plugin/archive/v0.1.0.zip
|
|
"""
|
|
And STDOUT should contain:
|
|
"""
|
|
Renamed Github-based project from 'generic-example-plugin-0.1.0' to 'generic-example-plugin'.
|
|
"""
|
|
And the wp-content/plugins/generic-example-plugin directory should exist
|
|
And the wp-content/plugins/generic-example-plugi directory should not exist
|
|
And the wp-content/plugins/generic-example-plugin-0.1.0 directory should not exist
|
|
|
|
When I run `wp plugin install https://github.com/Automattic/sensei/archive/version/1.9.19.zip`
|
|
Then STDOUT should contain:
|
|
"""
|
|
Plugin installed successfully.
|
|
"""
|
|
And STDOUT should contain:
|
|
"""
|
|
package from https://github.com/Automattic/sensei/archive/version/1.9.19.zip
|
|
"""
|
|
And STDOUT should contain:
|
|
"""
|
|
Renamed Github-based project from 'sensei-version-1.9.19' to 'sensei'.
|
|
"""
|
|
And the wp-content/plugins/sensei directory should exist
|
|
And the wp-content/plugins/archive directory should not exist
|
|
And the wp-content/plugins/sensei-version-1.9.19 directory should not exist
|
|
|
|
Scenario: Verify installed plugin activation
|
|
Given a WP install
|
|
|
|
When I run `wp plugin install site-secrets`
|
|
Then STDOUT should not be empty
|
|
|
|
When I try `wp plugin install site-secrets --activate`
|
|
Then STDERR should contain:
|
|
"""
|
|
Warning: site-secrets: Plugin already installed.
|
|
"""
|
|
|
|
And STDOUT should contain:
|
|
"""
|
|
Activating 'site-secrets'...
|
|
Plugin 'site-secrets' activated.
|
|
Success: Plugin already installed.
|
|
"""
|
|
|
|
@require-php-7
|
|
Scenario: Can't install plugin that requires a newer version of WordPress
|
|
Given a WP install
|
|
|
|
When I run `wp core download --version=6.4 --force`
|
|
And I run `rm -r wp-content/themes/*`
|
|
|
|
And I try `wp plugin install wp-super-cache`
|
|
Then STDERR should contain:
|
|
"""
|
|
Warning: wp-super-cache: This plugin does not work with your version of WordPress
|
|
"""
|
|
|
|
And STDERR should contain:
|
|
"""
|
|
Error: No plugins installed.
|
|
"""
|
|
|
|
@less-than-php-7.4 @require-wp-6.6
|
|
Scenario: Can't install plugin that requires a newer version of PHP
|
|
Given a WP install
|
|
|
|
And I try `wp plugin install contact-form-7`
|
|
Then STDERR should contain:
|
|
"""
|
|
Warning: contact-form-7: This plugin does not work with your version of PHP
|
|
"""
|
|
|
|
And STDERR should contain:
|
|
"""
|
|
Error: No plugins installed.
|
|
"""
|
|
|
|
Scenario: Install plugin from a single PHP file URL
|
|
Given a WP install
|
|
|
|
When I run `wp plugin install https://gist.githubusercontent.com/westonruter/dec7d190060732e29a09751ab99cc549/raw/d55866c2fc82ab16f8909ce73fc89986ab28d727/pwa-manifest-short-name.php --activate`
|
|
Then STDOUT should contain:
|
|
"""
|
|
Installing
|
|
"""
|
|
And STDOUT should contain:
|
|
"""
|
|
Downloading plugin file from
|
|
"""
|
|
And STDOUT should contain:
|
|
"""
|
|
Plugin installed successfully.
|
|
"""
|
|
And STDOUT should contain:
|
|
"""
|
|
Activating
|
|
"""
|
|
And the wp-content/plugins/pwa-manifest-short-name.php file should exist
|
|
|
|
When I run `wp plugin list --field=name`
|
|
Then STDOUT should contain:
|
|
"""
|
|
pwa-manifest-short-name
|
|
"""
|
|
|
|
When I run `wp plugin list --name=pwa-manifest-short-name --field=status`
|
|
Then STDOUT should be:
|
|
"""
|
|
active
|
|
"""
|
|
|
|
Scenario: Install plugin from a single PHP file URL with --force flag
|
|
Given a WP install
|
|
|
|
When I run `wp plugin install https://gist.githubusercontent.com/westonruter/dec7d190060732e29a09751ab99cc549/raw/d55866c2fc82ab16f8909ce73fc89986ab28d727/pwa-manifest-short-name.php`
|
|
Then STDOUT should contain:
|
|
"""
|
|
Plugin installed successfully.
|
|
"""
|
|
And the wp-content/plugins/pwa-manifest-short-name.php file should exist
|
|
|
|
When I try `wp plugin install https://gist.githubusercontent.com/westonruter/dec7d190060732e29a09751ab99cc549/raw/d55866c2fc82ab16f8909ce73fc89986ab28d727/pwa-manifest-short-name.php`
|
|
Then STDERR should contain:
|
|
"""
|
|
Warning: Plugin already installed.
|
|
"""
|
|
And STDERR should not contain:
|
|
"""
|
|
plugin could not be found
|
|
"""
|
|
And STDOUT should contain:
|
|
"""
|
|
Success: Plugin already installed.
|
|
"""
|
|
|
|
When I run `wp plugin install https://gist.githubusercontent.com/westonruter/dec7d190060732e29a09751ab99cc549/raw/d55866c2fc82ab16f8909ce73fc89986ab28d727/pwa-manifest-short-name.php --force`
|
|
Then STDOUT should contain:
|
|
"""
|
|
Plugin installed successfully.
|
|
"""
|
|
And the wp-content/plugins/pwa-manifest-short-name.php file should exist
|
|
|
|
@github-api
|
|
Scenario: Install plugin from a GitHub Gist page URL
|
|
Given a WP install
|
|
|
|
When I run `wp plugin install https://gist.github.com/westonruter/dec7d190060732e29a09751ab99cc549 --activate`
|
|
Then STDOUT should contain:
|
|
"""
|
|
Gist resolved to raw file URL.
|
|
"""
|
|
And STDOUT should contain:
|
|
"""
|
|
Installing
|
|
"""
|
|
And STDOUT should contain:
|
|
"""
|
|
Downloading plugin file from
|
|
"""
|
|
And STDOUT should contain:
|
|
"""
|
|
Plugin installed successfully.
|
|
"""
|
|
And STDOUT should contain:
|
|
"""
|
|
Activating
|
|
"""
|
|
And the wp-content/plugins/pwa-manifest-short-name.php file should exist
|
|
|
|
When I run `wp plugin list --name=pwa-manifest-short-name --field=status`
|
|
Then STDOUT should be:
|
|
"""
|
|
active
|
|
"""
|
|
|
|
Scenario: Install plugin using WordPress.org directory URL
|
|
Given a WP install
|
|
|
|
When I run `wp plugin install https://wordpress.org/plugins/debug-bar/`
|
|
Then STDOUT should contain:
|
|
"""
|
|
Detected WordPress.org plugins directory URL, using slug: debug-bar
|
|
"""
|
|
And the return code should be 0
|
|
|
|
When I run `wp plugin list --name=debug-bar --field=status`
|
|
Then STDOUT should be:
|
|
"""
|
|
inactive
|
|
"""
|
|
|
|
Scenario: Install and activate plugin using WordPress.org directory URL
|
|
Given a WP install
|
|
|
|
When I run `wp plugin install https://wordpress.org/plugins/debug-bar/ --activate`
|
|
Then STDOUT should contain:
|
|
"""
|
|
Detected WordPress.org plugins directory URL, using slug: debug-bar
|
|
"""
|
|
And the return code should be 0
|
|
|
|
When I run `wp plugin list --name=debug-bar --field=status`
|
|
Then STDOUT should be:
|
|
"""
|
|
active
|
|
"""
|
|
|
|
Scenario: Install with --activate on already-active plugin should keep it activated
|
|
Given a WP install
|
|
|
|
When I run `wp plugin install debug-bar --activate`
|
|
Then STDOUT should contain:
|
|
"""
|
|
Plugin 'debug-bar' activated.
|
|
"""
|
|
And the return code should be 0
|
|
|
|
When I run `wp plugin list --name=debug-bar --field=status`
|
|
Then STDOUT should be:
|
|
"""
|
|
active
|
|
"""
|
|
|
|
When I try `wp plugin install debug-bar --activate`
|
|
Then STDERR should contain:
|
|
"""
|
|
Warning: debug-bar: Plugin already installed.
|
|
"""
|
|
And STDOUT should contain:
|
|
"""
|
|
Activating 'debug-bar'...
|
|
"""
|
|
And STDOUT should contain:
|
|
"""
|
|
Plugin 'debug-bar' activated.
|
|
"""
|
|
And the return code should be 0
|
|
|
|
When I run `wp plugin list --name=debug-bar --field=status`
|
|
Then STDOUT should be:
|
|
"""
|
|
active
|
|
"""
|
|
|
|
Scenario: Install with --activate-network on already-network-active plugin should keep it activated
|
|
Given a WP multisite install
|
|
|
|
When I run `wp plugin install debug-bar --activate-network`
|
|
Then STDOUT should contain:
|
|
"""
|
|
Plugin 'debug-bar' network activated.
|
|
"""
|
|
And the return code should be 0
|
|
|
|
When I run `wp plugin list --name=debug-bar --field=status`
|
|
Then STDOUT should be:
|
|
"""
|
|
active-network
|
|
"""
|
|
|
|
When I try `wp plugin install debug-bar --activate-network`
|
|
Then STDERR should contain:
|
|
"""
|
|
Warning: debug-bar: Plugin already installed.
|
|
"""
|
|
And STDOUT should contain:
|
|
"""
|
|
Network-activating 'debug-bar'...
|
|
"""
|
|
And STDOUT should contain:
|
|
"""
|
|
Plugin 'debug-bar' network activated.
|
|
"""
|
|
And the return code should be 0
|
|
|
|
When I run `wp plugin list --name=debug-bar --field=status`
|
|
Then STDOUT should be:
|
|
"""
|
|
active-network
|
|
"""
|
|
|
|
Scenario: Install plugin from a zip file with a custom --slug
|
|
Given a WP install
|
|
|
|
When I run `wp plugin install https://github.com/wp-cli-test/generic-example-plugin/archive/refs/heads/master.zip --slug=my-custom-plugin`
|
|
Then STDOUT should contain:
|
|
"""
|
|
Renamed 'generic-example-plugin-master' to 'my-custom-plugin'.
|
|
"""
|
|
And STDOUT should contain:
|
|
"""
|
|
Plugin installed successfully.
|
|
"""
|
|
And the wp-content/plugins/my-custom-plugin directory should exist
|
|
And the wp-content/plugins/generic-example-plugin-master directory should not exist
|
|
And the return code should be 0
|
|
|
|
Scenario: Error when --slug is used with multiple plugins
|
|
Given a WP install
|
|
|
|
When I try `wp plugin install hello-dolly akismet --slug=my-plugin`
|
|
Then STDERR should contain:
|
|
"""
|
|
Error: The --slug option can only be used when installing a single item.
|
|
"""
|
|
And the return code should be 1
|