entity_hierarchy-8.x-2.24/modules/entity_hierarchy_microsite/tests/src/Functional/MicrositeAdminTest.php

modules/entity_hierarchy_microsite/tests/src/Functional/MicrositeAdminTest.php
<?php

namespace Drupal\Tests\entity_hierarchy_microsite\Functional;

use Drupal\Core\Url;

/**
 * Defines a class for testing microsite admin.
 *
 * @group entity_hierarchy_microsite
 */
class MicrositeAdminTest extends MicrositeFunctionalTestBase {

  /**
   * Tests admin.
   */
  public function testAdmin(): void {
    $assert = $this->assertSession();

    // Access check for non-admins.
    $listing = Url::fromRoute('entity.entity_hierarchy_microsite.collection');
    $this->drupalGet($listing);
    $assert->statusCodeEquals(403);

    // Test admin can create a microsite.
    $this->drupalLogin($this->createUser(array_keys(\Drupal::service('user.permissions')->getPermissions())));
    $this->drupalGet('admin/structure');
    $assert->linkExists('Microsites');
    $this->drupalGet($listing);
    $assert->statusCodeEquals(200);
    $assert->pageTextContains('There are no microsites yet.');
    $assert->linkExists('Add Microsite');
    $this->clickLink('Add Microsite');
    $assert->fieldExists('Name');
    $assert->fieldExists('Home page');
    $assert->fieldExists('logo[0][target_id]');
    $assert->elementExists('css', 'legend:contains("Logo")');
    $root = $this->createTestEntity(NULL, 'Root');
    $children = $this->createChildEntities($root->id(), 2);
    $child = reset($children);
    $grandchildren = $this->createChildEntities($child->id(), 1);
    $grandchild = reset($grandchildren);
    $logo = $this->createImageMedia();
    $entity_reference_format = '%s (%s)';
    $label = $this->randomMachineName();
    $this->submitForm([
      'name[0][value]' => $label,
      'generate_menu[value]' => TRUE,
      'home[0][target_id]' => sprintf($entity_reference_format, $root->label(), $root->id()),
      'logo[0][target_id]' => sprintf($entity_reference_format, $logo->label(), $logo->id()),
    ], 'Save');
    $assert->pageTextContains(sprintf('Created the %s Microsite', $label));

    // Test that admin can edit the microsite.
    $this->assertStringContainsString($listing->toString(), $this->getSession()->getCurrentUrl());
    $this->clickLink('Edit');
    $assert->fieldValueEquals('Name', $label);
    $assert->fieldValueEquals('Home page', sprintf($entity_reference_format, $root->label(), $root->id()));
    $assert->fieldValueEquals('logo[0][target_id]', sprintf($entity_reference_format, $logo->label(), $logo->id()));
    $label = $this->randomMachineName();
    $this->submitForm([
      'name[0][value]' => $label,
    ], 'Save');
    $assert->pageTextContains(sprintf('Saved the %s Microsite', $label));
    $this->assertStringContainsString($listing->toString(), $this->getSession()->getCurrentUrl());

    // Test menu link admin.
    $menuAdmin = Url::fromRoute('entity.menu.edit_form', ['menu' => 'entity-hierarchy-microsite']);
    $this->drupalGet($menuAdmin);
    foreach (array_merge($grandchildren, $children, [$root]) as $entity) {
      $assert->linkByHrefExists($entity->toUrl()->toString());
      $assert->linkExists($entity->label());
    }

    // Test overriding a title.
    $overrideStorage = \Drupal::entityTypeManager()->getStorage('eh_microsite_menu_override');
    $this->drupalGet($menuAdmin);
    $other_child = end($children);
    $row = $assert->elementExists('css', 'tr:contains("' . $other_child->label() . '")');
    $edit = $row->find('named', ['link', 'Edit']);
    $edit->click();
    $newOverrideUrl = new Url('entity.eh_microsite_menu_override.add', ['target' => $other_child->uuid()]);
    $this->assertStringContainsString($newOverrideUrl->toString(), $this->getSession()->getCurrentUrl());
    $assert->fieldValueEquals('Parent link', 'entity-hierarchy-microsite:entity_hierarchy_microsite:' . $root->uuid());
    $newTitle = $this->randomMachineName();
    $this->submitForm([
      'title[0][value]' => $newTitle,
      'menu_parent' => 'entity-hierarchy-microsite:entity_hierarchy_microsite:' . $child->uuid(),
    ], 'Save');
    $overrides = $overrideStorage->loadByProperties([
      'target' => $other_child->uuid(),
    ]);
    $row = $assert->elementExists('css', 'tr:contains("' . $newTitle . '")');
    $this->assertCount(1, $overrides);
    $override = reset($overrides);
    $this->assertTrue($override->isEnabled());
    $this->assertTrue($override->isExpanded());
    $this->assertEquals($newTitle, $override->label());
    $this->assertEquals('entity_hierarchy_microsite:' . $child->uuid(), $override->getParent());
    $this->assertEquals($other_child->uuid(), $override->getTarget());

    // Test disabling via admin form.
    $this->submitForm([
      sprintf('links[menu_plugin_id:entity_hierarchy_microsite:%s][enabled]', $grandchild->uuid()) => FALSE,
    ], 'Save');
    $listOverrides = $overrideStorage->loadByProperties([
      'target' => $grandchild->uuid(),
    ]);
    $this->assertCount(1, $overrides);
    /** @var \Drupal\entity_hierarchy_microsite\Entity\MicrositeMenuItemOverrideInterface $override */
    $listOverride = reset($listOverrides);
    $this->assertFalse($listOverride->isEnabled());
    $this->assertTrue($listOverride->isExpanded());
    $this->assertEquals($grandchild->label(), $listOverride->label());
    $this->assertEquals('entity_hierarchy_microsite:' . $child->uuid(), $listOverride->getParent());
    $this->assertEquals($grandchild->uuid(), $listOverride->getTarget());

    // Test edit button now goes to edit page and editing is possible.
    $edit = $assert->elementExists('named', ['link', 'Edit'], $row);
    $edit->click();
    $this->assertStringContainsString($override->toUrl('edit-form')->toString(), $this->getSession()->getCurrentUrl());
    $assert->fieldValueEquals('Parent link', 'entity-hierarchy-microsite:entity_hierarchy_microsite:' . $child->uuid());
    $anotherTitle = $this->randomMachineName();
    $this->submitForm([
      'title[0][value]' => $anotherTitle,
      'menu_parent' => 'entity-hierarchy-microsite:entity_hierarchy_microsite:' . $child->uuid(),
    ], 'Save');
    $overrides = $overrideStorage->loadByProperties([
      'target' => $other_child->uuid(),
    ]);
    $this->assertCount(1, $overrides);
    $row = $assert->elementExists('css', 'tr:contains("' . $anotherTitle . '")');

    // Cannot create a duplicate.
    $this->drupalGet($newOverrideUrl);
    $assert->statusCodeEquals(404);

    // Go back to the menu edit page.
    $this->drupalGet($menuAdmin);
    $revert = $assert->elementExists('named', ['link', 'Remove override'], $row);
    $revert->click();
    $this->assertStringContainsString($override->toUrl('delete-form')->toString(), $this->getSession()->getCurrentUrl());
    $assert->pageTextContains(sprintf('Are you sure you want to delete the microsite menu override %s', $anotherTitle));
    $this->submitForm([], 'Delete');
    $overrides = $overrideStorage->loadByProperties([
      'target' => $other_child->uuid(),
    ]);
    $this->assertCount(0, $overrides);
    $row = $assert->elementExists('css', 'tr:contains("' . $other_child->label() . '")');
    $assert->elementNotExists('css', 'tr:contains("' . $anotherTitle . '")');
    $assert->elementExists('named', ['link', 'Edit'], $row);
    $assert->elementNotExists('named', ['link', 'Remove override'], $row);

    // Non admins cannot access the url to create new overrides.
    $this->drupalLogout();
    $newOverrideUrl = new Url('entity.eh_microsite_menu_override.add', ['target' => $child->uuid()]);
    $this->drupalGet($newOverrideUrl);
    $assert->statusCodeEquals(403);
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc