public function SchedulerRulesConditionsTest::testEntityIsScheduledConditions in Scheduler 2.x
Tests the conditions for whether an entity is scheduled.
@dataProvider dataStandardEntityTypes()
File
- tests/
src/ Functional/ SchedulerRulesConditionsTest.php, line 161
Class
- SchedulerRulesConditionsTest
- Tests the four conditions that Scheduler provides for use in Rules module.
Namespace
Drupal\Tests\scheduler\FunctionalCode
public function testEntityIsScheduledConditions($entityTypeId, $bundle) {
// The legacy rules condition ids for nodes remain as:
// - scheduler_condition_node_scheduled_for_publishing
// - scheduler_condition_node_scheduled_for_unpublishing
// For all other entity types the new derived condition ids are of the form:
// - scheduler_entity_is_scheduled_for_publishing:{type}
// - scheduler_entity_is_scheduled_for_unpublishing:{type}
// .
$condition_prefix = $entityTypeId == 'node' ? 'scheduler_condition_node_' : 'scheduler_entity_is_';
$condition_suffix = $entityTypeId == 'node' ? '' : ":{$entityTypeId}";
$assert = $this
->assertSession();
// Create a reaction rule to display a message when an entity is updated and
// is not scheduled for publishing.
$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();
// Create a reaction rule to display a message when an entity is updated and
// is not scheduled for unpublishing.
$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();
// Create a reaction rule to display a message when an entity is updated and
// is scheduled for publishing.
$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();
// Create a reaction rule to display a message when an entity is updated and
// is scheduled for unpublishing.
$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);
// Create a published entity.
$entity = $this
->createEntity($entityTypeId, $bundle, [
'title' => "Scheduled Conditions - {$entityTypeId} {$bundle}",
'uid' => $this->schedulerUser
->id(),
'status' => TRUE,
]);
// Edit the entity but do not enter any scheduling dates, and check that
// only messages 5 and 6 are shown.
$this
->drupalGet($entity
->toUrl('edit-form'));
$this
->submitForm([], 'Save');
$assert
->pageTextContains($message5);
$assert
->pageTextContains($message6);
$assert
->pageTextNotContains($message7);
$assert
->pageTextNotContains($message8);
// Edit the entity, set a publish_on date, and check that message 5 is now
// not shown and we get message 7 instead.
$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 the entity again, set an unpublish_on date, and check that message 6
// is now not shown and we get message 8 instead.
$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);
}