Feature: Manage post custom fields Scenario: Postmeta CRUD Given a WP install When I run `wp post-meta add 1 foo 'bar'` Then STDOUT should not be empty When I run `wp post-meta get 1 foo` Then STDOUT should be: """ bar """ When I try `wp post meta get 999999 foo` Then STDERR should be: """ Error: Could not find the post with ID 999999. """ And the return code should be 1 When I run `wp post-meta set 1 foo '[ "1", "2" ]' --format=json` Then STDOUT should not be empty When I run the previous command again Then STDOUT should be: """ Success: Value passed for custom field 'foo' is unchanged. """ When I run `wp post-meta get 1 foo --format=json` Then STDOUT should be: """ ["1","2"] """ When I run `echo 'via STDIN' | wp post-meta set 1 foo` And I run `wp post-meta get 1 foo` Then STDOUT should be: """ via STDIN """ When I run `wp post-meta delete 1 foo` Then STDOUT should not be empty When I try `wp post-meta get 1 foo` Then the return code should be 1 Scenario: List post meta Given a WP install When I run `wp post meta add 1 apple banana` And I run `wp post meta add 1 apple banana` Then STDOUT should not be empty When I run `wp post meta set 1 banana '["apple", "apple"]' --format=json` Then STDOUT should not be empty When I run `wp post meta list 1` Then STDOUT should be a table containing rows: | post_id | meta_key | meta_value | | 1 | apple | banana | | 1 | apple | banana | | 1 | banana | a:2:{i:0;s:5:"apple";i:1;s:5:"apple";} | When I run `wp post meta list 1 --unserialize` Then STDOUT should be a table containing rows: | post_id | meta_key | meta_value | | 1 | apple | banana | | 1 | apple | banana | | 1 | banana | ["apple","apple"] | When I run `wp post meta list 1 --orderby=id --order=desc` Then STDOUT should be a table containing rows: | post_id | meta_key | meta_value | | 1 | banana | a:2:{i:0;s:5:"apple";i:1;s:5:"apple";} | | 1 | apple | banana | | 1 | apple | banana | When I run `wp post meta list 1 --orderby=id --order=desc --unserialize` Then STDOUT should be a table containing rows: | post_id | meta_key | meta_value | | 1 | banana | ["apple","apple"] | | 1 | apple | banana | | 1 | apple | banana | When I run `wp post meta list 1 --orderby=meta_key --order=asc` Then STDOUT should be a table containing rows: | post_id | meta_key | meta_value | | 1 | apple | banana | | 1 | apple | banana | | 1 | banana | a:2:{i:0;s:5:"apple";i:1;s:5:"apple";} | When I run `wp post meta list 1 --orderby=meta_key --order=asc --unserialize` Then STDOUT should be a table containing rows: | post_id | meta_key | meta_value | | 1 | apple | banana | | 1 | apple | banana | | 1 | banana | ["apple","apple"] | When I run `wp post meta list 1 --orderby=meta_key --order=desc` Then STDOUT should be a table containing rows: | post_id | meta_key | meta_value | | 1 | banana | a:2:{i:0;s:5:"apple";i:1;s:5:"apple";} | | 1 | apple | banana | | 1 | apple | banana | When I run `wp post meta list 1 --orderby=meta_key --order=desc --unserialize` Then STDOUT should be a table containing rows: | post_id | meta_key | meta_value | | 1 | banana | ["apple","apple"] | | 1 | apple | banana | | 1 | apple | banana | When I run `wp post meta list 1 --orderby=meta_value --order=asc` Then STDOUT should be a table containing rows: | post_id | meta_key | meta_value | | 1 | apple | banana | | 1 | apple | banana | | 1 | banana | a:2:{i:0;s:5:"apple";i:1;s:5:"apple";} | When I run `wp post meta list 1 --orderby=meta_value --order=asc --unserialize` Then STDOUT should be a table containing rows: | post_id | meta_key | meta_value | | 1 | apple | banana | | 1 | apple | banana | | 1 | banana | ["apple","apple"] | When I run `wp post meta list 1 --orderby=meta_value --order=desc` Then STDOUT should be a table containing rows: | post_id | meta_key | meta_value | | 1 | banana | a:2:{i:0;s:5:"apple";i:1;s:5:"apple";} | | 1 | apple | banana | | 1 | apple | banana | When I run `wp post meta list 1 --orderby=meta_value --order=desc --unserialize` Then STDOUT should be a table containing rows: | post_id | meta_key | meta_value | | 1 | banana | ["apple","apple"] | | 1 | apple | banana | | 1 | apple | banana | Scenario: Delete all post meta Given a WP install When I run `wp post meta add 1 apple banana` And I run `wp post meta add 1 _foo banana` Then STDOUT should not be empty When I run `wp post meta list 1 --format=count` Then STDOUT should be: """ 2 """ When I try `wp post meta delete 1` Then STDERR should be: """ Error: Please specify a meta key, or use the --all flag. """ And the return code should be 1 When I run `wp post meta delete 1 --all` Then STDOUT should contain: """ Deleted 'apple' custom field. Deleted '_foo' custom field. Success: Deleted all custom fields. """ When I run `wp post meta list 1 --format=count` Then STDOUT should be: """ 0 """ Scenario: List post meta with a null value Given a WP install And a setup.php file: """