commerce_license-8.x-2.x-dev/tests/src/Kernel/LicenseGrantSetFieldTest.php
tests/src/Kernel/LicenseGrantSetFieldTest.php
<?php
namespace Drupal\Tests\commerce_license\Kernel;
use Drupal\Tests\commerce_order\Kernel\OrderKernelTestBase;
/**
* Tests that a field can be set on the license when granted and revoked.
*
* @group commerce_license
*/
class LicenseGrantSetFieldTest extends OrderKernelTestBase {
/**
* The modules to enable.
*
* @var array
*/
protected static $modules = [
'commerce_license',
'commerce_license_test',
];
/**
* The license storage.
*
* @var \Drupal\commerce_license\LicenseStorageInterface
*/
protected $licenseStorage;
/**
* The license type plugin manager.
*
* @var \Drupal\commerce_license\LicenseTypeManager
*/
protected $licenseTypeManager;
/**
* {@inheritdoc}
*/
protected function setUp(): void {
parent::setUp();
$this->installEntitySchema('commerce_license');
// Install the bundle plugins for the license entity type which the
// commerce_license_test module provides. This takes care of creating the
// fields which the bundle plugins define.
$this->container->get('entity.bundle_plugin_installer')->installBundles(
$this->container->get('entity_type.manager')->getDefinition('commerce_license'),
['commerce_license_test']
);
$this->licenseTypeManager = $this->container->get('plugin.manager.commerce_license_type');
$this->licenseStorage = $this->container->get('entity_type.manager')->getStorage('commerce_license');
}
/**
* Tests that the license type plugin can set field values on the license.
*/
public function testLicensePluginSetField(): void {
$license_owner = $this->createUser();
// Create a license in the 'new' state, owned by the user.
$license = $this->licenseStorage->create([
'type' => 'with_field',
'state' => 'new',
'product_variation' => 1,
'uid' => $license_owner->id(),
// Use the unlimited expiry plugin as it's simple.
'expiration_type' => [
'target_plugin_id' => 'unlimited',
'target_plugin_configuration' => [],
],
]);
$license->save();
/** @var \Drupal\commerce_license\Entity\LicenseInterface $license */
$license = $this->reloadEntity($license);
self::assertEquals('', $license->test_field->value, 'The plugin-controlled field is not set.');
// Change the state to 'active' and save the license.
// This should cause the plugin to react.
$license->getState()->applyTransitionById('confirm');
$license->save();
$license = $this->reloadEntity($license);
self::assertEquals('granted', $license->test_field->value, 'The plugin-controlled field has been set by grantLicense().');
// Change the state to 'expired' and save the license.
// This should cause the plugin to react.
$license->getState()->applyTransitionById('expire');
$license->save();
$license = $this->reloadEntity($license);
self::assertEquals('revoked', $license->test_field->value, 'The plugin-controlled field has been set by revokeLicense().');
}
}
