You are here

public function FeaturesAssignTest::testAssignForwardDependency in Features 8.4

Same name and namespace in other branches
  1. 8.3 tests/src/Kernel/FeaturesAssignTest.php \Drupal\Tests\features\Kernel\FeaturesAssignTest::testAssignForwardDependency()

@covers Drupal\features\Plugin\FeaturesAssignment\FeaturesAssignmentForwardDependency

File

tests/src/Kernel/FeaturesAssignTest.php, line 480

Class

FeaturesAssignTest
The Feature Assign test.

Namespace

Drupal\Tests\features\Kernel

Code

public function testAssignForwardDependency() {
  $method_id = 'forward_dependency';

  // Enable the method.
  $this
    ->enableAssignmentMethod($method_id);

  // Add some configuration.
  // Two parent items.
  $this
    ->addConfigurationItem('parent1', [], [
    'type' => 'node_type',
    'dependents' => [
      'grandparent',
    ],
  ]);
  $this
    ->addConfigurationItem('parent2', [], [
    'type' => 'node_type',
    'dependents' => [],
  ]);

  // Something that belongs to just one parent.
  $this
    ->addConfigurationItem('child1', [], [
    'type' => 'node_type',
    'dependents' => [
      'parent1',
    ],
  ]);

  // Something that belongs to both parents.
  $this
    ->addConfigurationItem('child2', [], [
    'type' => 'node_type',
    'dependents' => [
      'parent1',
      'parent2',
    ],
  ]);

  // Something that indirectly belongs to parent1.
  $this
    ->addConfigurationItem('grandchild', [], [
    'type' => 'node_type',
    'dependents' => [
      'child1',
    ],
  ]);

  // A dependent, not a dependency.
  $this
    ->addConfigurationItem('grandparent', [], [
    'type' => 'node_type',
    'dependents' => [],
  ]);

  // Something completely unrelated.
  $this
    ->addConfigurationItem('stranger', [], [
    'type' => 'node_type',
    'dependents' => [],
  ]);
  $this->featuresManager
    ->initPackage(self::PACKAGE_NAME, 'My test package');
  $this->featuresManager
    ->assignConfigPackage(self::PACKAGE_NAME, [
    'parent1',
  ]);
  $other_package_name = 'other_package';
  $this->featuresManager
    ->initPackage($other_package_name, 'Other package');
  $this->featuresManager
    ->assignConfigPackage($other_package_name, [
    'parent2',
  ]);
  $this->assigner
    ->applyAssignmentMethod($method_id);
  $packages = $this->featuresManager
    ->getPackages();
  $expected_package_names = [
    self::PACKAGE_NAME,
    $other_package_name,
  ];
  sort($expected_package_names);
  $actual_package_names = array_keys($packages);
  sort($actual_package_names);
  $this
    ->assertEquals($expected_package_names, $actual_package_names, 'Expected packages not created.');
  $expected_config_items = [
    'parent1',
    'child1',
    'grandchild',
  ];
  sort($expected_config_items);
  $actual_config_items = $packages[self::PACKAGE_NAME]
    ->getConfig();
  sort($actual_config_items);
  $this
    ->assertEquals($expected_config_items, $actual_config_items, 'Expected configuration items not present in article package.');
}