diff --git a/tests/src/Unit/ConsecutiveRecurringDateTest.php b/tests/src/Unit/ConsecutiveRecurringDateTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..11a0ce08e06b0fc51235d27348f21e2c86fd3958
--- /dev/null
+++ b/tests/src/Unit/ConsecutiveRecurringDateTest.php
@@ -0,0 +1,107 @@
+<?php
+
+namespace Drupal\Tests\recurring_events\Unit;
+
+use Drupal\recurring_events\Plugin\Field\FieldType\ConsecutiveRecurringDate;
+use Drupal\Core\Datetime\DrupalDateTime;
+use Drupal\Core\DependencyInjection\ContainerBuilder;
+use Drupal\Tests\UnitTestCase;
+
+/**
+ * @coversDefaultClass \Drupal\recurring_events\Plugin\Field\FieldType\ConsecutiveRecurringDate
+ * @group recurring_events
+ */
+class ConsecutiveRecurringDateTest extends UnitTestCase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setUp() {
+    parent::setUp();
+    require_once 'includes/OverriddenGlobalFunctions.php';
+
+    $container = new ContainerBuilder();
+    \Drupal::setContainer($container);
+
+    $language_manager_mock = $this->getMockBuilder('Drupal\\Core\\Language\\LanguageManagerInterface')
+      ->disableOriginalConstructor()
+      ->getMock();
+    $language_mock = $this->createMock('Drupal\\Core\\Language\\LanguageInterface');
+
+    $language_manager_mock->expects($this->any())
+      ->method('getCurrentLanguage')
+      ->will($this->returnValue($language_mock));
+
+    $container->set('language_manager', $language_manager_mock);
+  }
+
+  /**
+   * Tests ConsecutiveRecurringDate::findDailyDatesBetweenDates().
+   */
+  public function testFindDailyDatesBetweenDates() {
+    $start_date = new DrupalDateTime('2019-01-01 00:00:00');
+    $end_date = new DrupalDateTime('2019-01-07 00:00:00');
+
+    $expected_dates = $dates = [];
+
+    $expected_date_objects = [
+      new DrupalDateTime('2019-01-01 00:00:00'),
+      new DrupalDateTime('2019-01-02 00:00:00'),
+      new DrupalDateTime('2019-01-03 00:00:00'),
+      new DrupalDateTime('2019-01-04 00:00:00'),
+      new DrupalDateTime('2019-01-05 00:00:00'),
+      new DrupalDateTime('2019-01-06 00:00:00'),
+      new DrupalDateTime('2019-01-07 00:00:00'),
+    ];
+
+    $date_objects = ConsecutiveRecurringDate::findDailyDatesBetweenDates($start_date, $end_date);
+
+    foreach ($expected_date_objects as $date) {
+      $expected_dates[] = $date->format('r');
+    }
+
+    foreach ($date_objects as $date) {
+      $dates[] = $date->format('r');
+    }
+
+    $this->assertSame($expected_dates, $dates);
+  }
+
+  /**
+   * Tests ConsecutiveRecurringDate::findSlotsBetweenTimes().
+   */
+  public function testFindSlotsBetweenTimes() {
+    $start_date = new DrupalDateTime('2019-01-01 00:00:00');
+
+    $form_data = [
+      'end_time' => '01:00:00',
+      'duration' => '10',
+      'duration_units' => 'minute',
+      'buffer' => '5',
+      'buffer_units' => 'minute',
+    ];
+
+    $expected_dates = $dates = [];
+
+    $expected_date_objects = [
+      new DrupalDateTime('2019-01-01 00:00:00'),
+      new DrupalDateTime('2019-01-01 00:15:00'),
+      new DrupalDateTime('2019-01-01 00:30:00'),
+      new DrupalDateTime('2019-01-01 00:45:00'),
+      new DrupalDateTime('2019-01-01 01:00:00'),
+    ];
+
+    $date_objects = ConsecutiveRecurringDate::findSlotsBetweenTimes($start_date, $form_data);
+
+    foreach ($expected_date_objects as $date) {
+      $expected_dates[] = $date->format('r');
+    }
+
+    foreach ($date_objects as $date) {
+      $dates[] = $date->format('r');
+    }
+
+    $this->assertSame($expected_dates, $dates);
+  }
+
+}
diff --git a/tests/src/Unit/includes/OverriddenGlobalFunctions.php b/tests/src/Unit/includes/OverriddenGlobalFunctions.php
new file mode 100644
index 0000000000000000000000000000000000000000..b013e40042ece78a4d61c32ace39b4e06a3570de
--- /dev/null
+++ b/tests/src/Unit/includes/OverriddenGlobalFunctions.php
@@ -0,0 +1,20 @@
+<?php
+
+/**
+ * @file
+ * Includes some overridden global functions.
+ */
+
+if (!function_exists('drupal_get_user_timezone')) {
+
+  /**
+   * Overrides global drupal_get_user_timezone if not exists.
+   *
+   * @return string
+   *   Timezone mocked.
+   */
+  function drupal_get_user_timezone() {
+    return @date_default_timezone_get();
+  }
+
+}