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(); + } + +}