MenuDeleteTest.php

Namespace

Drupal\Tests\menu_ui\Kernel

File

core/modules/menu_ui/tests/src/Kernel/MenuDeleteTest.php

View source
<?php

declare (strict_types=1);
namespace Drupal\Tests\menu_ui\Kernel;

use Drupal\KernelTests\KernelTestBase;
use Drupal\menu_ui\Hook\MenuUiHooks;
use Drupal\node\Entity\NodeType;
use Drupal\system\Entity\Menu;

/**
 * Tests the menu_delete hook.
 *
 * @group menu_ui
 */
class MenuDeleteTest extends KernelTestBase {
  
  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'node',
    'menu_ui',
    'system',
  ];
  
  /**
   * @covers \Drupal\menu_ui\Hook\MenuUiHooks::menuDelete
   * @dataProvider providerMenuDelete
   */
  public function testMenuDelete($settings, $expected) : void {
    $menu = Menu::create([
      'id' => 'mock',
      'label' => $this->randomMachineName(16),
      'description' => 'Description text',
    ]);
    $menu->save();
    $content_type = NodeType::create([
      'status' => TRUE,
      'dependencies' => [
        'module' => [
          'menu_ui',
        ],
      ],
      'third_party_settings' => [
        'menu_ui' => $settings,
      ],
      'name' => 'Test type',
      'type' => 'test_type',
    ]);
    $content_type->save();
    $this->assertEquals($settings['available_menus'], $content_type->getThirdPartySetting('menu_ui', 'available_menus'));
    $this->assertEquals($settings['parent'], $content_type->getThirdPartySetting('menu_ui', 'parent'));
    $hooks = new MenuUiHooks(\Drupal::entityTypeManager());
    $hooks->menuDelete($menu);
    $content_type = NodeType::load('test_type');
    $this->assertEquals($expected['available_menus'], $content_type->getThirdPartySetting('menu_ui', 'available_menus'));
    $this->assertEquals($expected['parent'], $content_type->getThirdPartySetting('menu_ui', 'parent'));
  }
  
  /**
   * Provides data for testMenuDelete().
   */
  public static function providerMenuDelete() : array {
    return [
      [
        [
          'available_menus' => [
            'mock',
          ],
          'parent' => 'mock:',
        ],
        [
          'available_menus' => [],
          'parent' => '',
        ],
      ],
      [
        [
          'available_menus' => [
            'mock',
          ],
          'parent' => 'mock:menu_link_content:e0cd7689-016e-43e4-af8f-7ce82801ab95',
        ],
        [
          'available_menus' => [],
          'parent' => '',
        ],
      ],
      [
        [
          'available_menus' => [
            'main',
            'mock',
          ],
          'parent' => 'mock:',
        ],
        [
          'available_menus' => [
            'main',
          ],
          'parent' => '',
        ],
      ],
      [
        [
          'available_menus' => [
            'main',
          ],
          'parent' => 'main:',
        ],
        [
          'available_menus' => [
            'main',
          ],
          'parent' => 'main:',
        ],
      ],
      [
        [
          'available_menus' => [
            'main',
          ],
          'parent' => 'main:menu_link_content:e0cd7689-016e-43e4-af8f-7ce82801ab95',
        ],
        [
          'available_menus' => [
            'main',
          ],
          'parent' => 'main:menu_link_content:e0cd7689-016e-43e4-af8f-7ce82801ab95',
        ],
      ],
    ];
  }

}

Classes

Title Deprecated Summary
MenuDeleteTest Tests the menu_delete hook.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.