og_sm-8.x-1.0/tests/src/Kernel/SiteApiTest.php

tests/src/Kernel/SiteApiTest.php
<?php

namespace Drupal\Tests\og_sm\Kernel;

use Drupal\Core\Url;
use Drupal\og\Entity\OgRole;
use Drupal\og\Og;
use Drupal\og_sm\OgSm;

/**
 * Tests about the node type settings.
 *
 * @group og_sm
 */
class SiteApiTest extends OgSmKernelTestBase {

  /**
   * {@inheritdoc}
   */
  public function setUp() {
    parent::setUp();
    $this->installEntitySchema('og_membership');
  }

  /**
   * Test Site helpers.
   */
  public function testSite() {
    $type_group = $this->createGroupNodeType(self::TYPE_IS_GROUP);
    $type_not_group = $this->createNodeType(self::TYPE_DEFAULT);
    $node = $this->createNode(['type' => $type_not_group->id()]);
    $group = $this->createGroup($type_group->id());

    $site_type_manager = OgSm::siteTypeManager();
    $site_manager = OgSm::siteManager();

    // Test og_sm_is_site.
    $this->assertFalse($site_manager->isSite($node));
    $this->assertFalse($site_manager->isSite($group));
    $site_type_manager->setIsSiteType($type_group, TRUE);
    $type_group->save();
    $this->assertTrue($site_manager->isSite($group));

    // Test og_sm_site_load.
    $site = $site_manager->load($group->id());
    $this->assertEquals($group->label(), $site->label());
    $site_type_manager->setIsSiteType($type_group, FALSE);
    $type_group->save();
    $this->assertFalse($site_manager->load($group->id()));

    // Test og_sm_site_load with non-existing node id.
    $this->assertFalse($site_manager->load(9877654321));

    // Test getting all site Nodes ID's.
    $group2 = $this->createGroup($type_group->id());
    $group3 = $this->createGroup($type_group->id());
    $this->assertEquals([], $site_manager->getAllSites());
    $site_type_manager->setIsSiteType($type_group, TRUE);
    $type_group->save();
    $expected = [
      $group->id(),
      $group2->id(),
      $group3->id(),
    ];
    $this->assertEquals($expected, array_keys($site_manager->getAllSites()));
  }

  /**
   * Test filtering an array of groups by only sites.
   */
  public function testFilterSitesFromGroups() {
    $type_is_group = $this->createGroupNodeType(self::TYPE_IS_GROUP);
    $type_not_group = $this->createNodeType(self::TYPE_DEFAULT);
    OgSm::siteTypeManager()->setIsSiteType($type_is_group, TRUE);
    $type_is_group->save();

    $group1 = $this->createGroup($type_is_group->id());
    $group2 = $this->createGroup($type_is_group->id());
    $group3 = $this->createGroup($type_not_group->id());
    $groups = ['node' => [$group3, $group2, $group1]];

    $expected = [$group2->id() => $group2, $group1->id() => $group1];
    $sites = OgSm::siteManager()->filterSitesFromGroups($groups);
    $this->assertEquals($expected, $sites);
  }

  /**
   * Test Site access callbacks.
   */
  public function testSiteAccessCallbacks() {
    $site_type = $this->createGroupNodeType(self::TYPE_IS_GROUP);
    $administer_site_permission = 'administer site';
    OgSm::siteTypeManager()->setIsSiteType($site_type, TRUE);
    $site_type->save();

    // Create the Site.
    $site = $this->createGroup($site_type->id());
    $sites = [$site];

    $og_role = OgRole::create();
    $og_role
      ->setName('role_group_manager')
      ->setLabel($this->randomString())
      ->setGroupType('node')
      ->setGroupBundle($site_type->id())
      ->grantPermission($administer_site_permission)
      ->save();

    // Create users.
    $user1 = $this->createGroupUser([], $sites);
    $user = $this->createUser();
    $site_user = $this->createGroupUser([], $sites);
    $site_manager = $this->createGroupUser([], $sites);
    $membership = Og::getMembership($site, $site_manager);
    $membership->addRole($og_role);

    /** @var \Drupal\og\OgAccessInterface $og_access */
    $og_access = $this->container->get('og.access');
    // Always give access to user 1.
    $this->assertTrue($og_access->userAccess($site, $administer_site_permission, $user1)->isAllowed());

    // No access for non site member.
    $this->assertTrue($og_access->userAccess($site, $administer_site_permission, $user)->isForbidden());

    // No access for site members who has not the proper role(s).
    $this->assertTrue($og_access->userAccess($site, $administer_site_permission, $site_user)->isForbidden());

    // Access for site members with the proper role(s).
    $this->assertTrue($og_access->userAccess($site, $administer_site_permission, $site_manager)->isAllowed());
  }

  /**
   * Test Site homepage path.
   */
  public function testGetHomepagePath() {
    $site_type = $this->createGroupNodeType(self::TYPE_IS_GROUP);
    OgSm::siteTypeManager()->setIsSiteType($site_type, TRUE);
    $site_type->save();
    $site = $this->createGroup($site_type->id());

    /** @var \Drupal\og_sm\SiteManagerInterface $site_manager */
    $site_manager = $this->container->get('og_sm.site_manager');

    // Default when no context is active.
    $this->assertFalse(
      $site_manager->getSiteHomePage(),
      'No path if no Site in current OG context.'
    );

    // Path based on the given Site.
    $expected = '/node/' . $site->id();
    $this->assertEquals(
      $expected,
      $site_manager->getSiteHomePage($site)->toString(),
      'Site homepage is the Site node.'
    );

    $this->setOgContextToGroup($site);
    $site_manager = $this->container->get('og_sm.site_manager');

    // Path from current OG context.
    $this->assertEquals(
      $expected,
      $site_manager->getSiteHomePage()->toString(),
      'Fallback to Site homepage of the active OG context.'
    );

    // Enable module that alters the path.
    $this->enableModules(['og_sm_test']);
    $site_manager = $this->container->get('og_sm.site_manager');
    $this->assertEquals(
      Url::fromUserInput('/group/node/' . $site->id() . '/admin/structure/site-edit')->toString(),
      $site_manager->getSiteHomePage($site)->toString(),
      'Modules can alter the Site path.'
    );
  }

}

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

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