diff options
Diffstat (limited to 'src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/delete_sub_menu_test.cc')
-rw-r--r-- | src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/delete_sub_menu_test.cc | 498 |
1 files changed, 365 insertions, 133 deletions
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/delete_sub_menu_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/delete_sub_menu_test.cc index f5856a8eda..975cba89a1 100644 --- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/delete_sub_menu_test.cc +++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/delete_sub_menu_test.cc @@ -67,6 +67,7 @@ using sdl_rpc_plugin::commands::DeleteSubMenuResponse; typedef std::shared_ptr<DeleteSubMenuRequest> DeleteSubMenuRequestPtr; typedef std::shared_ptr<DeleteSubMenuResponse> DeleteSubMenuResponsePtr; +typedef std::shared_ptr<Event> EventPtr; MATCHER_P(CheckMessageResultCode, result_code, "") { return (*arg)[am::strings::msg_params][am::strings::result_code].asInt() == @@ -89,8 +90,9 @@ namespace { const uint32_t kConnectionKey = 2u; const uint32_t kCorrelationId = 10u; const uint32_t kMenuId = 100u; +const uint32_t kMenuIdChild = 101u; const uint32_t kGrammarId = 101u; -const int32_t kCmdId = 102; +const int32_t kCmdId = 102u; } // namespace class DeleteSubMenuRequestTest @@ -107,6 +109,224 @@ class DeleteSubMenuRequestTest std::make_shared<am_test::MockHelpPromptManager>()) , app_(CreateMockApp()) {} + /** + * @brief Generates submenu smart object with specified params + * @param menu_id id of the menu + * @param parent_id id of parent menu + * @return generated smart object + */ + smart_objects::SmartObjectSPtr GenerateSubMenuMap(const uint32_t menu_id, + const uint32_t parent_id) { + smart_objects::SmartObjectSPtr smartObjectPtr = + std::make_shared<smart_objects::SmartObject>(); + + smart_objects::SmartObject& object = *smartObjectPtr; + + object[am::strings::position] = 1; + object[am::strings::menu_name] = "SubMenu " + std::to_string(menu_id); + object[am::strings::menu_id] = menu_id; + object[am::strings::parent_id] = parent_id; + + return smartObjectPtr; + } + + /** + * @brief Generates UI & VR commands smart object with specified params + * @param cmd_id id of the command + * @param parent_id id of parent command + * @return generated smart object + */ + smart_objects::SmartObjectSPtr GenerateUiVrCommandMapChild( + const uint32_t cmd_id, const uint32_t parent_id) { + smart_objects::SmartObjectSPtr smartObjectPtr = + std::make_shared<smart_objects::SmartObject>(); + + smart_objects::SmartObject& object = *smartObjectPtr; + + object[am::strings::cmd_id] = cmd_id; + object[am::strings::grammar_id] = kGrammarId; + object[am::strings::vr_commands] = "VR commands"; + object[am::strings::type] = hmi_apis::Common_VRCommandType::Command; + object[am::strings::menu_params][am::hmi_request::parent_id] = parent_id; + + return smartObjectPtr; + } + + /** + * @brief Sets up expectations for a successful execution of submenu request + * @param next_function_id function id of the next request + */ + void SetUpSubMenuRequestExpectations( + const hmi_apis::FunctionID::eType next_function_id) { + (*message_)[am::strings::msg_params][am::strings::menu_id] = kMenuId; + (*message_)[am::strings::params][am::strings::connection_key] = + kConnectionKey; + (*message_)[am::strings::params][am::strings::function_id] = + next_function_id; + + smart_objects::SmartObject sub_menu = + (*message_)[am::strings::msg_params][am::strings::menu_id]; + EXPECT_CALL(app_mngr_, application(kConnectionKey)).WillOnce(Return(app_)); + EXPECT_CALL(*app_, FindSubMenu(kMenuId)).WillOnce(Return(sub_menu)); + + ON_CALL(*app_, sub_menu_map()).WillByDefault(Return(sub_menu_accessor_)); + ON_CALL(*app_, commands_map()).WillByDefault(Return(accessor_)); + + EXPECT_CALL(*app_, app_id()).WillRepeatedly(Return(kConnectionKey)); + EXPECT_CALL(app_mngr_, GetNextHMICorrelationID()) + .WillOnce(Return(kCorrelationId)); + + EXPECT_CALL(mock_rpc_service_, + ManageHMICommand(HMIResultCodeIs(next_function_id), _)) + .WillOnce(Return(true)); + } + + /** + * @brief Prepares submenu response event with the specified params + * @param correlation_id correlation id + * @param menu_id id of the menu + * @return pointer to prepared event + */ + EventPtr PrepareSubMenuResponseEvent(const uint32_t correlation_id, + const uint32_t menu_id) { + EventPtr menu_event = + std::make_shared<Event>(hmi_apis::FunctionID::UI_DeleteSubMenu); + (*message_)[am::strings::params][am::hmi_response::code] = + hmi_apis::Common_Result::SUCCESS; + (*message_)[am::strings::msg_params][am::strings::app_id] = kConnectionKey; + (*message_)[am::strings::params][am::strings::correlation_id] = + correlation_id; + (*message_)[am::strings::msg_params][am::strings::menu_id] = menu_id; + menu_event->set_smart_object(*message_); + + return menu_event; + } + + /** + * @brief Sets up expectations for a successful execution of submenu + * subsequent response + * @param event pointer to event representing the response message + * @param next_function_id function id of the next request + */ + void SetUpSubMenuSubsequentResponseExpectations( + EventPtr event, hmi_apis::FunctionID::eType next_function_id) { + const auto& event_so_ref = event->smart_object(); + const auto correlation_id = event->smart_object_correlation_id(); + const auto menu_id = + event_so_ref[am::strings::msg_params][am::strings::menu_id].asUInt(); + + EXPECT_CALL(app_mngr_, application(kConnectionKey)).WillOnce(Return(app_)); + EXPECT_CALL(*app_, RemoveSubMenu(menu_id)); + + EXPECT_CALL(app_mngr_, GetNextHMICorrelationID()) + .WillOnce(Return(correlation_id + 1)); + EXPECT_CALL(mock_rpc_service_, + ManageHMICommand(HMIResultCodeIs(next_function_id), _)) + .WillOnce(Return(true)); + } + + /** + * @brief Prepares VR command response event with the specified params + * @param correlation_id correlation id + * @return pointer to prepared event + */ + EventPtr PrepareVrCommandResponseEvent(const uint32_t correlation_id) { + EventPtr vr_event = + std::make_shared<Event>(hmi_apis::FunctionID::VR_DeleteCommand); + (*message_)[am::strings::msg_params][am::strings::app_id] = kConnectionKey; + (*message_)[am::strings::params][am::hmi_response::code] = + hmi_apis::Common_Result::SUCCESS; + (*message_)[am::strings::params][am::strings::correlation_id] = + correlation_id; + vr_event->set_smart_object(*message_); + + return vr_event; + } + + /** + * @brief Sets up expectations for a successful execution of VR command + * subsequent response + * @param event pointer to event representing the response message + * @param next_function_id function id of the next request + */ + void SetUpVrCommandSubsequentResponseExpectations( + EventPtr event, hmi_apis::FunctionID::eType next_function_id) { + const auto correlation_id = event->smart_object_correlation_id(); + + EXPECT_CALL(app_mngr_, application(kConnectionKey)).WillOnce(Return(app_)); + EXPECT_CALL(app_mngr_, GetNextHMICorrelationID()) + .WillOnce(Return(correlation_id + 1)); + EXPECT_CALL(mock_rpc_service_, + ManageHMICommand(HMIResultCodeIs(next_function_id), _)) + .WillOnce(Return(true)); + } + + /** + * @brief Prepares UI command response event with the specified params + * @param correlation_id correlation id + * @param cmd_id id of the command + * @return pointer to prepared event + */ + EventPtr PrepareUiCommandResponseEvent(const uint32_t correlation_id, + const uint32_t cmd_id) { + EventPtr ui_event = + std::make_shared<Event>(hmi_apis::FunctionID::UI_DeleteCommand); + (*message_)[am::strings::params][am::strings::correlation_id] = + correlation_id; + (*message_)[am::strings::params][am::hmi_response::code] = + hmi_apis::Common_Result::SUCCESS; + (*message_)[am::strings::msg_params][am::strings::app_id] = kConnectionKey; + (*message_)[am::strings::msg_params][am::strings::cmd_id] = cmd_id; + ui_event->set_smart_object(*message_); + + return ui_event; + } + + /** + * @brief Sets up expectations for a successful execution of UI command + * subsequent response + * @param event pointer to event representing the response message + * @param next_function_id function id of the next request + */ + void SetUpUiCommandSubsequentResponseExpectations( + EventPtr event, hmi_apis::FunctionID::eType next_function_id) { + const auto correlation_id = event->smart_object_correlation_id(); + const auto& event_so_ref = event->smart_object(); + const auto cmd_id = + event_so_ref[am::strings::msg_params][am::strings::cmd_id].asUInt(); + + EXPECT_CALL(app_mngr_, application(kConnectionKey)).WillOnce(Return(app_)); + EXPECT_CALL(*app_, RemoveCommand(cmd_id)) + .WillOnce(DeleteCommand(&commands_map_)); + EXPECT_CALL(*app_, help_prompt_manager()) + .WillOnce(ReturnRef(*mock_help_prompt_manager_)); + EXPECT_CALL(*mock_help_prompt_manager_, OnVrCommandDeleted(cmd_id, false)); + + EXPECT_CALL(app_mngr_, GetNextHMICorrelationID()) + .WillOnce(Return(correlation_id + 1)); + EXPECT_CALL(mock_rpc_service_, + ManageHMICommand(HMIResultCodeIs(next_function_id), _)) + .WillOnce(Return(true)); + } + + /** + * @brief Sets up expectations for a successful execution of submenu final + * response + * @param event pointer to event representing the response message + */ + void SetUpSubMenuFinalResponseExpectations(EventPtr event) { + const auto& event_so_ref = event->smart_object(); + const auto menu_id = + event_so_ref[am::strings::msg_params][am::strings::menu_id].asUInt(); + + EXPECT_CALL(app_mngr_, application(kConnectionKey)).WillOnce(Return(app_)); + EXPECT_CALL(*app_, RemoveSubMenu(menu_id)); + EXPECT_CALL( + mock_rpc_service_, + ManageMobileCommand(MobileResultCodeIs(mobile_apis::Result::SUCCESS), + am::commands::Command::SOURCE_SDL)); + } + am::CommandsMap commands_map_; am::SubMenuMap sub_menu_map_; mutable std::shared_ptr<sync_primitives::Lock> commands_lock_; @@ -215,175 +435,187 @@ TEST_F(DeleteSubMenuRequestTest, Run_FindSubMenuFalse_UNSUCCESS) { command_->Run(); } -TEST_F(DeleteSubMenuRequestTest, Run_SendHMIRequest_SUCCESS) { - (*message_)[am::strings::msg_params][am::strings::menu_id] = kMenuId; - (*message_)[am::strings::params][am::strings::connection_key] = - kConnectionKey; - - smart_objects::SmartObject sub_menu = - (*message_)[am::strings::msg_params][am::strings::menu_id]; - EXPECT_CALL(app_mngr_, application(kConnectionKey)).WillOnce(Return(app_)); - EXPECT_CALL(*app_, FindSubMenu(kMenuId)).WillOnce(Return(sub_menu)); - - EXPECT_CALL(*app_, app_id()).WillOnce(Return(kConnectionKey)); - EXPECT_CALL(app_mngr_, GetNextHMICorrelationID()) - .WillOnce(Return(kCorrelationId)); - - EXPECT_CALL(mock_rpc_service_, - ManageHMICommand( - HMIResultCodeIs(hmi_apis::FunctionID::UI_DeleteSubMenu), _)) - .WillOnce(Return(true)); - command_->Run(); -} - TEST_F(DeleteSubMenuRequestTest, OnEvent_UnknownEventId_UNSUCCESS) { Event event(hmi_apis::FunctionID::INVALID_ENUM); - EXPECT_CALL(app_mngr_, application(_)).Times(0); + EXPECT_CALL(mock_rpc_service_, + ManageMobileCommand(_, am::commands::Command::SOURCE_SDL)) + .Times(0); command_->on_event(event); } TEST_F(DeleteSubMenuRequestTest, OnEvent_InvalidApp_UNSUCCESS) { - Event event(hmi_apis::FunctionID::UI_DeleteSubMenu); - (*message_)[am::strings::params][am::hmi_response::code] = - hmi_apis::Common_Result::eType::SUCCESS; - event.set_smart_object(*message_); + auto sub_menu_ptr = GenerateSubMenuMap(kMenuId, 0); + sub_menu_map_.insert(std::pair<uint32_t, smart_objects::SmartObject*>( + kMenuId, sub_menu_ptr.get())); + + SetUpSubMenuRequestExpectations(hmi_apis::FunctionID::UI_DeleteSubMenu); + command_->Run(); + MockAppPtr invalid_app; + EventPtr event = PrepareSubMenuResponseEvent(kCorrelationId, kMenuId); + EXPECT_CALL(app_mngr_, application(_)).WillOnce(Return(invalid_app)); EXPECT_CALL(*app_, RemoveSubMenu(_)).Times(0); - command_->on_event(event); + EXPECT_CALL(mock_rpc_service_, + ManageMobileCommand(_, am::commands::Command::SOURCE_SDL)) + .Times(0); + + command_->on_event(*event); } -TEST_F(DeleteSubMenuRequestTest, OnEvent_DeleteSubmenu_SUCCESS) { - Event event(hmi_apis::FunctionID::UI_DeleteSubMenu); - (*message_)[am::strings::msg_params][am::strings::menu_id] = kMenuId; - (*message_)[am::strings::params][am::strings::connection_key] = - kConnectionKey; - (*message_)[am::strings::msg_params][am::strings::vr_commands] = - "vr_commands"; - (*message_)[am::strings::msg_params][am::strings::cmd_id] = kCmdId; - (*message_)[am::strings::msg_params][am::strings::menu_params] - [am::hmi_request::parent_id] = kMenuId; - const hmi_apis::Common_Result::eType result_code = - hmi_apis::Common_Result::SUCCESS; - (*message_)[am::strings::params][am::hmi_response::code] = result_code; - event.set_smart_object(*message_); +TEST_F(DeleteSubMenuRequestTest, OnEvent_DeleteSubmenuOnly_SUCCESS) { + auto sub_menu_ptr = GenerateSubMenuMap(kMenuId, 0); + sub_menu_map_.insert(std::pair<uint32_t, smart_objects::SmartObject*>( + kMenuId, sub_menu_ptr.get())); - commands_map_.insert( - std::make_pair(0, &((*message_)[am::strings::msg_params]))); + SetUpSubMenuRequestExpectations(hmi_apis::FunctionID::UI_DeleteSubMenu); + command_->Run(); - smart_objects::SmartObjectSPtr smartObjectPtr = - std::make_shared<smart_objects::SmartObject>(); + EventPtr event = PrepareSubMenuResponseEvent(kCorrelationId, kMenuId); + SetUpSubMenuFinalResponseExpectations(event); + command_->on_event(*event); +} - smart_objects::SmartObject& object = *smartObjectPtr; +TEST_F(DeleteSubMenuRequestTest, OnEvent_DeleteSubmenuWithChildMenu_SUCCESS) { + auto sub_menu_ptr = GenerateSubMenuMap(kMenuId, 0); + sub_menu_map_.insert(std::pair<uint32_t, smart_objects::SmartObject*>( + kMenuId, sub_menu_ptr.get())); - object[am::strings::position] = 1; - object[am::strings::menu_name] = "SubMenu"; + auto sub_menu_child_ptr = GenerateSubMenuMap(kMenuIdChild, kMenuId); + sub_menu_map_.insert(std::pair<uint32_t, smart_objects::SmartObject*>( + kMenuIdChild, sub_menu_child_ptr.get())); - sub_menu_map_.insert( - std::pair<uint32_t, smart_objects::SmartObject*>(5, &object)); - EXPECT_CALL(*app_, sub_menu_map()).WillRepeatedly(Return(sub_menu_accessor_)); - EXPECT_CALL(app_mngr_, application(_)).WillRepeatedly(Return(app_)); + SetUpSubMenuRequestExpectations(hmi_apis::FunctionID::UI_DeleteSubMenu); + command_->Run(); - InSequence seq; - EXPECT_CALL(*app_, commands_map()).WillOnce(Return(accessor_)); - EXPECT_CALL(*app_, app_id()).WillOnce(Return(kConnectionKey)); - EXPECT_CALL(*app_, get_grammar_id()).WillOnce(Return(kGrammarId)); + EventPtr event = PrepareSubMenuResponseEvent(kCorrelationId, kMenuIdChild); + SetUpSubMenuSubsequentResponseExpectations( + event, hmi_apis::FunctionID::UI_DeleteSubMenu); + command_->on_event(*event); - EXPECT_CALL(mock_rpc_service_, - ManageHMICommand( - HMIResultCodeIs(hmi_apis::FunctionID::VR_DeleteCommand), _)) - .WillOnce(Return(true)); - - EXPECT_CALL(*app_, commands_map()).WillOnce(Return(accessor_)); - EXPECT_CALL(*app_, app_id()).WillOnce(Return(kConnectionKey)); - EXPECT_CALL(*app_, RemoveCommand(_)).WillOnce(DeleteCommand(&commands_map_)); - EXPECT_CALL(*app_, help_prompt_manager()) - .WillOnce(ReturnRef(*mock_help_prompt_manager_)); - EXPECT_CALL(*mock_help_prompt_manager_, OnVrCommandDeleted(kCmdId, false)); - EXPECT_CALL(mock_rpc_service_, - ManageHMICommand( - HMIResultCodeIs(hmi_apis::FunctionID::UI_DeleteCommand), _)) - .WillOnce(Return(true)); + EventPtr event_final = + PrepareSubMenuResponseEvent(kCorrelationId + 1, kMenuId); + SetUpSubMenuFinalResponseExpectations(event_final); + command_->on_event(*event_final); +} - EXPECT_CALL(*app_, RemoveSubMenu(_)); - EXPECT_CALL( - mock_rpc_service_, - ManageMobileCommand(MobileResultCodeIs(mobile_apis::Result::SUCCESS), - am::commands::Command::SOURCE_SDL)); - EXPECT_CALL(*app_, UpdateHash()); +TEST_F(DeleteSubMenuRequestTest, OnEvent_DeleteSubmenuWithVrAndUi_SUCCESS) { + auto sub_menu_ptr = GenerateSubMenuMap(kMenuId, 0); + sub_menu_map_.insert(std::pair<uint32_t, smart_objects::SmartObject*>( + kMenuId, sub_menu_ptr.get())); - DeleteSubMenuRequestPtr command = - CreateCommand<DeleteSubMenuRequest>(message_); + auto command_ptr = GenerateUiVrCommandMapChild(kCmdId, kMenuId); + commands_map_.insert(std::pair<uint32_t, smart_objects::SmartObject*>( + kCmdId, command_ptr.get())); - command->Init(); - command->on_event(event); -} + SetUpSubMenuRequestExpectations(hmi_apis::FunctionID::VR_DeleteCommand); + command_->Run(); -TEST_F(DeleteSubMenuResponseTest, Run_SUCCESS) { - MessageSharedPtr message(CreateMessage()); - (*message)[am::strings::msg_params][am::strings::connection_key] = - kConnectionKey; - DeleteSubMenuResponsePtr command( - CreateCommand<DeleteSubMenuResponse>(message)); + EventPtr event_vr = PrepareVrCommandResponseEvent(kCorrelationId); + SetUpVrCommandSubsequentResponseExpectations( + event_vr, hmi_apis::FunctionID::UI_DeleteCommand); + command_->on_event(*event_vr); - EXPECT_CALL( - mock_rpc_service_, - SendMessageToMobile(CheckMessageConnectionKey(kConnectionKey), _)); - command->Run(); + EventPtr event_ui = PrepareUiCommandResponseEvent(kCorrelationId + 1, kCmdId); + SetUpUiCommandSubsequentResponseExpectations( + event_ui, hmi_apis::FunctionID::UI_DeleteSubMenu); + command_->on_event(*event_ui); + + EventPtr event_final = + PrepareSubMenuResponseEvent(kCorrelationId + 2, kMenuId); + SetUpSubMenuFinalResponseExpectations(event_final); + command_->on_event(*event_final); } TEST_F(DeleteSubMenuRequestTest, - DeleteSubmenu_CommandhaventVrCommadsAndMenuParams_DontSendHMIRequest) { - Event event(hmi_apis::FunctionID::UI_DeleteSubMenu); - (*message_)[am::strings::msg_params][am::strings::menu_id] = kMenuId; - (*message_)[am::strings::params][am::strings::connection_key] = - kConnectionKey; - (*message_)[am::strings::params][am::hmi_response::code] = - am::mobile_api::Result::SUCCESS; - event.set_smart_object(*message_); + OnEvent_DeleteSubmenuWithChildVrAndUi_SUCCESS) { + auto sub_menu_ptr = GenerateSubMenuMap(kMenuId, 0); + sub_menu_map_.insert(std::pair<uint32_t, smart_objects::SmartObject*>( + kMenuId, sub_menu_ptr.get())); - commands_map_.insert( - std::make_pair(0, &((*message_)[am::strings::msg_params]))); + auto sub_menu_child_ptr = GenerateSubMenuMap(kMenuIdChild, kMenuId); + sub_menu_map_.insert(std::pair<uint32_t, smart_objects::SmartObject*>( + kMenuIdChild, sub_menu_child_ptr.get())); - EXPECT_CALL(app_mngr_, application(_)).WillRepeatedly(Return(app_)); - EXPECT_CALL(*app_, sub_menu_map()).WillRepeatedly(Return(sub_menu_accessor_)); - EXPECT_CALL(mock_rpc_service_, ManageHMICommand(_, _)).Times(0); - EXPECT_CALL(*app_, commands_map()).Times(2).WillRepeatedly(Return(accessor_)); - EXPECT_CALL(*app_, RemoveCommand(_)).Times(0); + auto command_ptr = GenerateUiVrCommandMapChild(kCmdId, kMenuIdChild); + commands_map_.insert(std::pair<uint32_t, smart_objects::SmartObject*>( + kCmdId, command_ptr.get())); - EXPECT_CALL( - mock_rpc_service_, - ManageMobileCommand(MobileResultCodeIs(mobile_apis::Result::SUCCESS), - am::commands::Command::SOURCE_SDL)); - command_->on_event(event); + SetUpSubMenuRequestExpectations(hmi_apis::FunctionID::VR_DeleteCommand); + command_->Run(); + + EventPtr event_vr = PrepareVrCommandResponseEvent(kCorrelationId); + SetUpVrCommandSubsequentResponseExpectations( + event_vr, hmi_apis::FunctionID::UI_DeleteCommand); + command_->on_event(*event_vr); + + EventPtr event_ui = PrepareUiCommandResponseEvent(kCorrelationId + 1, kCmdId); + SetUpUiCommandSubsequentResponseExpectations( + event_ui, hmi_apis::FunctionID::UI_DeleteSubMenu); + command_->on_event(*event_ui); + + EventPtr event_submenu = + PrepareSubMenuResponseEvent(kCorrelationId + 2, kMenuIdChild); + SetUpSubMenuSubsequentResponseExpectations( + event_submenu, hmi_apis::FunctionID::UI_DeleteSubMenu); + command_->on_event(*event_submenu); + + EventPtr event_final = + PrepareSubMenuResponseEvent(kCorrelationId + 3, kMenuId); + SetUpSubMenuFinalResponseExpectations(event_final); + command_->on_event(*event_final); } TEST_F(DeleteSubMenuRequestTest, - DeleteSubmenu_NotAChildOfMenupartam_DontSendHMIRequest) { - Event event(hmi_apis::FunctionID::UI_DeleteSubMenu); - (*message_)[am::strings::msg_params][am::strings::menu_id] = kMenuId; - (*message_)[am::strings::msg_params][am::strings::menu_params] - [am::hmi_request::parent_id] = kMenuId + 1; - (*message_)[am::strings::params][am::strings::connection_key] = - kConnectionKey; - (*message_)[am::strings::params][am::hmi_response::code] = - am::mobile_api::Result::SUCCESS; - event.set_smart_object(*message_); + OnEvent_DeleteSubmenuVrAndUiWithChild_SUCCESS) { + auto sub_menu_ptr = GenerateSubMenuMap(kMenuId, 0); + sub_menu_map_.insert(std::pair<uint32_t, smart_objects::SmartObject*>( + kMenuId, sub_menu_ptr.get())); - commands_map_.insert( - std::make_pair(0, &((*message_)[am::strings::msg_params]))); + auto command_ptr = GenerateUiVrCommandMapChild(kCmdId, kMenuId); + commands_map_.insert(std::pair<uint32_t, smart_objects::SmartObject*>( + kCmdId, command_ptr.get())); - EXPECT_CALL(app_mngr_, application(_)).WillRepeatedly(Return(app_)); - EXPECT_CALL(*app_, sub_menu_map()).WillRepeatedly(Return(sub_menu_accessor_)); - EXPECT_CALL(mock_rpc_service_, ManageHMICommand(_, _)).Times(0); - EXPECT_CALL(*app_, commands_map()).Times(2).WillRepeatedly(Return(accessor_)); - EXPECT_CALL(*app_, RemoveCommand(_)).Times(0); + auto sub_menu_child_ptr = GenerateSubMenuMap(kMenuIdChild, kMenuId); + sub_menu_map_.insert(std::pair<uint32_t, smart_objects::SmartObject*>( + kMenuIdChild, sub_menu_child_ptr.get())); + + SetUpSubMenuRequestExpectations(hmi_apis::FunctionID::UI_DeleteSubMenu); + command_->Run(); + + EventPtr event_submenu = + PrepareSubMenuResponseEvent(kCorrelationId, kMenuIdChild); + SetUpSubMenuSubsequentResponseExpectations( + event_submenu, hmi_apis::FunctionID::VR_DeleteCommand); + command_->on_event(*event_submenu); + + EventPtr event_vr = PrepareVrCommandResponseEvent(kCorrelationId + 1); + SetUpVrCommandSubsequentResponseExpectations( + event_vr, hmi_apis::FunctionID::UI_DeleteCommand); + command_->on_event(*event_vr); + + EventPtr event_ui = PrepareUiCommandResponseEvent(kCorrelationId + 2, kCmdId); + SetUpUiCommandSubsequentResponseExpectations( + event_ui, hmi_apis::FunctionID::UI_DeleteSubMenu); + command_->on_event(*event_ui); + + EventPtr event_final = + PrepareSubMenuResponseEvent(kCorrelationId + 3, kMenuId); + SetUpSubMenuFinalResponseExpectations(event_final); + command_->on_event(*event_final); +} + +TEST_F(DeleteSubMenuResponseTest, Run_SUCCESS) { + MessageSharedPtr message(CreateMessage()); + (*message)[am::strings::msg_params][am::strings::connection_key] = + kConnectionKey; + DeleteSubMenuResponsePtr command( + CreateCommand<DeleteSubMenuResponse>(message)); EXPECT_CALL( mock_rpc_service_, - ManageMobileCommand(MobileResultCodeIs(mobile_apis::Result::SUCCESS), - am::commands::Command::SOURCE_SDL)); - command_->on_event(event); + SendMessageToMobile(CheckMessageConnectionKey(kConnectionKey), _)); + command->Run(); } } // namespace delete_sub_menu_request |