From 87dc91cf40ce2464b459d3da8ed4df20ed7a07eb Mon Sep 17 00:00:00 2001 From: Daniel Bachhuber Date: Sun, 20 Nov 2016 06:29:38 -0800 Subject: [PATCH] Use return code 1 when one or more menus fails to delete --- features/menu.feature | 33 +++++++++++++++++++++++++++++++-- php/commands/menu.php | 31 ++++++++++++++++--------------- 2 files changed, 47 insertions(+), 17 deletions(-) diff --git a/features/menu.feature b/features/menu.feature index 839bd4d089..c830aafb29 100644 --- a/features/menu.feature +++ b/features/menu.feature @@ -14,9 +14,12 @@ Feature: Manage WordPress menus When I run `wp menu delete "My Menu"` Then STDOUT should be: """ + Deleted menu 'My Menu'. Success: 1 menu deleted. """ - And I run `wp menu list --format=count` + And the return code should be 0 + + When I run `wp menu list --format=count` Then STDOUT should be: """ 0 @@ -33,9 +36,13 @@ Feature: Manage WordPress menus When I run `wp menu delete "First Menu" "Second Menu"` Then STDOUT should be: """ + Deleted menu 'First Menu'. + Deleted menu 'Second Menu'. Success: 2 menus deleted. """ - And I run `wp menu list --format=count` + And the return code should be 0 + + When I run `wp menu list --format=count` Then STDOUT should be: """ 0 @@ -47,3 +54,25 @@ Feature: Manage WordPress menus """ 5 """ + + Scenario: Errors when deleting menus + When I try `wp menu delete "Your menu"` + Then STDERR should be: + """ + Warning: Couldn't delete menu 'Your menu'. + Error: No menus deleted. + """ + + When I run `wp menu create "My Menu"` + And I run `wp menu list --fields=name,slug` + Then STDOUT should be a table containing rows: + | name | slug | + | My Menu | my-menu | + + When I try `wp menu delete "My Menu" "Your menu"` + Then STDERR should be: + """ + Warning: Couldn't delete menu 'Your menu'. + Error: Only 1 of 2 menus deleted. + """ + And the return code should be 1 diff --git a/php/commands/menu.php b/php/commands/menu.php index 671bde8dda..3867cb9857 100644 --- a/php/commands/menu.php +++ b/php/commands/menu.php @@ -89,28 +89,29 @@ public function create( $args, $assoc_args ) { */ public function delete( $args, $_ ) { - $count = 0; - + $count = $errored = 0; foreach( $args as $arg ) { - $ret = wp_delete_nav_menu( $arg ); - if ( ! $ret || is_wp_error( $ret ) ) { - - WP_CLI::warning( "Error deleting menu." ); - - } - else { - + WP_CLI::warning( "Couldn't delete menu '{$arg}'." ); + $errored++; + } else { + WP_CLI::log( "Deleted menu '{$arg}'." ); $count++; - } - } - $success_message = ( 1 === $count ) ? '%d menu deleted.' : '%d menus deleted.'; - WP_CLI::success( sprintf( $success_message, $count ) ); - + if ( $errored ) { + $arg_count = count( $args ); + if ( $count ) { + WP_CLI::error( sprintf( 'Only %d of %d menus deleted.', $count, $arg_count ) ); + } else { + WP_CLI::error( 'No menus deleted.' ); + } + } else { + $success_message = ( 1 === $count ) ? '%d menu deleted.' : '%d menus deleted.'; + WP_CLI::success( sprintf( $success_message, $count ) ); + } } /**