justReturn([ (object) ['term_id' => 3, 'name' => 'Hauptmenü', 'slug' => 'hauptmenue', 'count' => 4], ]); Functions\when('get_registered_nav_menus')->justReturn( ['primary-menu' => 'Hauptmenü', 'footer-menu' => 'Footer'] ); Functions\when('get_nav_menu_locations')->justReturn(['primary-menu' => 3]); $result = (new MenuListAbility())->execute([]); self::assertSame(['primary-menu'], $result['menus'][0]['locations']); self::assertSame( [ ['location' => 'primary-menu', 'description' => 'Hauptmenü', 'menu_id' => 3], ['location' => 'footer-menu', 'description' => 'Footer', 'menu_id' => null], ], $result['locations'] ); } public function testGetReturnsTheTreeOrNotFound(): void { Functions\when('wp_get_nav_menu_object')->alias( static fn (int $id) => $id === 3 ? (object) ['term_id' => 3, 'name' => 'Hauptmenü'] : false ); Functions\when('wp_get_nav_menu_items')->justReturn([self::item(10, 0, 'Start')]); Functions\when('get_nav_menu_locations')->justReturn([]); $ability = new MenuGetAbility(); $result = $ability->execute(['menu_id' => 3]); self::assertSame('Hauptmenü', $result['name']); self::assertSame('Start', $result['items'][0]['title']); self::assertSame(Rev::ofMenu([self::item(10, 0, 'Start')]), $result['menu_rev']); self::assertContains('menu_rev', $ability->outputSchema()['required']); self::assertSame('lit_not_found', $ability->execute(['menu_id' => 9])->get_error_code()); } public function testReadToolsNeedThemeOptionRights(): void { Functions\when('current_user_can')->justReturn(false); self::assertSame('lit_forbidden', (new MenuListAbility())->permission([])->get_error_code()); self::assertSame('lit_forbidden', (new MenuGetAbility())->permission(['menu_id' => 3])->get_error_code()); } }