diff --git a/local_moodleappbehat/tests/behat/behat_app.php b/local_moodleappbehat/tests/behat/behat_app.php index e7f0ed2f0..62ba7f6a3 100644 --- a/local_moodleappbehat/tests/behat/behat_app.php +++ b/local_moodleappbehat/tests/behat/behat_app.php @@ -95,6 +95,17 @@ class behat_app extends behat_app_helper { $this->prepare_browser(['skiponboarding' => empty($runtime)]); } + /** + * Restart the app. + * + * @When I restart the app + */ + public function i_restart_the_app() { + $this->getSession()->visit($this->ionicurl); + + $this->i_wait_the_app_to_restart(); + } + /** * @Then I wait the app to restart */ diff --git a/src/core/features/mainmenu/pages/menu/menu.ts b/src/core/features/mainmenu/pages/menu/menu.ts index bf6b92219..d74f4fe3d 100644 --- a/src/core/features/mainmenu/pages/menu/menu.ts +++ b/src/core/features/mainmenu/pages/menu/menu.ts @@ -121,7 +121,7 @@ export class CoreMainMenuPage implements OnInit, OnDestroy { // Remove the handlers that should only appear in the More menu. this.allHandlers = handlers; - this.initHandlers(); + this.updateHandlers(); }); this.badgeUpdateObserver = CoreEvents.on(CoreMainMenuProvider.MAIN_MENU_HANDLER_BADGE_UPDATED, (data) => { @@ -131,7 +131,7 @@ export class CoreMainMenuPage implements OnInit, OnDestroy { }); this.resizeListener = CoreDom.onWindowResize(() => { - this.initHandlers(); + this.updateHandlers(); }); document.addEventListener('ionBackButton', this.backButtonFunction); @@ -140,11 +140,11 @@ export class CoreMainMenuPage implements OnInit, OnDestroy { // Init handlers again once keyboard is closed since the resize event doesn't have the updated height. this.keyboardObserver = CoreEvents.on(CoreEvents.KEYBOARD_CHANGE, (kbHeight: number) => { if (kbHeight === 0) { - this.initHandlers(); + this.updateHandlers(); // If the device is slow it can take a bit more to update the window height. Retry in a few ms. setTimeout(() => { - this.initHandlers(); + this.updateHandlers(); }, 250); } }); @@ -152,9 +152,9 @@ export class CoreMainMenuPage implements OnInit, OnDestroy { } /** - * Init handlers on change (size or handlers). + * Update handlers on change (size or handlers). */ - async initHandlers(): Promise { + async updateHandlers(): Promise { if (!this.allHandlers) { return; } @@ -166,6 +166,7 @@ export class CoreMainMenuPage implements OnInit, OnDestroy { .slice(0, CoreMainMenu.getNumItems()); // Get main handlers. // Re-build the list of tabs. If a handler is already in the list, use existing object to prevent re-creating the tab. + const previousTabs = this.tabs.map(tab => tab.page); const newTabs: CoreMainMenuHandlerToDisplay[] = []; for (let i = 0; i < handlers.length; i++) { @@ -188,9 +189,12 @@ export class CoreMainMenuPage implements OnInit, OnDestroy { this.updateMoreBadge(); + const removedTabs = previousTabs.filter(page => !this.tabs.some(tab => tab.page === page)); + const mainMenuTab = CoreNavigator.getCurrentMainMenuTab(); + this.loaded = CoreMainMenuDelegate.areHandlersLoaded(); - if (this.loaded && !CoreNavigator.getCurrentMainMenuTab()) { + if (this.loaded && (!mainMenuTab || removedTabs.includes(mainMenuTab))) { // No tab selected, select the first one. await CoreUtils.nextTick(); @@ -199,7 +203,7 @@ export class CoreMainMenuPage implements OnInit, OnDestroy { this.logger.debug(`Select first tab: ${tabPage}.`, this.tabs); // Use navigate instead of mainTabs.select to be able to pass page params. - CoreNavigator.navigate(tabPage, { + CoreNavigator.navigateToSitePath(tabPage, { params: { urlToOpen: this.urlToOpen, redirectPath: this.redirectPath, diff --git a/src/core/features/mainmenu/tests/behat/mainmenu.feature b/src/core/features/mainmenu/tests/behat/mainmenu.feature index d69a64651..7f9ace199 100644 --- a/src/core/features/mainmenu/tests/behat/mainmenu.feature +++ b/src/core/features/mainmenu/tests/behat/mainmenu.feature @@ -16,8 +16,8 @@ Feature: Main Menu opens the right page Scenario: Opens Site Home when defaulthomepage is set to Site Given the following config values are set as admin: | defaulthomepage | 0 | - Given I entered the app as "student" - When "Site home" should be selected in the app + And I entered the app as "student" + Then "Site home" should be selected in the app And I should find "Available courses" in the app And "Site home" "text" should appear before "Dashboard" "text" in the ".core-tabs-bar" "css_element" And "Home" "text" should appear before "My courses" "text" in the ".mainmenu-tabs" "css_element" @@ -26,8 +26,8 @@ Feature: Main Menu opens the right page Scenario: Opens Dashboard when defaulthomepage is set to Dashboard Given the following config values are set as admin: | defaulthomepage | 1 | - Given I entered the app as "student" - When "Dashboard" should be selected in the app + And I entered the app as "student" + Then "Dashboard" should be selected in the app And I should find "Timeline" in the app And "Dashboard" "text" should appear before "Site home" "text" in the ".core-tabs-bar" "css_element" And "Home" "text" should appear before "My courses" "text" in the ".mainmenu-tabs" "css_element" @@ -36,7 +36,19 @@ Feature: Main Menu opens the right page Scenario: Opens My Courses when defaulthomepage is set to My Courses Given the following config values are set as admin: | defaulthomepage | 3 | - Given I entered the app as "student" - When "My courses" near "Home" should be selected in the app + And I entered the app as "student" + Then "My courses" near "Home" should be selected in the app And I should find "Course 1" in the app And "My courses" "text" should appear before "Home" "text" in the ".mainmenu-tabs" "css_element" + + @lms_from4.0 + Scenario: Opens first tab after Site Home, Dashboard, and My Courses are disabled + Given I entered the app as "student" + Then "Dashboard" should be selected in the app + + When the following config values are set as admin: + | disabledfeatures | $mmSideMenuDelegate_mmaFrontpage,CoreMainMenuDelegate_CoreCoursesDashboard,$mmSideMenuDelegate_mmCourses | tool_mobile | + And I restart the app + Then I should find "Contacts" in the app + But I should not find "Home" in the app + And I should not find "My courses" in the app