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/transient-patch.feature
Feature: Patch command available for the transient cache

  Scenario: Nested values from transient can be inserted at any depth.
    Given a WP install
    And I run `wp eval "set_transient( 'my_key', ['foo' => 'bar'] );"`
    And I run `wp eval "set_transient( 'my_key_2', ['foo' => ['bar' => 'baz']] );"`

    When I run `wp transient patch insert my_key fuz baz`
    Then STDOUT should be:
      """
      Success: Updated transient 'my_key'.
      """

    When I run `wp transient get my_key --format=json`
    Then STDOUT should be:
      """
      {"foo":"bar","fuz":"baz"}
      """

    When I run `wp transient patch insert my_key foo bar`
    Then STDOUT should be:
      """
      Success: Value passed for transient 'my_key' is unchanged.
      """

    When I run `wp transient get my_key --format=json`
    Then STDOUT should be:
      """
      {"foo":"bar","fuz":"baz"}
      """

    When I run `wp transient patch insert my_key_2 foo fuz biz`
    Then STDOUT should be:
      """
      Success: Updated transient 'my_key_2'.
      """

    When I run `wp transient get my_key_2 --format=json`
    Then STDOUT should be:
      """
      {"foo":{"bar":"baz","fuz":"biz"}}
      """

    When I run `wp transient patch insert my_key_2 foo bar baz`
    Then STDOUT should be:
      """
      Success: Value passed for transient 'my_key_2' is unchanged.
      """

    When I run `wp transient get my_key_2 --format=json`
    Then STDOUT should be:
      """
      {"foo":{"bar":"baz","fuz":"biz"}}
      """

    When I try `wp transient patch insert unknown_key foo bar`
    Then STDERR should be:
      """
      Error: Cannot create key "foo" on data type boolean
      """

  Scenario: Nested values from transient can be updated at any depth.
    Given a WP install
    And I run `wp eval "set_transient( 'my_key', ['foo' => 'bar'] );"`
    And I run `wp eval "set_transient( 'my_key_2', ['foo' => ['bar' => 'baz']] );"`

    When I run `wp transient patch update my_key foo baz`
    Then STDOUT should be:
      """
      Success: Updated transient 'my_key'.
      """

    When I run `wp transient get my_key --format=json`
    Then STDOUT should be:
      """
      {"foo":"baz"}
      """

    When I run `wp transient patch update my_key foo baz`
    Then STDOUT should be:
      """
      Success: Value passed for transient 'my_key' is unchanged.
      """

    When I run `wp transient get my_key --format=json`
    Then STDOUT should be:
      """
      {"foo":"baz"}
      """

    When I run `wp transient patch update my_key_2 foo bar biz`
    Then STDOUT should be:
      """
      Success: Updated transient 'my_key_2'.
      """

    When I run `wp transient get my_key_2 --format=json`
    Then STDOUT should be:
      """
      {"foo":{"bar":"biz"}}
      """

    When I run `wp transient patch update my_key_2 foo bar biz`
    Then STDOUT should be:
      """
      Success: Value passed for transient 'my_key_2' is unchanged.
      """

    When I run `wp transient get my_key_2 --format=json`
    Then STDOUT should be:
      """
      {"foo":{"bar":"biz"}}
      """

    When I try `wp transient patch update unknown_key foo bar`
    Then STDERR should be:
      """
      Error: No data exists for key "foo"
      """

  Scenario: Nested values from transient can be deleted at any depth.
    Given a WP install
    And I run `wp eval "set_transient( 'my_key', ['foo' => 'bar'] );"`
    And I run `wp eval "set_transient( 'my_key_2', ['foo' => ['bar' => 'baz']] );"`

    When I run `wp transient patch delete my_key foo`
    Then STDOUT should be:
      """
      Success: Updated transient 'my_key'.
      """

    When I run `wp transient get my_key --format=json`
    Then STDOUT should be:
      """
      []
      """

    When I run `wp transient patch delete my_key_2 foo bar`
    Then STDOUT should be:
      """
      Success: Updated transient 'my_key_2'.
      """

    When I run `wp transient get my_key_2 --format=json`
    Then STDOUT should be:
      """
      {"foo":[]}
      """

    When I run `wp transient patch delete my_key_2 foo`
    Then STDOUT should be:
      """
      Success: Updated transient 'my_key_2'.
      """

    When I run `wp transient get my_key_2 --format=json`
    Then STDOUT should be:
      """
      []
      """

    When I try `wp transient patch delete unknown_key foo`
    Then STDERR should be:
      """
      Error: No data exists for key "foo"
      """

  Scenario: Nested values from site transient can be inserted at any depth.
    Given a WP multisite install
    And I run `wp eval "set_site_transient( 'my_key', ['foo' => 'bar'] );"`
    And I run `wp eval "set_site_transient( 'my_key_2', ['foo' => ['bar' => 'baz']] );"`

    When I run `wp transient patch insert my_key fuz baz --network`
    Then STDOUT should be:
      """
      Success: Updated transient 'my_key'.
      """

    When I run `wp transient get my_key --format=json --network`
    Then STDOUT should be:
      """
      {"foo":"bar","fuz":"baz"}
      """

    When I run `wp transient patch insert my_key foo bar --network`
    Then STDOUT should be:
      """
      Success: Value passed for transient 'my_key' is unchanged.
      """

    When I run `wp transient get my_key --format=json --network`
    Then STDOUT should be:
      """
      {"foo":"bar","fuz":"baz"}
      """

    When I run `wp transient patch insert my_key_2 foo fuz biz --network`
    Then STDOUT should be:
      """
      Success: Updated transient 'my_key_2'.
      """

    When I run `wp transient get my_key_2 --format=json --network`
    Then STDOUT should be:
      """
      {"foo":{"bar":"baz","fuz":"biz"}}
      """

    When I run `wp transient patch insert my_key_2 foo bar baz --network`
    Then STDOUT should be:
      """
      Success: Value passed for transient 'my_key_2' is unchanged.
      """

    When I run `wp transient get my_key_2 --format=json --network`
    Then STDOUT should be:
      """
      {"foo":{"bar":"baz","fuz":"biz"}}
      """

    When I try `wp transient patch insert unknown_key foo bar --network`
    Then STDERR should be:
      """
      Error: Cannot create key "foo" on data type boolean
      """

  Scenario: Nested values from site transient can be updated at any depth.
    Given a WP multisite install
    And I run `wp eval "set_site_transient( 'my_key', ['foo' => 'bar'] );"`
    And I run `wp eval "set_site_transient( 'my_key_2', ['foo' => ['bar' => 'baz']] );"`

    When I run `wp transient patch update my_key foo baz --network`
    Then STDOUT should be:
      """
      Success: Updated transient 'my_key'.
      """

    When I run `wp transient get my_key --format=json --network`
    Then STDOUT should be:
      """
      {"foo":"baz"}
      """

    When I run `wp transient patch update my_key foo baz --network`
    Then STDOUT should be:
      """
      Success: Value passed for transient 'my_key' is unchanged.
      """

    When I run `wp transient get my_key --format=json --network`
    Then STDOUT should be:
      """
      {"foo":"baz"}
      """

    When I run `wp transient patch update my_key_2 foo bar biz --network`
    Then STDOUT should be:
      """
      Success: Updated transient 'my_key_2'.
      """

    When I run `wp transient get my_key_2 --format=json --network`
    Then STDOUT should be:
      """
      {"foo":{"bar":"biz"}}
      """

    When I run `wp transient patch update my_key_2 foo bar biz --network`
    Then STDOUT should be:
      """
      Success: Value passed for transient 'my_key_2' is unchanged.
      """

    When I run `wp transient get my_key_2 --format=json --network`
    Then STDOUT should be:
      """
      {"foo":{"bar":"biz"}}
      """

    When I try `wp transient patch update unknown_key foo bar --network`
    Then STDERR should be:
      """
      Error: No data exists for key "foo"
      """

  Scenario: Nested values from site transient can be deleted at any depth.
    Given a WP multisite install
    And I run `wp eval "set_site_transient( 'my_key', ['foo' => 'bar'] );"`
    And I run `wp eval "set_site_transient( 'my_key_2', ['foo' => ['bar' => 'baz']] );"`

    When I run `wp transient patch delete my_key foo --network`
    Then STDOUT should be:
      """
      Success: Updated transient 'my_key'.
      """

    When I run `wp transient get my_key --format=json --network`
    Then STDOUT should be:
      """
      []
      """

    When I run `wp transient patch delete my_key_2 foo bar --network`
    Then STDOUT should be:
      """
      Success: Updated transient 'my_key_2'.
      """

    When I run `wp transient get my_key_2 --format=json --network`
    Then STDOUT should be:
      """
      {"foo":[]}
      """

    When I run `wp transient patch delete my_key_2 foo --network`
    Then STDOUT should be:
      """
      Success: Updated transient 'my_key_2'.
      """

    When I run `wp transient get my_key_2 --format=json --network`
    Then STDOUT should be:
      """
      []
      """

    When I try `wp transient patch delete unknown_key foo --network`
    Then STDERR should be:
      """
      Error: No data exists for key "foo"
      """