diff --git a/scheduler.info.yml b/scheduler.info.yml
index a92958b..e7b62e5 100644
--- a/scheduler.info.yml
+++ b/scheduler.info.yml
@@ -11,6 +11,7 @@ dependencies:
   - views
 test_dependencies:
   - date
+  - rules
 libraries:
   - scheduler/admin
   - vertical-tabs
diff --git a/src/Tests/SchedulerRulesConditionsTest.php b/src/Tests/SchedulerRulesConditionsTest.php
new file mode 100644
index 0000000..6656f16
--- /dev/null
+++ b/src/Tests/SchedulerRulesConditionsTest.php
@@ -0,0 +1,256 @@
+<?php
+
+namespace Drupal\scheduler\Tests;
+
+use Drupal\rules\Context\ContextConfig;
+
+/**
+ * Tests the conditions that Scheduler provides for use in Rules module.
+ *
+ * @group scheduler
+ */
+class SchedulerRulesConditionsTest extends SchedulerTestBase {
+
+  /**
+   * Additional modules required. SchedulerTestBase loads 'node' and 'scheduler'
+   */
+  public static $modules = ['rules'];
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setUp() {
+    parent::setUp();
+
+    $this->storage = $this->container->get('entity_type.manager')->getStorage('rules_reaction_rule');
+
+    $this->expressionManager = $this->container->get('plugin.manager.rules_expression');
+
+    // Create a published page node.
+    $type = $this->nodetype->get('type');
+    $this->node = $this->drupalCreateNode([
+      'title' => 'Rules Test Node',
+      'type' => $type,
+      'uid' => $this->adminUser->id(),
+      'status' => TRUE,
+    ]);
+  }
+
+  /**
+   * Tests the conditions for whether a nodetype is enabled for Scheduler.
+   */
+  public function testNodeTypeEnabledConditions() {
+    // Create a reaction rule to display a message when a node is viewed and
+    // that node type is enabled for scheduled publishing.
+    $rule1 = $this->expressionManager->createRule();
+    $rule1->addCondition('scheduler_condition_publishing_is_enabled',
+      ContextConfig::create()->map('node', 'node')
+    );
+    $string1 = 'RULES message 1. Scheduled publishing is enabled for this node type.';
+    $rule1->addAction('rules_system_message', ContextConfig::create()
+        ->setValue('message', $string1)
+        ->setValue('type', 'status')
+      );
+    $config_entity = $this->storage->create([
+      'id' => 'test_rule_1',
+      'events' => [['event_name' => 'rules_entity_view:node']], // viewing content === viewing PUBLISHED content
+      'expression' => $rule1->getConfiguration(),
+    ]);
+    $config_entity->save();
+
+    // Create a reaction rule to display a message when a node is viewed and
+    // that node type is enabled for scheduled unpublishing.
+    $rule2 = $this->expressionManager->createRule();
+    $rule2->addCondition('scheduler_condition_unpublishing_is_enabled',
+      ContextConfig::create()->map('node', 'node')
+    );
+    $string2 = 'RULES message 2. Scheduled unpublishing is enabled for this node type.';
+    $rule2->addAction('rules_system_message', ContextConfig::create()
+        ->setValue('message', $string2)
+        ->setValue('type', 'status')
+      );
+    $config_entity = $this->storage->create([
+      'id' => 'test_rule_2',
+      'events' => [['event_name' => 'rules_entity_view:node']],
+      'expression' => $rule2->getConfiguration(),
+    ]);
+    $config_entity->save();
+
+    // Create a reaction rule to display a message when a node is viewed and
+    // that node type is NOT enabled for scheduled publishing.
+    $rule3 = $this->expressionManager->createRule();
+    $rule3->addCondition('scheduler_condition_publishing_is_enabled',
+      ContextConfig::create()->map('node', 'node')->negateResult()
+    );
+    $string3 = 'RULES message 3. Scheduled publishing is NOT enabled for this node type.';
+    $rule3->addAction('rules_system_message', ContextConfig::create()
+        ->setValue('message', $string3)
+        ->setValue('type', 'status')
+      );
+    $config_entity = $this->storage->create([
+      'id' => 'test_rule_3',
+      'events' => [['event_name' => 'rules_entity_view:node']],
+      'expression' => $rule3->getConfiguration(),
+    ]);
+    $config_entity->save();
+
+    // Create a reaction rule to display a message when a node is viewed and
+    // that node type is NOT enabled for scheduled unpublishing.
+    $rule4 = $this->expressionManager->createRule();
+    $rule4->addCondition('scheduler_condition_unpublishing_is_enabled',
+      ContextConfig::create()->map('node', 'node')->negateResult()
+    );
+    $string4 = 'RULES message 4. Scheduled unpublishing is NOT enabled for this node type.';
+    $rule4->addAction('rules_system_message', ContextConfig::create()
+        ->setValue('message', $string4)
+        ->setValue('type', 'status')
+      );
+    $config_entity = $this->storage->create([
+      'id' => 'test_rule_4',
+      'events' => [['event_name' => 'rules_entity_view:node']],
+      'expression' => $rule4->getConfiguration(),
+    ]);
+    $config_entity->save();
+
+    // View the node and check the default position - that the node type is
+    // enabled for both publishing and unpublishing.
+    $this->drupalGet('node/' . $this->node->id());
+    $this->assertText($string1, 'Rules message "Node type is enabled for publishing" is shown');
+    $this->assertText($string2, 'Rules message "Node type is enabled for unpublishing" is shown');
+    $this->assertNoText($string3, 'Rules message "Node type is not enabled for publishing" is not shown');
+    $this->assertNoText($string4, 'Rules message "Node type is not enabled for unpublishing" is not shown');
+
+    // Turn off publishing for the node type, visit the node and check the
+    // rules messages.
+    $this->nodetype->setThirdPartySetting('scheduler', 'publish_enable', FALSE)->save();
+    $this->drupalGet('node/' . $this->node->id());
+    $this->assertNoText($string1, 'Rules message "Node type is enabled for publishing" is not shown');
+    $this->assertText($string2, 'Rules message "Node type is enabled for unpublishing" is shown');
+    $this->assertText($string3, 'Rules message "Node type is not enabled for publishing" is shown');
+    $this->assertNoText($string4, 'Rules message "Node type is not enabled for unpublishing" is not shown');
+
+    // Turn off unpublishing for the node type and the check the messages again.
+    $this->nodetype->setThirdPartySetting('scheduler', 'unpublish_enable', FALSE)->save();
+    $this->drupalGet('node/' . $this->node->id());
+    $this->assertNoText($string1, 'Rules message "Node type is enabled for publishing" is not shown');
+    $this->assertNoText($string2, 'Rules message "Node type is enabled for unpublishing" is not shown');
+    $this->assertText($string3, 'Rules message "Node type is not enabled for publishing" is shown');
+    $this->assertText($string4, 'Rules message "Node type is not enabled for unpublishing" is shown');
+
+  }
+
+  /**
+   * Tests the conditions for whether a node is scheduled.
+   */
+  public function testNodeScheduledConditions() {
+    // Create a reaction rule to display a message when a node is updated and
+    // is not scheduled for publishing.
+    $rule1 = $this->expressionManager->createRule();
+    $rule1->addCondition('scheduler_condition_node_scheduled_for_publishing',
+      ContextConfig::create()->map('node', 'node')->negateResult()
+    );
+    $string1 = 'RULES message 1. This content is not scheduled for publishing.';
+    $rule1->addAction('rules_system_message', ContextConfig::create()
+        ->setValue('message', $string1)
+        ->setValue('type', 'status')
+      );
+    $config_entity = $this->storage->create([
+      'id' => 'test_rule_1',
+      'events' => [['event_name' => 'rules_entity_update:node']],
+      'expression' => $rule1->getConfiguration(),
+    ]);
+    $config_entity->save();
+
+    // Create a reaction rule to display a message when a node is updated and
+    // is not scheduled for unpublishing.
+    $rule2 = $this->expressionManager->createRule();
+    $rule2->addCondition('scheduler_condition_node_scheduled_for_unpublishing',
+      ContextConfig::create()->map('node', 'node')->negateResult()
+    );
+    $string2 = 'RULES message 2. This content is not scheduled for unpublishing.';
+    $rule2->addAction('rules_system_message', ContextConfig::create()
+        ->setValue('message', $string2)
+        ->setValue('type', 'status')
+      );
+    $config_entity = $this->storage->create([
+      'id' => 'test_rule_2',
+      'events' => [['event_name' => 'rules_entity_update:node']],
+      'expression' => $rule2->getConfiguration(),
+    ]);
+    $config_entity->save();
+
+    // Create a reaction rule to display a message when a node is updated and
+    // is scheduled for publishing.
+    $rule3 = $this->expressionManager->createRule();
+    $rule3->addCondition('scheduler_condition_node_scheduled_for_publishing',
+      ContextConfig::create()->map('node', 'node')
+    );
+    $string3 = 'RULES message 3. This content is scheduled for publishing.';
+    $rule3->addAction('rules_system_message', ContextConfig::create()
+        ->setValue('message', $string3)
+        ->setValue('type', 'status')
+      );
+    $config_entity = $this->storage->create([
+      'id' => 'test_rule_3',
+      'events' => [['event_name' => 'rules_entity_update:node']],
+      'expression' => $rule3->getConfiguration(),
+    ]);
+    $config_entity->save();
+
+    // Create a reaction rule to display a message when a node is updated and
+    // is scheduled for unpublishing.
+    $rule4 = $this->expressionManager->createRule();
+    $rule4->addCondition('scheduler_condition_node_scheduled_for_unpublishing',
+      ContextConfig::create()->map('node', 'node')
+    );
+    $string4 = 'RULES message 4. This content is scheduled for unpublishing.';
+    $rule4->addAction('rules_system_message', ContextConfig::create()
+        ->setValue('message', $string4)
+        ->setValue('type', 'status')
+      );
+    $config_entity = $this->storage->create([
+      'id' => 'test_rule_4',
+      'events' => [['event_name' => 'rules_entity_update:node']],
+      'expression' => $rule4->getConfiguration(),
+    ]);
+    $config_entity->save();
+
+    $this->drupalLogin($this->adminUser);
+
+    // Edit the node but do not enter any scheduling dates.
+    $edit = [
+      'body[0][value]' => $this->randomString(30),
+    ];
+    $this->drupalPostForm('node/' . $this->node->id() . '/edit', $edit, t('Save and keep published'));
+
+    $this->assertText($string1, 'Rules message "Node is not scheduled for publishing" is shown');
+    $this->assertText($string2, 'Rules message "Node is not scheduled for unpublishing" is shown');
+    $this->assertNoText($string3, 'Rules message "Node is scheduled for publishing" is not shown');
+    $this->assertNoText($string4, 'Rules message "Node is scheduled for unpublishing" is not shown');
+
+    // Edit the node and set a publish_on date.
+    $edit = [
+      'publish_on[0][value][date]' => date('Y-m-d', strtotime('+1 day', REQUEST_TIME)),
+      'publish_on[0][value][time]' => date('H:i:s', strtotime('+1 day', REQUEST_TIME)),
+    ];
+    $this->drupalPostForm('node/' . $this->node->id() . '/edit', $edit, t('Save and unpublish'));
+
+    $this->assertNoText($string1, 'Rules message "Node is not scheduled for publishing" is not shown');
+    $this->assertText($string2, 'Rules message "Node is not scheduled for unpublishing" is shown');
+    $this->assertText($string3, 'Rules message "Node is scheduled for publishing" is shown');
+    $this->assertNoText($string4, 'Rules message "Node is scheduled for unpublishing" is not shown');
+
+    // Edit the node and set an unpublish_on date.
+    $edit = [
+      'unpublish_on[0][value][date]' => date('Y-m-d', strtotime('+2 day', REQUEST_TIME)),
+      'unpublish_on[0][value][time]' => date('H:i:s', strtotime('+2 day', REQUEST_TIME)),
+    ];
+    $this->drupalPostForm('node/' . $this->node->id() . '/edit', $edit, t('Save and keep unpublished'));
+
+    $this->assertNoText($string1, 'Rules message "Node is not scheduled for publishing" is not shown');
+    $this->assertNoText($string2, 'Rules message "Node is not scheduled for unpublishing" is not shown');
+    $this->assertText($string3, 'Rules message "Node is scheduled for publishing" is shown');
+    $this->assertText($string4, 'Rules message "Node is scheduled for unpublishing" is shown');
+
+  }
+}
