og-8.x-1.x-dev/tests/src/Kernel/Entity/GroupAudienceTest.php

tests/src/Kernel/Entity/GroupAudienceTest.php
<?php

declare(strict_types=1);

namespace Drupal\Tests\og\Kernel\Entity;

use Drupal\KernelTests\KernelTestBase;
use Drupal\entity_test\Entity\EntityTest;
use Drupal\og\Og;
use Drupal\og\OgGroupAudienceHelperInterface;

/**
 * Tests the group audience field.
 *
 * @group og
 */
class GroupAudienceTest extends KernelTestBase {

  /**
   * The OG group audience helper.
   */
  protected OgGroupAudienceHelperInterface $groupAudienceHelper;

  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'entity_test',
    'field',
    'og',
    'options',
    'system',
    'user',
  ];

  /**
   * Array with the bundle IDs.
   *
   * @var list<int|string>
   */
  protected array $bundles;

  /**
   * {@inheritdoc}
   */
  protected function setUp(): void {
    parent::setUp();

    // Add membership and config schema.
    $this->installConfig(['og']);
    $this->installEntitySchema('entity_test');
    $this->installEntitySchema('og_membership');
    $this->installEntitySchema('user');

    $this->groupAudienceHelper = $this->container->get('og.group_audience_helper');

    // Create several bundles.
    for ($i = 0; $i <= 4; $i++) {
      $bundle = EntityTest::create([
        'type' => mb_strtolower($this->randomMachineName()),
        'name' => $this->randomString(),
      ]);

      $bundle->save();
      $this->bundles[] = $bundle->id();
    }
  }

  /**
   * Testing getting all group audience fields.
   */
  public function testGetAllGroupAudienceFields(): void {
    // Set bundles as groups.
    Og::groupTypeManager()->addGroup('entity_test', $this->bundles[0]);
    Og::groupTypeManager()->addGroup('entity_test', $this->bundles[1]);

    $bundle = $this->bundles[2];

    // Test no values returned for a non-group content.
    $this->assertEmpty($this->groupAudienceHelper->getAllGroupAudienceFields('entity_test', $bundle));

    // Set bundles as group content.
    $field_name1 = mb_strtolower($this->randomMachineName());
    $field_name2 = mb_strtolower($this->randomMachineName());

    Og::createField(OgGroupAudienceHelperInterface::DEFAULT_FIELD, 'entity_test', $bundle, ['field_name' => $field_name1]);
    Og::createField(OgGroupAudienceHelperInterface::DEFAULT_FIELD, 'entity_test', $bundle, ['field_name' => $field_name2]);

    $expected_field_names = [$field_name1, $field_name2];
    $actual_field_names = array_keys($this->groupAudienceHelper->getAllGroupAudienceFields('entity_test', $bundle));
    sort($expected_field_names);
    sort($actual_field_names);

    $this->assertEquals($expected_field_names, $actual_field_names);

    // Test Og::isGroupContent method, which is just a wrapper around
    // OgGroupAudienceHelper::hasGroupAudienceFields().
    $this->assertTrue(Og::isGroupContent('entity_test', $bundle));

    $bundle = $this->bundles[3];
    $this->assertFalse(Og::isGroupContent('entity_test', $bundle));
  }

  /**
   * Testing getting group audience fields filtered by group type.
   */
  public function testGetAllGroupAudienceFieldsFilterGroupType(): void {
    Og::groupTypeManager()->addGroup('entity_test', $this->bundles[0]);

    $bundle = $this->bundles[1];

    // Set bundle as group content.
    $field_name1 = mb_strtolower($this->randomMachineName());
    $field_name2 = mb_strtolower($this->randomMachineName());

    $overrides = [
      'field_name' => $field_name1,
      'field_storage_config' => [
        'settings' => [
          'target_type' => 'user',
        ],
      ],
    ];
    Og::createField(OgGroupAudienceHelperInterface::DEFAULT_FIELD, 'entity_test', $bundle, $overrides);

    // Add a default field, which will use the "entity_test" as target type.
    Og::createField(OgGroupAudienceHelperInterface::DEFAULT_FIELD, 'entity_test', $bundle, ['field_name' => $field_name2]);

    $field_names = $this->groupAudienceHelper->getAllGroupAudienceFields('entity_test', $bundle, 'entity_test');
    $this->assertEquals([$field_name2], array_keys($field_names));
  }

  /**
   * Testing getting group audience fields filtered by group bundle.
   */
  public function testGetAllGroupAudienceFieldsFilterGroupBundle(): void {
    // Set bundles as groups.
    Og::groupTypeManager()->addGroup('entity_test', $this->bundles[0]);
    Og::groupTypeManager()->addGroup('entity_test', $this->bundles[1]);

    $group_bundle1 = $this->bundles[0];
    $group_bundle2 = $this->bundles[1];

    $bundle = $this->bundles[2];

    // Set bundle as group content.
    $field_name1 = mb_strtolower($this->randomMachineName());
    $field_name2 = mb_strtolower($this->randomMachineName());

    // Add fields that explicitly references a bundle.
    $overrides = [
      'field_name' => $field_name1,
      'field_config' => [
        'settings' => [
          'handler' => 'default',
          'handler_settings' => [
            'target_bundles' => [$group_bundle1 => $group_bundle1],
          ],
        ],
      ],
    ];
    Og::createField(OgGroupAudienceHelperInterface::DEFAULT_FIELD, 'entity_test', $bundle, $overrides);

    $overrides['field_name'] = $field_name2;
    $overrides['field_config']['settings']['handler_settings']['target_bundles'] = [$group_bundle2 => $group_bundle2];
    Og::createField(OgGroupAudienceHelperInterface::DEFAULT_FIELD, 'entity_test', $bundle, $overrides);

    $field_names = $this->groupAudienceHelper->getAllGroupAudienceFields('entity_test', $bundle, 'entity_test', $group_bundle1);
    $this->assertEquals([$field_name1], array_keys($field_names));
  }

}

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

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