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/language-command/features/language-theme.feature
Feature: Manage theme translation files for a WordPress install

  @require-wp-4.0
  Scenario: Theme translation CRUD
    Given a WP install
    And an empty cache

    When I try `wp theme install twentyten`
    Then STDOUT should not be empty

    When I run `wp theme is-installed twentyten`
    Then the return code should be 0

    When I run `wp language theme list twentyten --fields=language,english_name,status`
    Then STDOUT should be a table containing rows:
      | language  | english_name            | status        |
      | cs_CZ     | Czech                   | uninstalled   |
      | de_DE     | German                  | uninstalled   |
      | en_US     | English (United States) | active        |
      | en_GB     | English (UK)            | uninstalled   |

    When I try `wp language theme list not-a-theme --format=json`
    Then STDOUT should be:
      """
      []
      """
    And STDERR should contain:
      """
      Warning: Theme 'not-a-theme' not found.
      """

    When I try `wp language theme is-installed twentyten en_GB`
    Then the return code should be 1
    And STDERR should be empty

    When I try `wp language theme is-installed twentyten de_DE`
    Then the return code should be 1
    And STDERR should be empty

    When I run `wp language theme install twentyten en_GB`
    Then the wp-content/languages/themes/twentyten-en_GB.po file should exist
    And STDOUT should contain:
      """
      Success: Installed 1 of 1 languages.
      """
    And STDERR should be empty

    When I run `wp language theme install twentyten cs_CZ de_DE`
    Then the wp-content/languages/themes/twentyten-cs_CZ.po file should exist
    And the wp-content/languages/themes/twentyten-de_DE.po file should exist
    And STDOUT should contain:
      """
      Success: Installed 2 of 2 languages.
      """
    And STDERR should be empty

    When I try `wp language theme is-installed twentyten en_GB`
    Then the return code should be 0

    When I try `wp language theme is-installed twentyten de_DE`
    Then the return code should be 0

    When I run `ls {SUITE_CACHE_DIR}/translation | grep theme-twentyten-`
    Then STDOUT should contain:
      """
      de_DE
      """
    And STDOUT should contain:
      """
      en_GB
      """

    When I try `wp language theme install twentyten en_GB`
    Then STDERR should be empty
    And STDOUT should be:
      """
      Language 'en_GB' already installed.
      Success: Installed 0 of 1 languages (1 skipped).
      """
    And the return code should be 0

    When I run `wp language theme list twentyten --fields=language,english_name,status`
    Then STDOUT should be a table containing rows:
      | language  | english_name            | status      |
      | cs_CZ     | Czech                   | installed   |
      | de_DE     | German                  | installed   |
      | en_GB     | English (UK)            | installed   |
      | en_US     | English (United States) | active      |

    When I run `wp language theme list twentyten --fields=language,english_name,update`
    Then STDOUT should be a table containing rows:
      | language  | english_name            | update   |
      | cs_CZ     | Czech                   | none     |
      | de_DE     | German                  | none     |
      | en_GB     | English (UK)            | none     |
      | en_US     | English (United States) | none     |

    When I run `wp language theme list twentyten --status=installed --format=count`
    Then STDOUT should be:
      """
      3
      """

    When I run `wp language theme update --all`
    Then STDOUT should contain:
      """
      Success: Translations are up to date.
      """
    And the wp-content/languages/themes directory should exist

    When I try `wp language core install en_GB --activate`
    Then STDOUT should contain:
      """
      Success: Language activated.
      """

    When I run `wp language theme list twentyten --fields=language,english_name,status`
    Then STDOUT should be a table containing rows:
      | language  | english_name            | status        |
      | cs_CZ     | Czech                   | installed     |
      | de_DE     | German                  | installed     |
      | en_US     | English (United States) | installed     |
      | en_GB     | English (UK)            | active        |

    When I run `wp language theme uninstall twentyten cs_CZ de_DE`
    Then the wp-content/languages/themes/twentyten-cs_CZ.po file should not exist
    And the wp-content/languages/themes/twentyten-cs_CZ.mo file should not exist
    And the wp-content/languages/themes/twentyten-cs_CZ.l10n.php file should not exist
    And the wp-content/languages/themes/twentyten-de_DE.po file should not exist
    And the wp-content/languages/themes/twentyten-de_DE.mo file should not exist
    And the wp-content/languages/themes/twentyten-de_DE.l10n.php file should not exist
      """
      Success: Language 'cs_CZ' for 'twentyten' uninstalled.
      Success: Language 'de_DE' for 'twentyten' uninstalled.
      """

    When I try `wp language theme uninstall twentyten de_DE`
    Then STDERR should contain:
      """
      Language 'de_DE' not installed.
      """
    And STDERR should contain:
      """
      Error: No languages uninstalled (1 failed).
      """
    And the return code should be 1

    When I try `wp language theme install twentyten invalid_lang`
    Then STDERR should be:
      """
      Warning: Language 'invalid_lang' for 'twentyten' not available.
      """
    And STDOUT should be:
      """
      Language 'invalid_lang' not installed.
      Success: Installed 0 of 1 languages (1 skipped).
      """
    And the return code should be 0

  @require-wp-4.0
  Scenario: Don't allow active language to be uninstalled
    Given a WP install

    When I run `wp language core install en_GB --activate`
    Then STDOUT should not be empty

    When I run `wp language theme install twentyten en_GB`
    Then the wp-content/languages/themes/twentyten-en_GB.po file should exist
    And STDOUT should contain:
      """
      Success: Installed 1 of 1 languages.
      """
    And STDERR should be empty

    When I try `wp language theme uninstall twentyten en_GB`
    Then STDERR should be:
      """
      Warning: The 'en_GB' language is active.
      """
    And STDOUT should be empty
    And the return code should be 0

  @require-wp-4.0
  Scenario: Not providing theme slugs should throw an error unless --all given
    Given a WP install
    And I run `wp theme path`
    And save STDOUT as {THEME_DIR}

    When I try `wp language theme list`
    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 try `wp language 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 try `wp language theme uninstall de_DE`
    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

    Given an empty {THEME_DIR} directory
    When I run `wp language theme list --all`
    Then STDOUT should be:
      """
      Success: No themes installed.
      """

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

    When I run `wp language theme uninstall de_DE --all`
    Then STDOUT should be:
      """
      Success: No themes installed.
      """

  @require-wp-4.0
  Scenario: Ensure correct language is installed for theme version
    Given a WP install
    And an empty cache
    And I run `wp theme install twentyseventeen --version=1.0 --force`

    When I run `wp language theme install twentyseventeen de_DE`
    Then STDOUT should contain:
      """
      Downloading translation from https://downloads.wordpress.org/translation/theme/twentyseventeen/1.0/de_DE.zip
      """

    When I run `wp theme install twentyseventeen --version=1.6 --force`
    And I run `wp language theme update twentyseventeen`
    Then STDOUT should contain:
      """
      Downloading translation from https://downloads.wordpress.org/translation/theme/twentyseventeen/1.6/de_DE.zip
      """

  @require-wp-4.0
  Scenario: Install translations for all installed themes
    Given a WP install
    And I run `wp theme path`
    And save STDOUT as {THEME_DIR}
    And an empty {THEME_DIR} directory
    And I run `wp theme install twentyseventeen --version=1.0 --force`
    And I run `wp theme install twentysixteen --version=1.0 --force`

    When I try `wp language theme install de_DE`
    Then the return code should be 1
    And STDERR should be:
      """
      Error: Please specify a theme, or use --all.
      """
    And STDOUT should be empty

    When I run `wp language theme install --all de_DE --format=csv`
    Then the return code should be 0
    And STDOUT should be:
      """
      name,locale,status
      twentyseventeen,de_DE,installed
      twentysixteen,de_DE,installed
      """
    And STDERR should be empty

    When I run `wp language theme install --all de_DE --format=summary`
    Then the return code should be 0
    And STDOUT should contain:
      """
      Success: Installed 0 of 2 languages (2 skipped).
      """
    And STDERR should be empty

    When I run `wp language theme install --all de_DE invalid_lang --format=csv`
    Then the return code should be 0
    And STDOUT should contain:
      """
      name,locale,status
      twentyseventeen,de_DE,"already installed"
      twentyseventeen,invalid_lang,"not available"
      twentysixteen,de_DE,"already installed"
      twentysixteen,invalid_lang,"not available"
      """
    And STDERR should be empty

    When I run `wp language theme uninstall --all de_DE --format=csv`
    Then the return code should be 0
    And STDOUT should be:
      """
      name,locale,status
      twentyseventeen,de_DE,uninstalled
      twentysixteen,de_DE,uninstalled
      """
    And STDERR should be empty

    When I run `wp language theme uninstall --all de_DE --format=csv`
    Then the return code should be 0
    And STDOUT should be:
      """
      name,locale,status
      twentyseventeen,de_DE,"not installed"
      twentysixteen,de_DE,"not installed"
      """
    And STDERR should be empty

  @require-wp-4.0
  Scenario: List languages by multiple statuses
    Given a WP install
    And an empty cache
    And I run `wp theme install twentyten --force`
    And I run `wp language theme install twentyten nl_NL`

    When I run `wp language theme list twentyten --fields=language,status --status=active,installed`
    Then STDOUT should be a table containing rows:
      | language | status    |
      | en_US    | active    |
      | nl_NL    | installed |
    And STDERR should be empty