features-8.x-3.11/tests/src/Unit/FeaturesBundleTest.php
tests/src/Unit/FeaturesBundleTest.php
<?php
namespace Drupal\Tests\features\Unit;
use Drupal\features\Entity\FeaturesBundle;
use Drupal\Tests\UnitTestCase;
use Prophecy\PhpUnit\ProphecyTrait;
/**
* @coversDefaultClass Drupal\features\Entity\FeaturesBundle
* @group features
*/
class FeaturesBundleTest extends UnitTestCase {
use ProphecyTrait;
/**
* {@inheritDoc}
*/
public function setUp(): void {
parent::setUp();
// Mock an assigner.
$manager = new DummyPluginManager();
// Mock the container.
$container = $this->prophesize('\Symfony\Component\DependencyInjection\ContainerInterface');
$container->get('plugin.manager.features_assignment_method')
->willReturn($manager);
\Drupal::setContainer($container->reveal());
}
/**
* @covers ::getEnabledAssignments
* @covers ::getAssignmentWeights
* @covers ::getAssignmentSettings
* @covers ::setAssignmentSettings
* @covers ::setAssignmentWeights
* @covers ::setEnabledAssignments
*/
public function testAssignmentSetting() {
// Create an entity.
$settings = [
'foo' => [
'enabled' => TRUE,
'weight' => 0,
'my_setting' => 42,
],
'bar' => [
'enabled' => FALSE,
'weight' => 1,
'another_setting' => 'value',
],
];
$bundle = new FeaturesBundle([
'assignments' => $settings,
], 'features_bundle');
// Get assignments and attributes.
$this->assertEquals(
['foo' => 'foo'],
$bundle->getEnabledAssignments(),
'Can get enabled assignments'
);
$this->assertEquals(
['foo' => 0, 'bar' => 1],
$bundle->getAssignmentWeights(),
'Can get assignment weights'
);
$this->assertEquals(
$settings['foo'],
$bundle->getAssignmentSettings('foo'),
'Can get assignment settings'
);
$this->assertEquals(
$settings,
$bundle->getAssignmentSettings(),
'Can get all assignment settings'
);
// Change settings.
$settings['foo']['my_setting'] = 97;
$bundle->setAssignmentSettings('foo', $settings['foo']);
$this->assertEquals(
$settings['foo'],
$bundle->getAssignmentSettings('foo'),
'Can change assignment settings'
);
// Change weights.
$settings['foo']['weight'] = 1;
$settings['bar']['weight'] = 0;
$bundle->setAssignmentWeights(['foo' => 1, 'bar' => 0]);
$this->assertEquals(
['foo' => 1, 'bar' => 0],
$bundle->getAssignmentWeights(),
'Can change assignment weights'
);
$this->assertEquals(
$settings,
$bundle->getAssignmentSettings(),
'Weight changes are reflected in settings'
);
// Enable existing assignment.
$settings['bar']['enabled'] = TRUE;
$bundle->setEnabledAssignments(['foo', 'bar']);
$this->assertEquals(
['foo' => 'foo', 'bar' => 'bar'],
$bundle->getEnabledAssignments(),
'Can enable assignment'
);
$this->assertEquals(
$settings,
$bundle->getAssignmentSettings(),
'Enabled assignment status is reflected in settings'
);
// Disable existing assignments.
$settings['foo']['enabled'] = FALSE;
$settings['bar']['enabled'] = FALSE;
$bundle->setEnabledAssignments([]);
$this->assertEquals(
[],
$bundle->getEnabledAssignments(),
'Can disable assignments'
);
$this->assertEquals(
$settings,
$bundle->getAssignmentSettings(),
'Disabled assignment status is reflected in settings'
);
// Enable a new assignment.
$settings['foo']['enabled'] = TRUE;
$settings['iggy'] = ['enabled' => TRUE, 'weight' => 0, 'new_setting' => 3];
$bundle->setEnabledAssignments(['foo', 'iggy']);
$this->assertEquals(
['foo' => 'foo', 'iggy' => 'iggy'],
$bundle->getEnabledAssignments(),
'Can enable new assignment'
);
$bundle->setAssignmentSettings('iggy', $settings['iggy']);
$this->assertEquals(
$settings,
$bundle->getAssignmentSettings(),
'New enabled assignment status is reflected in settings'
);
}
/**
* @covers ::getFullName
* @covers ::getShortName
* @covers ::SetIsProfile
* @covers ::isProfile
* @covers ::getProfileName
* @covers ::isProfilePackage
* @covers ::inBundle
*/
public function testFullname() {
$bundle = new FeaturesBundle([
'machine_name' => 'mybundle',
'profile_name' => 'mybundle',
], 'mybundle');
$this->assertFalse($bundle->isProfile());
// Settings:get('profile_name') isn't defined in test, so this returns NULL.
$this->assertNull($bundle->getProfileName());
$this->assertFalse($bundle->isProfilePackage('mybundle'));
$this->assertEquals('mybundle_test', $bundle->getFullName('test'));
$this->assertEquals('mybundle_test', $bundle->getFullName('mybundle_test'));
$this->assertEquals('mybundle_mybundle', $bundle->getFullName('mybundle'));
$this->assertEquals('test', $bundle->getShortName('test'));
$this->assertEquals('test', $bundle->getShortName('mybundle_test'));
$this->assertEquals('mybundle', $bundle->getShortName('mybundle_mybundle'));
$this->assertEquals('mybundle', $bundle->getShortName('mybundle'));
$this->assertFalse($bundle->inBundle('test'));
$this->assertTrue($bundle->inBundle('mybundle_test'));
$this->assertFalse($bundle->inBundle('mybundle'));
// Now test it as a profile bundle.
$bundle->setIsProfile(TRUE);
$this->assertTrue($bundle->isProfile());
$this->assertTrue($bundle->isProfilePackage('mybundle'));
$this->assertFalse($bundle->isProfilePackage('standard'));
$this->assertEquals('mybundle', $bundle->getProfileName());
$this->assertEquals('mybundle', $bundle->getFullName('mybundle'));
$this->assertFalse($bundle->inBundle('test'));
$this->assertTrue($bundle->inBundle('mybundle_test'));
$this->assertTrue($bundle->inBundle('mybundle'));
}
}
/**
* A dummy plugin manager, to help testing.
*/
class DummyPluginManager {
/**
* {@inheritDoc}
*/
public function getDefinition($method_id) {
$definition = [
'enabled' => TRUE,
'weight' => 0,
'default_settings' => [
'my_setting' => 42,
],
];
return $definition;
}
}
