View source
<?php
namespace Drupal\Tests\scheduler\Functional;
use Drupal\rules\Context\ContextConfig;
class SchedulerRulesConditionsTest extends SchedulerBrowserTestBase {
protected static $modules = [
'scheduler_rules_integration',
];
protected function setUp() : void {
parent::setUp();
$this->rulesStorage = $this->container
->get('entity_type.manager')
->getStorage('rules_reaction_rule');
$this->expressionManager = $this->container
->get('plugin.manager.rules_expression');
}
public function testEntityTypeEnabledConditions($entityTypeId, $bundle) {
$condition_prefix = $entityTypeId == 'node' ? 'scheduler_condition_' : 'scheduler_';
$condition_suffix = $entityTypeId == 'node' ? '' : ":{$entityTypeId}";
$entityType = $this
->entityTypeObject($entityTypeId, $bundle);
$assert = $this
->assertSession();
$rule1 = $this->expressionManager
->createRule();
$rule1
->addCondition("{$condition_prefix}publishing_is_enabled{$condition_suffix}", ContextConfig::create()
->map("{$entityTypeId}", "{$entityTypeId}"));
$message1 = 'RULES message 1. This entity type is enabled for scheduled publishing.';
$rule1
->addAction('rules_system_message', ContextConfig::create()
->setValue('message', $message1)
->setValue('type', 'status'));
$config_entity = $this->rulesStorage
->create([
'id' => 'rule1',
'events' => [
[
'event_name' => "rules_entity_view:{$entityTypeId}",
],
],
'expression' => $rule1
->getConfiguration(),
]);
$config_entity
->save();
$rule2 = $this->expressionManager
->createRule();
$rule2
->addCondition("{$condition_prefix}unpublishing_is_enabled{$condition_suffix}", ContextConfig::create()
->map("{$entityTypeId}", "{$entityTypeId}"));
$message2 = 'RULES message 2. This entity type is enabled for scheduled unpublishing.';
$rule2
->addAction('rules_system_message', ContextConfig::create()
->setValue('message', $message2)
->setValue('type', 'status'));
$config_entity = $this->rulesStorage
->create([
'id' => 'rule2',
'events' => [
[
'event_name' => "rules_entity_view:{$entityTypeId}",
],
],
'expression' => $rule2
->getConfiguration(),
]);
$config_entity
->save();
$rule3 = $this->expressionManager
->createRule();
$rule3
->addCondition("{$condition_prefix}publishing_is_enabled{$condition_suffix}", ContextConfig::create()
->map("{$entityTypeId}", "{$entityTypeId}")
->negateResult());
$message3 = 'RULES message 3. This entity type is not enabled for scheduled publishing.';
$rule3
->addAction('rules_system_message', ContextConfig::create()
->setValue('message', $message3)
->setValue('type', 'status'));
$config_entity = $this->rulesStorage
->create([
'id' => 'rule3',
'events' => [
[
'event_name' => "rules_entity_view:{$entityTypeId}",
],
],
'expression' => $rule3
->getConfiguration(),
]);
$config_entity
->save();
$rule4 = $this->expressionManager
->createRule();
$rule4
->addCondition("{$condition_prefix}unpublishing_is_enabled{$condition_suffix}", ContextConfig::create()
->map("{$entityTypeId}", "{$entityTypeId}")
->negateResult());
$message4 = 'RULES message 4. This entity type is not enabled for scheduled unpublishing.';
$rule4
->addAction('rules_system_message', ContextConfig::create()
->setValue('message', $message4)
->setValue('type', 'status'));
$config_entity = $this->rulesStorage
->create([
'id' => 'rule4',
'events' => [
[
'event_name' => "rules_entity_view:{$entityTypeId}",
],
],
'expression' => $rule4
->getConfiguration(),
]);
$config_entity
->save();
$entity = $this
->createEntity($entityTypeId, $bundle, [
'title' => "Enabled Conditions - {$entityTypeId} {$bundle}",
'status' => TRUE,
]);
$this
->drupalGet($entity
->toUrl());
$assert
->pageTextContains($message1);
$assert
->pageTextContains($message2);
$assert
->pageTextNotContains($message3);
$assert
->pageTextNotContains($message4);
$entityType
->setThirdPartySetting('scheduler', 'publish_enable', FALSE)
->save();
drupal_flush_all_caches();
$this
->drupalGet($entity
->toUrl());
$assert
->pageTextNotContains($message1);
$assert
->pageTextContains($message2);
$assert
->pageTextContains($message3);
$assert
->pageTextNotContains($message4);
$entityType
->setThirdPartySetting('scheduler', 'unpublish_enable', FALSE)
->save();
drupal_flush_all_caches();
$this
->drupalGet($entity
->toUrl());
$assert
->pageTextNotContains($message1);
$assert
->pageTextNotContains($message2);
$assert
->pageTextContains($message3);
$assert
->pageTextContains($message4);
}
public function testEntityIsScheduledConditions($entityTypeId, $bundle) {
$condition_prefix = $entityTypeId == 'node' ? 'scheduler_condition_node_' : 'scheduler_entity_is_';
$condition_suffix = $entityTypeId == 'node' ? '' : ":{$entityTypeId}";
$assert = $this
->assertSession();
$rule5 = $this->expressionManager
->createRule();
$rule5
->addCondition("{$condition_prefix}scheduled_for_publishing{$condition_suffix}", ContextConfig::create()
->map("{$entityTypeId}", "{$entityTypeId}")
->negateResult());
$message5 = 'RULES message 5. This content is not scheduled for publishing.';
$rule5
->addAction('rules_system_message', ContextConfig::create()
->setValue('message', $message5)
->setValue('type', 'status'));
$config_entity = $this->rulesStorage
->create([
'id' => 'rule5',
'events' => [
[
'event_name' => "rules_entity_update:{$entityTypeId}",
],
],
'expression' => $rule5
->getConfiguration(),
]);
$config_entity
->save();
$rule6 = $this->expressionManager
->createRule();
$rule6
->addCondition("{$condition_prefix}scheduled_for_unpublishing{$condition_suffix}", ContextConfig::create()
->map("{$entityTypeId}", "{$entityTypeId}")
->negateResult());
$message6 = 'RULES message 6. This content is not scheduled for unpublishing.';
$rule6
->addAction('rules_system_message', ContextConfig::create()
->setValue('message', $message6)
->setValue('type', 'status'));
$config_entity = $this->rulesStorage
->create([
'id' => 'rule6',
'events' => [
[
'event_name' => "rules_entity_update:{$entityTypeId}",
],
],
'expression' => $rule6
->getConfiguration(),
]);
$config_entity
->save();
$rule7 = $this->expressionManager
->createRule();
$rule7
->addCondition("{$condition_prefix}scheduled_for_publishing{$condition_suffix}", ContextConfig::create()
->map("{$entityTypeId}", "{$entityTypeId}"));
$message7 = 'RULES message 7. This content is scheduled for publishing.';
$rule7
->addAction('rules_system_message', ContextConfig::create()
->setValue('message', $message7)
->setValue('type', 'status'));
$config_entity = $this->rulesStorage
->create([
'id' => 'rule7',
'events' => [
[
'event_name' => "rules_entity_update:{$entityTypeId}",
],
],
'expression' => $rule7
->getConfiguration(),
]);
$config_entity
->save();
$rule8 = $this->expressionManager
->createRule();
$rule8
->addCondition("{$condition_prefix}scheduled_for_unpublishing{$condition_suffix}", ContextConfig::create()
->map("{$entityTypeId}", "{$entityTypeId}"));
$message8 = 'RULES message 8. This content is scheduled for unpublishing.';
$rule8
->addAction('rules_system_message', ContextConfig::create()
->setValue('message', $message8)
->setValue('type', 'status'));
$config_entity = $this->rulesStorage
->create([
'id' => 'rule8',
'events' => [
[
'event_name' => "rules_entity_update:{$entityTypeId}",
],
],
'expression' => $rule8
->getConfiguration(),
]);
$config_entity
->save();
$this
->drupalLogin($this->schedulerUser);
$entity = $this
->createEntity($entityTypeId, $bundle, [
'title' => "Scheduled Conditions - {$entityTypeId} {$bundle}",
'uid' => $this->schedulerUser
->id(),
'status' => TRUE,
]);
$this
->drupalGet($entity
->toUrl('edit-form'));
$this
->submitForm([], 'Save');
$assert
->pageTextContains($message5);
$assert
->pageTextContains($message6);
$assert
->pageTextNotContains($message7);
$assert
->pageTextNotContains($message8);
$edit = [
'publish_on[0][value][date]' => date('Y-m-d', strtotime('+1 day', $this->requestTime)),
'publish_on[0][value][time]' => date('H:i:s', strtotime('+1 day', $this->requestTime)),
];
$this
->drupalGet($entity
->toUrl('edit-form'));
$this
->submitForm($edit, 'Save');
$assert
->pageTextNotContains($message5);
$assert
->pageTextContains($message6);
$assert
->pageTextContains($message7);
$assert
->pageTextNotContains($message8);
$edit = [
'unpublish_on[0][value][date]' => date('Y-m-d', strtotime('+2 day', $this->requestTime)),
'unpublish_on[0][value][time]' => date('H:i:s', strtotime('+2 day', $this->requestTime)),
];
$this
->drupalGet($entity
->toUrl('edit-form'));
$this
->submitForm($edit, 'Save');
$assert
->pageTextNotContains($message5);
$assert
->pageTextNotContains($message6);
$assert
->pageTextContains($message7);
$assert
->pageTextContains($message8);
}
}