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"
"""