View source
<?php
namespace Drupal\Tests\rng\Kernel;
use Drupal\courier\Entity\TemplateCollection;
use Drupal\rng\Entity\Registration;
use Drupal\rng\Entity\Rule;
use Drupal\rng\Entity\RuleComponent;
use Drupal\simpletest\UserCreationTrait;
use Symfony\Component\HttpFoundation\Response;
class RngMessageRules extends RngKernelTestBase {
use UserCreationTrait;
public static $modules = [
'system',
'entity_test',
'user',
'filter',
];
protected $eventMeta;
protected $rule;
protected function setUp() {
parent::setUp();
$this
->installEntitySchema('entity_test');
$this
->installEntitySchema('registration');
$this
->installEntitySchema('registrant');
$this
->installEntitySchema('rng_rule');
$this
->installEntitySchema('rng_rule_component');
$this
->installEntitySchema('courier_template_collection');
$this
->installEntitySchema('courier_message_queue_item');
$this
->installEntitySchema('courier_email');
$this
->installEntitySchema('user');
$this
->installSchema('system', [
'sequences',
]);
$this
->installConfig('courier');
$this->registrationType = $this
->createRegistrationType();
$this->eventType = $this
->createEventType('entity_test', 'entity_test');
$this->eventMeta = $this
->createEvent();
$event = $this->eventMeta
->getEvent();
$this->rule = $this
->createMessageRule($event);
}
protected function createMessageRule($event) {
$courier_manager = $this->container
->get('courier.manager');
$action_manager = $this->container
->get('plugin.manager.action');
$template_collection = TemplateCollection::create();
$template_collection
->save();
$courier_manager
->addTemplates($template_collection);
$template_collection
->save();
$templates = $template_collection
->getTemplates();
$courier_email = $templates[0];
$courier_email
->setSubject($this
->randomMachineName());
$courier_email
->setBody('Greetings, [identity:label]');
$courier_email
->save();
$rule = Rule::create([
'event' => [
'entity' => $event,
],
]);
$rule
->setIsActive(TRUE);
$actionPlugin = $action_manager
->createInstance('rng_courier_message');
$configuration = $actionPlugin
->getConfiguration();
$configuration['template_collection'] = $template_collection
->id();
$action = RuleComponent::create([])
->setPluginId($actionPlugin
->getPluginId())
->setConfiguration($configuration)
->setType('action');
$rule
->addComponent($action);
return $rule;
}
public function testRngRegistrationCreateMessages() {
$this->rule
->set('trigger_id', 'entity:registration:new');
$this->rule
->save();
$rngEntityModel = $this->container
->get('rng.entity.model');
$this
->assertEquals(0, count($rngEntityModel
->getOperationRecords()), 'There are zero entity operations recorded.');
$this
->assertEquals(0, $this
->countMessagesInQueue(), 'There are zero messages in queue.');
$event = $this->eventMeta
->getEvent();
$identity = $this
->createUser();
$registration = Registration::create([
'type' => $this->registrationType
->id(),
]);
$registration
->setEvent($event)
->addIdentity($identity)
->save();
$this
->terminateRequest();
$this
->assertEquals(1, count($rngEntityModel
->getOperationRecords()), 'There is one entity operation recorded.');
$this
->assertEquals(1, $this
->countMessagesInQueue(), 'There is one message in queue.');
}
public function testRngRegistrationUpdateMessages() {
$this->rule
->set('trigger_id', 'entity:registration:update');
$this->rule
->save();
$rngEntityModel = $this->container
->get('rng.entity.model');
$event = $this->eventMeta
->getEvent();
$this
->assertEquals(0, count($rngEntityModel
->getOperationRecords()), 'There are zero entity operations recorded.');
$identity = $this
->createUser();
$registration = Registration::create([
'type' => $this->registrationType
->id(),
]);
$registration
->setEvent($event)
->addIdentity($identity)
->save();
$this
->terminateRequest();
$this
->assertEquals(1, count($rngEntityModel
->getOperationRecords()), 'There is one entity operation recorded.');
$this
->assertEquals(0, $this
->countMessagesInQueue(), 'There are zero messages in queue.');
$registration
->save();
$this
->terminateRequest();
$this
->assertEquals(2, count($rngEntityModel
->getOperationRecords()), 'There is two entity operations recorded.');
$this
->assertEquals(1, $this
->countMessagesInQueue(), 'There is one message in queue.');
}
protected function terminateRequest() {
$request = $this->container
->get('request_stack')
->getCurrentRequest();
$kernel = $this->container
->get('kernel');
$response = new Response();
$kernel
->terminate($request, $response);
}
protected function countMessagesInQueue() {
return \Drupal::entityTypeManager()
->getStorage('courier_message_queue_item')
->getQuery()
->count()
->execute();
}
}