You are here

protected function OgMenuAccessTest::setUp in Organic Groups Menu (OG Menu) 8

Overrides KernelTestBase::setUp

File

tests/src/Kernel/OgMenuAccessTest.php, line 74

Class

OgMenuAccessTest
Tests access to operations on OG Menu instances.

Namespace

Drupal\Tests\og_menu\Kernel

Code

protected function setUp() {
  parent::setUp();
  $this
    ->installConfig([
    'og',
  ]);
  $this
    ->installEntitySchema('entity_test');
  $this
    ->installEntitySchema('og_membership');
  $this
    ->installEntitySchema('ogmenu');
  $this
    ->installEntitySchema('ogmenu_instance');
  $this
    ->installEntitySchema('user');
  $this
    ->installSchema('system', 'sequences');

  // Create a first user. This will be UID 1 who has super powers.
  $this->users['uid1'] = User::create([
    'name' => $this
      ->randomString(),
  ]);
  $this->users['uid1']
    ->save();

  // Create an 'OG administrator' user who has the global
  // 'administer organic groups' permission.
  // This user should be able to access everything related to any group.

  /** @var RoleInterface $og_menu_admin_role */
  $admin_role = Role::create([
    'id' => $this
      ->randomMachineName(),
    'label' => $this
      ->randomString(),
  ]);
  $admin_role
    ->grantPermission('administer organic groups')
    ->save();
  $this->users['ogadmin'] = User::create([
    'name' => $this
      ->randomString(),
    'roles' => [
      $admin_role
        ->id(),
    ],
  ]);
  $this->users['ogadmin']
    ->save();

  // Create an 'OG Menu administrator' user who will get the global
  // permissions to manage any OG menu.

  /** @var RoleInterface $og_menu_admin_role */
  $og_menu_admin_role = Role::create([
    'id' => $this
      ->randomMachineName(),
    'label' => $this
      ->randomString(),
  ]);
  $og_menu_admin_role
    ->grantPermission('administer group')
    ->grantPermission('administer og menu')
    ->save();
  $this->users['ogmenuadmin'] = User::create([
    'name' => $this
      ->randomString(),
    'roles' => [
      $og_menu_admin_role
        ->id(),
    ],
  ]);
  $this->users['ogmenuadmin']
    ->save();

  // Create a 'group administrator' user who is a normal authenticated user
  // but has the administrator role within a particular group. By default this
  // user should be able to access everything related to their own group.
  $this->users['groupadmin'] = User::create([
    'name' => $this
      ->randomString(),
  ]);
  $this->users['groupadmin']
    ->save();

  // Create a 'group member' user who is a normal authenticated user and a
  // member of a particular group. This user should only be able to access
  // operations for which permission has been explicitly granted.
  $this->users['groupmember'] = User::create([
    'name' => $this
      ->randomString(),
  ]);
  $this->users['groupmember']
    ->save();

  // Create an 'authenticated' user who does not have any special permissions.
  $this->users['authenticated'] = User::create([
    'name' => $this
      ->randomString(),
  ]);
  $this->users['authenticated']
    ->save();

  // Create a test group. We use the 'entity test' entity which is a bit
  // easier to set up since it has fake bundles.
  $this->groupBundle = mb_strtolower($this
    ->randomMachineName());
  Og::groupTypeManager()
    ->addGroup('entity_test', $this->groupBundle);

  // Create a group and associate with the group administrator. This user will
  // be subscribed to the group and inherit the administrator role
  // automatically.
  $this->group = EntityTest::create([
    'type' => $this->groupBundle,
    'name' => $this
      ->randomString(),
    'user_id' => $this->users['groupadmin']
      ->id(),
  ]);
  $this->group
    ->save();

  // Subscribe the group member to the group.

  /** @var OgMembership $membership */
  $membership = OgMembership::create([
    'type' => OgMembershipInterface::TYPE_DEFAULT,
  ]);
  $membership
    ->setOwner($this->users['groupmember'])
    ->setGroup($this->group)
    ->save();

  // Add an OG Menu.
  $this->ogMenu = OgMenu::create([
    'label' => $this
      ->randomString(),
    'id' => $this
      ->randomMachineName(),
  ]);
  $this->ogMenu
    ->save();

  // Add an OG Menu Instance.
  $this->ogMenuInstance = OgMenuInstance::create([
    'id' => $this
      ->randomMachineName(),
    'type' => $this->ogMenu
      ->id(),
    OgGroupAudienceHelperInterface::DEFAULT_FIELD => $this->group
      ->id(),
  ]);
  $this->ogMenuInstance
    ->save();
}