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/cache-command/features/cache.feature
Feature: Managed the WordPress object cache

  Scenario: Default group is 'default'
    Given a WP install
    And a wp-content/mu-plugins/test-harness.php file:
      """
      <?php
      $set_foo = function(){
        wp_cache_set( 'foo', 'bar' );
      };
      $set_foo_value = function() {
        wp_cache_set( 'foo', 2 );
      };
      $log_foo_value = function() {
        WP_CLI::log( var_export( wp_cache_get( 'foo' ), true ) );
      };
      WP_CLI::add_hook( 'before_invoke:cache get', $set_foo );
      WP_CLI::add_hook( 'before_invoke:cache delete', $set_foo );
      WP_CLI::add_hook( 'before_invoke:cache add', $set_foo );
      WP_CLI::add_hook( 'before_invoke:cache incr', $set_foo_value );
      WP_CLI::add_hook( 'before_invoke:cache decr', $set_foo_value );
      WP_CLI::add_hook( 'after_invoke:cache set', $log_foo_value );
      WP_CLI::add_hook( 'before_invoke:cache replace', $set_foo_value );
      """

    When I run `wp cache get foo`
    Then STDOUT should be:
      """
      bar
      """

    When I try `wp cache get bar`
    Then STDERR should be:
      """
      Error: Object with key 'bar' and group 'default' not found.
      """

    When I try `wp cache get bar burrito`
    Then STDERR should be:
      """
      Error: Object with key 'bar' and group 'burrito' not found.
      """

    When I run `wp cache delete foo`
    Then STDOUT should be:
      """
      Success: Object deleted.
      """

    When I try `wp cache delete bar`
    Then STDERR should be:
      """
      Error: The object was not deleted.
      """

    When I try `wp cache add foo bar`
    Then STDERR should be:
      """
      Error: Could not add object 'foo' in group 'default'. Does it already exist?
      """

    When I run `wp cache add bar burrito`
    Then STDOUT should be:
      """
      Success: Added object 'bar' in group 'default'.
      """

    When I run `wp cache add bar foo burrito`
    Then STDOUT should be:
      """
      Success: Added object 'bar' in group 'burrito'.
      """

    When I run `wp cache incr foo`
    Then STDOUT should be:
      """
      3
      """

    When I run `wp cache incr foo 2`
    Then STDOUT should be:
      """
      4
      """

    When I try `wp cache incr bar`
    Then STDERR should be:
      """
      Error: The value was not incremented.
      """

    When I run `wp cache decr foo`
    Then STDOUT should be:
      """
      1
      """

    When I run `wp cache decr foo 2`
    Then STDOUT should be:
      """
      0
      """

    When I try `wp cache decr bar`
    Then STDERR should be:
      """
      Error: The value was not decremented.
      """

    When I run `wp cache set foo bar`
    Then STDOUT should be:
      """
      Success: Set object 'foo' in group 'default'.
      'bar'
      """

    When I run `wp cache set burrito foo bar`
    Then STDOUT should be:
      """
      Success: Set object 'burrito' in group 'bar'.
      false
      """

    When I run `wp cache replace foo burrito`
    Then STDOUT should be:
      """
      Success: Replaced object 'foo' in group 'default'.
      """

    When I try `wp cache replace bar burrito foo`
    Then STDERR should be:
      """
      Error: Could not replace object 'bar' in group 'foo'. Does it not exist?
      """

  @require-wp-6.1
  Scenario: Some cache groups cannot be cleared.
    Given a WP install
    When I run `wp cache flush-group add_multiple`
    Then STDOUT should be:
      """
      Success: Cache group 'add_multiple' was flushed.
      """

  @require-wp-6.1
  Scenario: Some cache groups cannot be cleared.
    Given a WP install
    And a wp-content/mu-plugins/unclearable-test-cache.php file:
      """php
      <?php
      class Dummy_Object_Cache extends WP_Object_Cache {
        public function flush_group( $group ) {
          if ( $group === 'permanent_root_cache' ) {
            return false;
          }
          return parent::flush_group( $group );
        }
      }
      $GLOBALS['wp_object_cache'] = new Dummy_Object_Cache();
      """
    When I try `wp cache flush-group permanent_root_cache`
    Then STDERR should be:
      """
      Error: Cache group 'permanent_root_cache' was not flushed.
      """

  @less-than-wp-6.1
  Scenario: Some cache groups cannot be cleared.
    Given a WP install
    And a wp-content/mu-plugins/unclearable-test-cache.php file:
      """php
      <?php
      class Dummy_Object_Cache extends WP_Object_Cache {
        public function flush_group( $group ) {
          if ( $group === 'permanent_root_cache' ) {
            return false;
          }
          return parent::flush_group( $group );
        }
      }
      $GLOBALS['wp_object_cache'] = new Dummy_Object_Cache();
      """
    When I try `wp cache flush-group permanent_root_cache`
    Then STDERR should be:
      """
      Error: Group flushing is not supported.
      """

  Scenario: Flushing cache on a multisite installation
    Given a WP multisite installation

    When I try `wp cache flush`
    Then STDERR should not contain:
      """
      Warning: Flushing the cache may affect all sites in a multisite installation, depending on the implementation of the object cache.
      """

    When I try `wp cache flush --url=example.com`
    Then STDERR should contain:
      """
      Warning: Flushing the cache may affect all sites in a multisite installation, depending on the implementation of the object cache.
      """

  @require-wp-6.1
  Scenario: Checking if the cache supports a feature
    Given a WP install

    When I try `wp cache supports non_existing`
    Then the return code should be 1

    When I run `wp cache supports set_multiple`
    Then the return code should be 0