HEX
Server: Apache
System: Linux pdx1-shared-a1-38 6.6.104-grsec-jammy+ #3 SMP Tue Sep 16 00:28:11 UTC 2025 x86_64
User: mmickelson (3396398)
PHP: 8.1.31
Disabled: NONE
Upload Files
File: //usr/local/wp/vendor/wp-cli/core-command/features/core-download.feature
Feature: Download WordPress

  Scenario: Empty dir
    Given an empty directory
    And an empty cache

    When I try `wp core is-installed`
    Then the return code should be 1
    And STDERR should contain:
      """
      Error: This does not seem to be a WordPress install
      """
    And STDOUT should be empty

    When I run `wp core download`
    And save STDOUT 'Downloading WordPress ([\d\.]+)' as {VERSION}
    Then the wp-settings.php file should exist
    And the {SUITE_CACHE_DIR}/core/wordpress-{VERSION}-en_US.tar.gz file should exist

    When I run `mkdir inner`
    And I run `cd inner && wp core download`
    Then the inner/wp-settings.php file should exist

    When I try `wp core download --path=inner`
    Then STDERR should be:
      """
      Error: WordPress files seem to already be present here.
      """
    And the return code should be 1

    When I try `WP_CLI_STRICT_ARGS_MODE=1 wp core download --path=inner`
    Then STDERR should be:
      """
      Error: WordPress files seem to already be present here.
      """
    And the return code should be 1

    # test core tarball cache
    When I run `wp core download --force`
    Then the wp-settings.php file should exist
    And STDOUT should contain:
      """
      Using cached file '{SUITE_CACHE_DIR}/core/wordpress-{VERSION}-en_US.tar.gz'...
      """

  Scenario: Localized install
    Given an empty directory
    And an empty cache
    When I run `wp core download --version=4.4.2 --locale=de_DE`
    And save STDOUT 'Downloading WordPress ([\d\.]+)' as {VERSION}
    Then the wp-settings.php file should exist
    And the {SUITE_CACHE_DIR}/core/wordpress-{VERSION}-de_DE.tar.gz file should exist

  Scenario: Catch download of non-existent WP version
    Given an empty directory

    When I try `wp core download --version=1.0.3 --force`
    Then STDERR should contain:
      """
      Error: Release not found.
      """
    And the return code should be 1

  Scenario: Core download from a URL
    Given an empty directory
    And an empty cache

    When I run `wp core download https://wordpress.org/wordpress-4.9.12.zip`
    Then the wp-settings.php file should exist
    And the {SUITE_CACHE_DIR}/core directory should not exist
    And STDOUT should contain:
      """
      Downloading from https://wordpress.org/wordpress-4.9.12.zip ...
      md5 hash verified: 702c94bc3aa8a37091f9fb075d57d847
      Success: WordPress downloaded.
      """

  Scenario: Verify release hash when downloading new version
    Given an empty directory
    And an empty cache

    When I run `wp core download --version=4.4.1`
    Then STDOUT should contain:
      """
      md5 hash verified: 1907d1dbdac7a009d89224a516496b8d
      Success: WordPress downloaded.
      """

  Scenario: Core download to a directory specified by `--path` in custom command
    Given a WP install
    And a download-command.php file:
      """
      <?php
      class Download_Command extends WP_CLI_Command {
          public function __invoke() {
              WP_CLI::run_command( array( 'core', 'download' ), array( 'path' => 'src/' ) );
          }
      }
      WP_CLI::add_command( 'custom-download', 'Download_Command' );
      """

    When I run `wp --require=download-command.php custom-download`
    Then STDOUT should not be empty
    And the src directory should contain:
      """
      wp-load.php
      """

    When I try `wp --require=download-command.php custom-download`
    Then STDERR should be:
      """
      Error: WordPress files seem to already be present here.
      """
    And the return code should be 1

  Scenario: Make sure files are cleaned up
    Given an empty directory

    When I run `wp core download --version=4.4`
    Then the wp-includes/rest-api.php file should exist
    And the wp-includes/class-wp-comment.php file should exist
    And STDERR should not contain:
      """
      Warning: Failed to find WordPress version. Please cleanup files manually.
      """

    When I run `wp core download --version=4.3.2 --force`
    Then the wp-includes/rest-api.php file should not exist
    And the wp-includes/class-wp-comment.php file should not exist
    And STDOUT should not contain:
      """
      File removed: wp-content
      """

  Scenario: Installing nightly
    Given an empty directory
    And an empty cache

    When I try `wp core download --version=nightly`
    Then the wp-settings.php file should exist
    And the {SUITE_CACHE_DIR}/core/wordpress-nightly-en_US.zip file should not exist
    And STDOUT should contain:
      """
      Downloading WordPress nightly (en_US)...
      """
    And STDERR should contain:
      """
      Warning: md5 hash checks are not available for nightly downloads.
      """
    And STDOUT should contain:
      """
      Success: WordPress downloaded.
      """
    And the return code should be 0

    # we shouldn't cache nightly builds
    When I try `wp core download --version=nightly --force`
    Then the wp-settings.php file should exist
    And STDOUT should not contain:
      """
      Using cached file '{SUITE_CACHE_DIR}/core/wordpress-nightly-en_US.zip'...
      """
    And STDERR should contain:
      """
      Warning: md5 hash checks are not available for nightly downloads.
      """
    And STDOUT should contain:
      """
      Success: WordPress downloaded.
      """
    And the return code should be 0

  Scenario: Installing nightly over an existing install
    Given an empty directory
    And an empty cache
    When I run `wp core download --version=4.5.3`
    Then the wp-settings.php file should exist
    When I try `wp core download --version=nightly --force`
    Then STDERR should not contain:
      """
      Failed to find WordPress version
      """
    And STDERR should contain:
      """
      Warning: Checksums not available for WordPress nightly/en_US. Please cleanup files manually.
      """
    And STDOUT should contain:
      """
      Success: WordPress downloaded.
      """
    And the return code should be 0

  Scenario: Installing a version over nightly
    Given an empty directory
    And an empty cache
    When I try `wp core download --version=nightly`
    Then the wp-settings.php file should exist
    And STDERR should not contain:
      """
      Warning: Failed to find WordPress version. Please cleanup files manually.
      """
    And STDOUT should contain:
      """
      Success: WordPress downloaded.
      """
    And the return code should be 0

    When I run `wp core download --version=4.3.2 --force`
    Then the wp-includes/rest-api.php file should not exist
    And the wp-includes/class-wp-comment.php file should not exist
    And STDOUT should not contain:
      """
      File removed: wp-content
      """

  Scenario: Trunk is an alias for nightly
    Given an empty directory
    And an empty cache
    When I try `wp core download --version=trunk`
    Then the wp-settings.php file should exist
    And STDOUT should contain:
      """
      Downloading WordPress nightly (en_US)...
      """
    And STDERR should contain:
      """
      Warning: md5 hash checks are not available for nightly downloads.
      """
    And STDOUT should contain:
      """
      Success: WordPress downloaded.
      """
    And the return code should be 0

  Scenario: Installing nightly for a non-default locale
    Given an empty directory
    And an empty cache

    When I try `wp core download --version=nightly --locale=de_DE`
    Then the return code should be 1
    And STDERR should contain:
      """
      Error: Nightly builds are only available for the en_US locale.
      """

  Scenario: Installing a release candidate or beta version
    Given an empty directory
    And an empty cache

    # Test with incorrect case.
    When I try `wp core download --version=4.6-rc2`
    Then the return code should be 1
    And STDERR should contain:
      """
      Error: Release not found.
      """

    When I run `wp core download --version=4.6-RC2`
    Then the wp-settings.php file should exist
    And STDOUT should contain:
      """
      Downloading WordPress 4.6-RC2 (en_US)...
      md5 hash verified: 90c93a15092b2d5d4c960ec1fc183e07
      Success: WordPress downloaded.
      """

  Scenario: Using --version=latest should produce a cache key of the version number, not 'latest'
    Given an empty directory
    And an empty cache

    When I run `wp core download --version=latest`
    Then STDOUT should contain:
      """
      Success: WordPress downloaded.
      """

    When I run `wp core version`
    Then save STDOUT as {VERSION}
    And the {SUITE_CACHE_DIR}/core/wordpress-latest-en_US.tar.gz file should not exist
    And the {SUITE_CACHE_DIR}/core/wordpress-{VERSION}-en_US.tar.gz file should exist

  Scenario: Fail if path can't be created
    Given an empty directory
    And a non-directory-path file:
      """
      """

    When I try `wp core download --path=non-directory-path`
    Then STDERR should contain:
      """
      Failed to create directory
      """
    And STDERR should contain:
      """
      /non-directory-path/
      """
    And the return code should be 1

    When I try `WP_CLI_STRICT_ARGS_MODE=1 wp core download --path=non-directory-path`
    Then STDERR should contain:
      """
      Failed to create directory
      """
    And STDERR should contain:
      """
      non-directory-path/
      """
    And the return code should be 1

    When I try `WP_CLI_STRICT_ARGS_MODE=1 wp core download --path=non-directory-path\\`
    Then STDERR should contain:
      """
      Failed to create directory
      """
    And STDERR should contain:
      """
      non-directory-path/
      """
    And the return code should be 1

    When I try `wp core download --path=/root-level-directory`
    Then STDERR should contain:
      """
      Insufficient permission to create directory
      """
    And STDERR should contain:
      """
      /root-level-directory/
      """
    And the return code should be 1

    When I try `WP_CLI_STRICT_ARGS_MODE=1 wp core download --path=/root-level-directory`
    Then STDERR should contain:
      """
      Insufficient permission to create directory
      """
    And STDERR should contain:
      """
      /root-level-directory/
      """
    And the return code should be 1

  Scenario: Core download without the full wp-content/plugins dir
    Given an empty directory

    When I run `wp core download --skip-content`
    Then STDOUT should contain:
      """
      Success: WordPress downloaded.
      """
    And the wp-includes directory should exist
    And the wp-content/plugins directory should exist
    And the wp-content/plugins directory should be:
      """
      index.php
      """
    And the wp-includes/js/tinymce/plugins directory should exist

  Scenario: Core download without the full wp-content/themes dir
    Given an empty directory

    When I run `wp core download --skip-content`
    Then STDOUT should contain:
      """
      Success: WordPress downloaded.
      """
    And the wp-includes directory should exist
    And the wp-content/themes directory should exist
    And the wp-content/themes directory should be:
      """
      index.php
      """
    And the wp-includes/js/tinymce/themes directory should exist

  Scenario: Core download without the full wp-content/plugins dir should work non US locale
    Given an empty directory

    When I run `wp core download --skip-content --version=4.9.11 --locale=nl_NL`
    Then STDOUT should contain:
      """
      Success: WordPress downloaded.
      """
    And the wp-includes directory should exist
    And the wp-content/plugins directory should exist
    And the wp-content/plugins directory should be:
      """
      index.php
      """
    And the wp-includes/js/tinymce/plugins directory should exist

  Scenario: Core download without the full wp-content/themes dir should work non US locale
    Given an empty directory

    When I run `wp core download --skip-content --version=4.9.11 --locale=nl_NL`
    Then STDOUT should contain:
      """
      Success: WordPress downloaded.
      """
    And the wp-includes directory should exist
    And the wp-content/themes directory should exist
    And the wp-content/themes directory should be:
      """
      index.php
      """
    And the wp-includes/js/tinymce/themes directory should exist

  Scenario: Core download without the full wp-content/plugins dir should work if a version is set
    Given an empty directory

    When I try `wp core download --skip-content --version=4.7`
    Then STDOUT should contain:
      """
      Success: WordPress downloaded.
      """
    And the wp-includes directory should exist
    And the wp-content/plugins directory should exist
    And the wp-content/plugins directory should be:
      """
      index.php
      """
    And the wp-content/themes directory should exist
    And the wp-content/themes directory should be:
      """
      index.php
      """
    And the wp-includes/js/tinymce/themes directory should exist
    And the wp-includes/js/tinymce/plugins directory should exist

  Scenario: Core download without extract parameter should unzip the download file
    Given an empty directory

    When I run `wp core download --version=4.5 --locale=de_DE`
    Then the wp-content directory should exist
    And the wordpress-4.5-de_DE.tar.gz file should not exist

  Scenario: Core download with extract parameter should unzip the download file
    Given an empty directory

    When I run `wp core download --version=4.5 --locale=de_DE --extract`
    Then the wp-content directory should exist
    And the wordpress-4.5-de_DE.tar.gz file should not exist

  Scenario: Core download with extract parameter should unzip the download file (already cached)
    Given an empty directory

    When I run `wp core download --version=4.5 --locale=de_DE --extract`
    And I run `rm -rf *`
    And I run `wp core download --version=4.5 --locale=de_DE --extract`
    Then the wp-content directory should exist
    And the wordpress-4.5-de_DE.tar.gz file should not exist

  Scenario: Core download with no-extract should not unzip the download file
    Given an empty directory

    When I run `wp core download --version=4.5 --locale=de_DE --no-extract`
    Then the wp-content directory should not exist
    And the wordpress-4.5-de_DE.tar.gz file should exist

  Scenario: Core download with no-extract should not unzip the download file (already cached)
    Given an empty directory

    When I run `wp core download --version=4.5 --locale=de_DE --no-extract`
    And I run `rm -rf wordpress-4.5-de_DE.tar.gz`
    And I run `wp core download --version=4.5 --locale=de_DE --no-extract`
    Then the wp-content directory should not exist
    And the wordpress-4.5-de_DE.tar.gz file should exist

  Scenario: Error when using both --skip-content and --no-extract
    Given an empty directory

    When I try `wp core download --skip-content --no-extract`
    Then STDERR should contain:
      """
      Error: Cannot use both --skip-content and --no-extract at the same time.
      """
    And the return code should be 1

  Scenario: Allow installing major version with trailing zero
    Given an empty directory

    When I run `wp core download --version=6.7.0`
    Then STDOUT should contain:
      """
      Success:
      """