diff --git a/features/sidebar.feature b/features/sidebar.feature index 3741e57b..5e5d4315 100644 --- a/features/sidebar.feature +++ b/features/sidebar.feature @@ -1,12 +1,10 @@ Feature: Manage WordPress sidebars - - Scenario: List available sidebars + Background: Given a WP install - - When I try `wp theme delete twentytwelve --force` + And I try `wp theme delete twentytwelve --force` And I run `wp theme install twentytwelve --activate` - Then STDOUT should not be empty + Scenario: List available sidebars When I run `wp sidebar list --fields=name,id` Then STDOUT should be a table containing rows: | name | id | @@ -14,15 +12,37 @@ Feature: Manage WordPress sidebars | First Front Page Widget Area | sidebar-2 | | Second Front Page Widget Area | sidebar-3 | | Inactive Widgets | wp_inactive_widgets | - When I run `wp sidebar list --format=ids` Then STDOUT should be: """ sidebar-1 sidebar-2 sidebar-3 wp_inactive_widgets """ - When I run `wp sidebar list --format=count` Then STDOUT should be: """ 4 """ + + Scenario: Get sidebar details + When I run `wp sidebar get sidebar-1` + Then STDOUT should contain: + """ + sidebar-1 + """ + + Scenario: Sidebar exists command returns success + When I run `wp sidebar exists sidebar-1` + Then the return code should be 0 + + Scenario: Sidebar exists command returns failure + When I try `wp sidebar exists does-not-exist` + Then the return code should be 1 + + Scenario: Get non-existing sidebar returns error + When I try `wp sidebar get does-not-exist` + Then STDERR should contain: + """ + does not exist + """ + And the return code should be 1 + \ No newline at end of file diff --git a/src/Sidebar_Command.php b/src/Sidebar_Command.php index b126b117..03a15b73 100644 --- a/src/Sidebar_Command.php +++ b/src/Sidebar_Command.php @@ -84,4 +84,77 @@ public function list_( $args, $assoc_args ) { $formatter = new Formatter( $assoc_args, $this->fields ); $formatter->display_items( $sidebars ); } + + /** + * Get details about a specific sidebar. + * + * ## OPTIONS + * + * + * : The sidebar ID. + * + * [--fields=] + * : Limit the output to specific object fields. + * + * [--format=] + * : Render output in a particular format. + * --- + * default: table + * options: + * - table + * - csv + * - json + * - ids + * - count + * - yaml + * --- + * + * ## EXAMPLES + * + * $ wp sidebar get sidebar-1 + * $ wp sidebar get wp_inactive_widgets --format=json + * + * @when after_wp_load + */ + public function get( $args, $assoc_args ) { + global $wp_registered_sidebars; + + Utils\wp_register_unused_sidebar(); + + $id = $args[0]; + + if ( ! array_key_exists( $id, $wp_registered_sidebars ) ) { + WP_CLI::error( "Sidebar '{$id}' does not exist." ); + } + + $formatter = new Formatter( $assoc_args, $this->fields ); + $formatter->display_item( $wp_registered_sidebars[ $id ] ); + } + + /** + * Check if a sidebar exists. + * + * ## OPTIONS + * + * + * : The sidebar ID. + * + * ## EXAMPLES + * + * $ wp sidebar exists sidebar-1 + * $ wp sidebar exists wp_inactive_widgets && echo "exists" + * + * @when after_wp_load + */ + public function exists( $args ) { + global $wp_registered_sidebars; + + Utils\wp_register_unused_sidebar(); + + if ( array_key_exists( $args[0], $wp_registered_sidebars ) ) { + WP_CLI::halt( 0 ); + } + + WP_CLI::halt( 1 ); + } }