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/extension-command/features/theme-update.feature
Feature: Update WordPress themes

  Scenario: Updating a theme with no version in the WordPress.org directory shouldn't delete the original theme
    Given a WP install

    When I run `wp scaffold underscores wpclitesttheme`
    Then STDOUT should contain:
      """
      Success: Created theme
      """
    And the wp-content/themes/wpclitesttheme directory should exist

    When I try `wp theme update wpclitesttheme --version=100.0.0`
    Then STDERR should contain:
      """
      Error: No themes installed
      """
    And the wp-content/themes/wpclitesttheme directory should exist

  Scenario: Install a theme, then update to a specific version of that theme
    Given a WP install
    And I run `wp theme delete --all --force`

    When I run `wp theme install twentytwelve --version=3.0`
    Then STDOUT should not be empty

    When I run `wp theme update twentytwelve --version=4.0`
    Then STDOUT should not be empty

    When I run `wp theme list --fields=name,version`
    Then STDOUT should be a table containing rows:
      | name         | version   |
      | twentytwelve | 4.0       |

  @require-wp-4.5
  Scenario: Not giving a slug on update should throw an error unless --all given
    Given a WP install
    And I run `wp theme path`
    And save STDOUT as {THEME_DIR}
    And an empty {THEME_DIR} directory

    # No themes installed. Don't give an error if --all given for BC.
    When I run `wp theme update --all`
    Then STDOUT should be:
      """
      Success: No themes installed.
      """

    When I run `wp theme update --version=0.6 --all`
    Then STDOUT should be:
      """
      Success: No themes installed.
      """

    # One theme installed.
    Given I run `wp theme install moina --version=1.0.2`

    When I try `wp theme update`
    Then the return code should be 1
    And STDERR should be:
      """
      Error: Please specify one or more themes, or use --all.
      """
    And STDOUT should be empty

    When I run `wp theme update --all`
    Then STDOUT should contain:
      """
      Success: Updated
      """

    When I run the previous command again
    Then STDOUT should be:
      """
      Success: Theme already updated.
      """

    # Note: if given version then re-installs.
    When I run `wp theme update --version=1.0.2 --all`
    Then STDOUT should contain:
      """
      Success: Installed 1 of 1 themes.
      """

    When I run the previous command again
    Then STDOUT should contain:
      """
      Success: Installed 1 of 1 themes.
      """

    # Two themes installed.
    Given I run `wp theme install --force twentytwelve --version=1.0`

    When I run `wp theme update --all`
    Then STDOUT should contain:
      """
      Success: Updated
      """

    When I run the previous command again
    # BUG: Message should be in plural.
    Then STDOUT should be:
      """
      Success: Theme already updated.
      """

    # Using version with all rarely makes sense and should probably error and do nothing.
    When I try `wp theme update --version=1.0.3 --all`
    Then the return code should be 1
    And STDOUT should contain:
      """
      Success: Installed 1 of 1 themes.
      """
    And STDERR should be:
      """
      Error: Can't find the requested theme's version 1.0.3 in the WordPress.org theme repository (HTTP code 404).
      """

  Scenario: Error when both --minor and --patch are provided
    Given a WP install

    When I try `wp theme update --patch --minor --all`
    Then STDERR should be:
      """
      Error: --minor and --patch cannot be used together.
      """
    And the return code should be 1

  Scenario: Update a theme to its latest minor release
    Given a WP install
    And I run `wp theme install --force twentytwelve --version=3.0`

    When I run `wp theme update twentytwelve --minor`
    Then STDOUT should contain:
      """
      Success: Updated 1 of 1 themes.
      """

    When I run `wp theme get twentytwelve --field=version`
    Then STDOUT should be:
      """
      3.9
      """

  Scenario: Update a theme to its latest patch release
    Given a WP install
    And I run `wp theme install --force twentytwelve --version=1.1`

    When I run `wp theme update twentytwelve --patch`
    Then STDOUT should contain:
      """
      Success: Updated 1 of 1 themes.
      """

    When I run `wp theme get twentytwelve --field=version`
    Then STDOUT should be:
      """
      1.1.1
      """