View source
<?php
namespace Drupal\Tests\group_content_menu\Functional;
use Drupal\Core\Url;
use Drupal\group\Entity\GroupType;
use Drupal\Tests\group\Functional\GroupBrowserTestBase;
class GroupContentMenuTest extends GroupBrowserTestBase {
public static $modules = [
'block',
'group_content_menu',
'gnode',
'menu_ui',
'node',
];
protected function setUp() : void {
parent::setUp();
$role = GroupType::load('default')
->getMemberRole();
$role
->grantPermissions([
'access group content menu overview',
'create group_content_menu:group_menu content',
'manage group_content_menu',
]);
$role
->save();
$type = $this
->drupalCreateContentType([
'type' => 'page',
'name' => 'Basic page',
'display_submitted' => FALSE,
]);
$type
->setThirdPartySetting('menu_ui', 'available_menus', [
'main',
]);
$type
->save();
$type = $this
->drupalCreateContentType([
'type' => 'article',
'name' => 'Article',
'display_submitted' => FALSE,
]);
$type
->setThirdPartySetting('menu_ui', 'available_menus', []);
$type
->save();
}
public function testNodeGroupContentMenu() {
$assert = $this
->assertSession();
$page = $this
->getSession()
->getPage();
$this
->drupalGet('/group/add/default');
$page
->fillField('label[0][value]', 'Group page');
$page
->pressButton('Create Default label and complete your membership');
$page
->pressButton('Save group and membership');
$assert
->statusCodeEquals(200);
$assert
->pageTextContains('Default label Group page has been created.');
$this
->drupalGet('/group/1/menus');
$assert
->statusCodeEquals(200);
$assert
->pageTextContains('There are no group content menu entities yet.');
$this
->drupalGet('admin/structure/group_content_menu_types');
$page
->clickLink('Add group menu type');
$assert
->statusCodeEquals(200);
$page
->fillField('label', 'Group Menu');
$page
->fillField('id', 'group_menu');
$page
->pressButton('Save');
$assert
->statusCodeEquals(200);
$assert
->pageTextContains('The group menu type Group Menu has been added.');
$this
->drupalGet('/admin/group/content/install/default/group_node:page');
$page
->pressButton('Install plugin');
$assert
->pageTextContains('The content plugin was installed on the group type.');
$this
->drupalGet('/admin/group/content/install/default/group_node:article');
$page
->pressButton('Install plugin');
$assert
->pageTextContains('The content plugin was installed on the group type.');
$this
->drupalGet('/admin/group/content/install/default/group_content_menu:group_menu');
$page
->pressButton('Install plugin');
$assert
->pageTextContains('The content plugin was installed on the group type.');
$this
->drupalGet('/group/1/content/create/group_node:page');
$assert
->pageTextContains('Menu settings');
$assert
->pageTextContains('Parent item');
$page
->fillField('title[0][value]', 'Group node');
$page
->pressButton('Save');
$this
->drupalGet('/node/1/edit');
$assert
->statusCodeEquals(200);
$this
->drupalGet('/group/1/content/create/group_node:article');
$assert
->pageTextNotContains('Menu settings');
$this
->drupalGet('/group/1/menu/add');
$menu_label = $this
->randomString();
$page
->fillField('label[0][value]', $menu_label);
$page
->pressButton('Save');
$this
->drupalGet('/group/1/content');
$assert
->pageTextContainsOnce($menu_label);
$this
->drupalGet('/group/1/content/create/group_node:page');
$assert
->pageTextContains('Menu settings');
$assert
->pageTextContains('Parent item');
$assert
->optionExists('menu[menu_parent]', $menu_label);
$page
->fillField('title[0][value]', 'Group node');
$page
->pressButton('Save');
$this
->drupalGet('/node/2/edit');
$assert
->statusCodeEquals(200);
$this
->drupalGet('/group/1/content/create/group_node:article');
$assert
->pageTextContains('Menu settings');
$assert
->pageTextContains('Parent item');
}
public function testCreateGroupContentMenu() {
$assert = $this
->assertSession();
$page = $this
->getSession()
->getPage();
$this
->drupalGet('admin/structure/group_content_menu_types');
$page
->clickLink('Add group menu type');
$assert
->statusCodeEquals(200);
$page
->fillField('label', 'Group Menu');
$page
->fillField('id', 'group_menu');
$page
->pressButton('Save');
$assert
->statusCodeEquals(200);
$assert
->pageTextContains('The group menu type Group Menu has been added.');
$default_theme = $this
->config('system.theme')
->get('default');
$options = [
'query' => [
'region' => 'sidebar_first',
'weight' => 0,
],
];
$this
->drupalGet(Url::fromRoute('block.admin_library', [
'theme' => $default_theme,
], $options));
$block_name = 'group_content_menu:group_menu';
$add_url = Url::fromRoute('block.admin_add', [
'plugin_id' => $block_name,
'theme' => $default_theme,
]);
$links = $this
->xpath('//a[contains(@href, :href)]', [
':href' => $add_url
->toString(),
]);
$this
->assertCount(1, $links, 'Found one matching link.');
$links[0]
->click();
$assert
->statusCodeEquals(200);
$page
->fillField('settings[context_mapping][group]', '@group.group_route_context:group');
$page
->pressButton('Save block');
$assert
->statusCodeEquals(200);
$this
->drupalGet('/admin/group/content/install/default/group_content_menu:group_menu');
$page
->checkField('auto_create_group_menu');
$page
->checkField('auto_create_home_link');
$page
->fillField('auto_create_home_link_title', 'Group home page');
$page
->pressButton('Install plugin');
$assert
->pageTextContains('The content plugin was installed on the group type. ');
$this
->drupalGet('/group/add/default');
$group_title = $this
->randomString();
$page
->fillField('label[0][value]', $group_title);
$page
->pressButton('Create Default label and complete your membership');
$page
->pressButton('Save group and membership');
$assert
->linkExists('Group home page');
$this
->drupalGet('/group/1/menu/1/link/1');
$assert
->statusCodeEquals(200);
$page
->pressButton('Save');
$assert
->pageTextContains('The menu link has been saved.');
$this
->drupalGet('/group/1/menu/1/edit');
$assert
->statusCodeEquals(200);
$this
->drupalGet('/group/1/menu/1/add-link');
$assert
->statusCodeEquals(200);
$link_title = $this
->randomString();
$page
->fillField('title[0][value]', $link_title);
$page
->fillField('link[0][uri]', '<front>');
$page
->pressButton('Save');
$this
->drupalGet('/group/1/menu/1/link/2');
$page
->selectFieldOption('menu_parent', '-- Group home page');
$page
->pressButton('Save');
$assert
->pageTextContains('The menu link has been saved. ');
$this
->drupalGet('/group/1');
$assert
->linkExists($link_title);
$this
->drupalGet('/group/1/menu/1/edit');
$assert
->statusCodeEquals(200);
$this
->drupalGet('/group/1/menu/1/delete');
$page
->pressButton('Delete');
$assert
->pageTextContains('The group content menu Group Menu has been deleted.');
$this
->drupalGet('/group/1/content/create/group_content_menu:group_menu');
$menu_title = $this
->randomString();
$page
->fillField('label[0][value]', $menu_title);
$page
->pressButton('Save');
$assert
->pageTextContains("New group menu {$menu_title} has been created. ");
}
public function testAddMenuManually() {
$assert = $this
->assertSession();
$page = $this
->getSession()
->getPage();
$this
->drupalGet('admin/structure/group_content_menu_types');
$page
->clickLink('Add group menu type');
$assert
->statusCodeEquals(200);
$page
->fillField('label', 'Group Menu');
$page
->fillField('id', 'group_menu');
$page
->pressButton('Save');
$assert
->statusCodeEquals(200);
$assert
->pageTextContains('The group menu type Group Menu has been added.');
$this
->drupalGet('/admin/group/content/install/default/group_content_menu:group_menu');
$page
->pressButton('Install plugin');
$assert
->pageTextContains('The content plugin was installed on the group type. ');
$this
->drupalGet('/group/add/default');
$group_title = $this
->randomString();
$page
->fillField('label[0][value]', $group_title);
$page
->pressButton('Create Default label and complete your membership');
$page
->pressButton('Save group and membership');
$this
->drupalGet('/group/1/menu/add');
$menu_label = $this
->randomString();
$page
->fillField('label[0][value]', $menu_label);
$page
->pressButton('Save');
$this
->drupalGet('/group/1/content');
$assert
->pageTextContainsOnce($menu_label);
}
public function testMultipleMenus() {
$assert = $this
->assertSession();
$page = $this
->getSession()
->getPage();
$this
->drupalGet('admin/structure/group_content_menu_types/add');
$page
->fillField('label', 'Group Menu One');
$page
->fillField('id', 'group_menu_one');
$page
->pressButton('Save');
$assert
->statusCodeEquals(200);
$assert
->pageTextContains('The group menu type Group Menu One has been added.');
$this
->drupalGet('admin/structure/group_content_menu_types/add');
$page
->fillField('label', 'Group Menu Two');
$page
->fillField('id', 'group_menu_two');
$page
->pressButton('Save');
$assert
->statusCodeEquals(200);
$assert
->pageTextContains('The group menu type Group Menu Two has been added.');
$this
->drupalGet('/admin/group/content/install/default/group_content_menu:group_menu_one');
$page
->pressButton('Install plugin');
$assert
->pageTextContains('The content plugin was installed on the group type. ');
$this
->drupalGet('/admin/group/content/install/default/group_content_menu:group_menu_two');
$page
->pressButton('Install plugin');
$assert
->pageTextContains('The content plugin was installed on the group type.');
$this
->drupalGet('/group/add/default');
$group_title = $this
->randomString();
$page
->fillField('label[0][value]', $group_title);
$page
->pressButton('Create Default label and complete your membership');
$page
->pressButton('Save group and membership');
$assert
->statusCodeEquals(200);
$this
->drupalGet('group/1/menu/add');
$page
->clickLink('Group menu (Group Menu Two)');
$assert
->statusCodeEquals(200);
$menu_title = $this
->randomString();
$page
->fillField('label[0][value]', $menu_title);
$page
->pressButton('Save');
$assert
->pageTextContains("New group menu {$menu_title} has been created.");
}
public function testExpandAllItems() {
$assert = $this
->assertSession();
$page = $this
->getSession()
->getPage();
$this
->drupalGet('admin/structure/group_content_menu_types');
$page
->clickLink('Add group menu type');
$assert
->statusCodeEquals(200);
$page
->fillField('label', 'Group Menu');
$page
->fillField('id', 'group_menu');
$page
->pressButton('Save');
$assert
->statusCodeEquals(200);
$assert
->pageTextContains('The group menu type Group Menu has been added.');
$default_theme = $this
->config('system.theme')
->get('default');
$group_menu_block = $this
->drupalPlaceBlock('group_content_menu:group_menu', [
'id' => $default_theme . '_groupmenu',
'context_mapping' => [
'group' => '@group.group_route_context:group',
],
]);
$group_menu_block_id = $group_menu_block
->id();
$this
->drupalGet('/admin/group/content/install/default/group_content_menu:group_menu');
$page
->checkField('auto_create_group_menu');
$page
->checkField('auto_create_home_link');
$page
->fillField('auto_create_home_link_title', 'Group home page');
$page
->pressButton('Install plugin');
$assert
->pageTextContains('The content plugin was installed on the group type. ');
$this
->drupalGet('/group/add/default');
$group_title = $this
->randomString();
$page
->fillField('label[0][value]', $group_title);
$page
->pressButton('Create Default label and complete your membership');
$page
->pressButton('Save group and membership');
$assert
->linkExists('Group home page');
$this
->drupalGet('/group/1/menu/1/add-link');
$assert
->statusCodeEquals(200);
$link_top_level = $this
->randomString(8);
$page
->fillField('title[0][value]', $link_top_level);
$page
->fillField('link[0][uri]', 'http://example.com');
$page
->pressButton('Save');
$this
->drupalGet('/group/1/menu/1/add-link');
$assert
->statusCodeEquals(200);
$link_sub_level = $this
->randomString(8);
$page
->fillField('title[0][value]', $link_sub_level);
$page
->fillField('link[0][uri]', 'http://example1.com');
$page
->selectFieldOption('menu_parent', '-- ' . $link_top_level);
$page
->pressButton('Save');
$this
->drupalGet('/group/1');
$assert
->linkNotExists($link_sub_level);
$this
->drupalGet('admin/structure/block/manage/' . $group_menu_block_id);
$assert
->checkboxNotChecked('settings[expand_all_items]');
$this
->submitForm([
'settings[level]' => 1,
'settings[depth]' => 0,
'settings[expand_all_items]' => 1,
], 'Save block');
$this
->drupalGet('/group/1');
$assert
->linkExists($link_top_level);
$assert
->linkExists($link_sub_level);
}
protected function getGlobalPermissions() {
return [
'administer blocks',
'administer group content menu types',
'administer group',
'administer menu',
'bypass group access',
] + parent::getGlobalPermissions();
}
}