123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691 |
- <?php
- /**
- * @file
- * Tests for Simplenews Scheduler.
- */
- /**
- * Class with common setup.
- *
- * Declares the module dependencies for the test.
- *
- * We need to use DrupalWebTestCase as our base class even for functional
- * testing, as the functions that we test rely on variable_get() which requires
- * a bootstrapped database.
- */
- class SimpleNewsSchedulerWebTestCase extends DrupalWebTestCase {
- /**
- * Overrides DrupalWebTestCase::setUp().
- *
- * @param $modules
- * Additional modules to enable for the test. simplenews_scheduler and
- * the dependencies are always enabled.
- */
- function setUp($modules = array()) {
- // Add our dependencies to the module list.
- $modules = array_merge(array('simplenews_scheduler'), $modules);
- parent::setUp($modules);
- // Set the site timezone to something visibly different from UTC, which
- // has daylight saving changes.
- variable_set('date_default_timezone', 'Europe/Kiev');
- date_default_timezone_set(drupal_get_user_timezone());
- }
- }
- /**
- * Test scheduled edition creation.
- */
- class SimpleNewsSchedulerNodeCreationTest extends SimpleNewsSchedulerWebTestCase {
- protected $privileged_user;
- /**
- * Provides information about this test.
- */
- public static function getInfo() {
- return array(
- 'name' => 'Newsletter generation test',
- 'description' => 'Testing generation of newsletters',
- 'group' => 'Simplenews Scheduler',
- );
- }
- /**
- * Declares the module dependencies for the test.
- */
- function setUp() {
- parent::setUp();
- $this->privileged_user = $this->drupalCreateUser(array(
- 'access content',
- 'administer nodes',
- 'create simplenews content',
- 'edit own simplenews content',
- 'send newsletter',
- 'send scheduled newsletters',
- 'overview scheduled newsletters',
- ));
- $this->drupalLogin($this->privileged_user);
- // Subscribe a user to simplenews.
- $categories = simplenews_categories_load_multiple();
- $this->mail = 'test@example.org';
- simplenews_subscribe_user($this->mail, key($categories), FALSE, 'test');
- }
- /**
- * Basic simplenews newsletter generation test
- * create a simplenews node,
- */
- function testNewsletterGeneration() {
- $edit = array();
- $title ="newsletter " . $this->randomName(8);
- $edit = array();
- $edit['title'] = $title;
- $edit["body[und][0][value]"] = $this->randomName(16);
- $this->drupalPost('node/add/simplenews', $edit, t('Save'));
- $this->assertText($title);
- preg_match('|node/(\d+)$|', $this->getUrl(), $matches);
- $node = node_load($matches[1]);
- // Make sure that the editions tab is not visible as long as it's not a
- // scheduled newsletter.
- $this->drupalGet("node/{$node->nid}/editions");
- $this->assertResponse(403, t('Editions tab not accessible'));
- // Now create the simplenews schedule configuration.
- $this->drupalGet("node/{$node->nid}/simplenews");
- $this->assertText(t("Send newsletter according to schedule"));
- $edit = array();
- $edit["simplenews[send]"] = '4';
- $edit["simplenews[scheduler][interval]"] = "hour";
- // Specify a start time 30 minutes in the past to be able to have a known
- // edition creation time that can be checked.
- $date = new DateTime();
- $date->sub(new DateInterval('PT30M'));
- $edit["simplenews[scheduler][start_date][year]"] = $date->format('Y');
- $edit["simplenews[scheduler][start_date][month]"] = $date->format('n');
- $edit["simplenews[scheduler][start_date][day]"] = $date->format('j');
- $edit["simplenews[scheduler][start_date][hour]"] = $date->format('G');
- $edit["simplenews[scheduler][start_date][minute]"] = $date->format('i');
- $edit["simplenews[scheduler][title]"] = "Custom title [site:name]";
- $this->drupalPost("node/{$node->nid}/simplenews", $edit, t('Submit'));
- // Make sure it knows no editions created yet.
- $this->drupalGet("node/{$node->nid}/editions");
- $this->assertText(t("No scheduled newsletter editions have been sent."));
- // Execute cron.
- drupal_cron_run();
- // See if it was created.
- $this->drupalGet("node/{$node->nid}/editions");
- $this->assertText("Custom title");
- $this->assertNoText(t("No scheduled newsletter editions have been sent."));
- $this->assertText($title); // original real node title
- // Go to node and verify creation time and token for custom title
- // @todo: make this real token integration
- $this->clickLink("Custom title ". variable_get('site_name', 'Drupal'));
- $this->assertText(t('This is a newsletter edititon. View the the master template of this newsletter here'));
- $this->assertText(t('Submitted by @name on @date', array('@name' => format_username($this->privileged_user), '@date' => format_date($date->getTimestamp()))));
- // Check sent mails.
- $mails = $this->drupalGetMails();
- $this->assertEqual(1, count($mails), t('Newsletter mail has been sent.'));
- $this->clickLink(t('Newsletter'));
- $this->assertText(t('This node is part of a scheduled newsletter configuration.'));
- $this->clickLink(t('here'));
- $this->assertEqual(url('node/' . $node->nid, array('absolute' => TRUE)), $this->getUrl());
- // Test the tab on a sent newsletter, schedule details should not be shown.
- $title ="newsletter " . $this->randomName(8);
- $edit = array();
- $edit['title'] = $title;
- $edit["body[und][0][value]"] = $this->randomName(16);
- $this->drupalPost('node/add/simplenews', $edit, t('Save'));
- $this->assertText($title);
- preg_match('|node/(\d+)$|', $this->getUrl(), $matches);
- $node = node_load($matches[1]);
- $edit = array();
- $edit["simplenews[send]"] = SIMPLENEWS_COMMAND_SEND_NOW;
- $this->drupalPost("node/{$node->nid}/simplenews", $edit, t('Submit'));
- $this->assertNoText(t('Schedule details'));
- // Check sent mails.
- $mails = $this->drupalGetMails();
- $this->assertEqual(1, count($mails), t('Newsletter mail has been sent.'));
- }
- }
- /**
- * Unit testing for monthly newsletter next run times.
- */
- class SimpleNewsSchedulerNextRunTimeTest extends SimpleNewsSchedulerWebTestCase {
- /**
- * Provides information about this test.
- */
- public static function getInfo() {
- return array(
- 'name' => 'Next run time: monthly',
- 'description' => 'Testing edition times for newsletters due every month and every 2 months.',
- 'group' => 'Simplenews Scheduler',
- );
- }
- /**
- * Test a frequency of 1 month.
- */
- function testNextRunTimeOneMonth() {
- // The start date of the edition.
- $this->edition_day = '05';
- $start_date = new DateTime("2012-01-{$this->edition_day} 12:00:00");
- // Fake newsletter parent data: sets the interval, start date, and frequency.
- $newsletter_parent_data = (object) array(
- 'nid' => 1,
- 'last_run' => 0,
- 'activated' => '1',
- 'send_interval' => 'month',
- 'interval_frequency' => '1',
- 'start_date' => $start_date->getTimestamp(),
- 'next_run' => $start_date->getTimestamp(), // Needs to be set manually when creating new records programmatically.
- 'stop_type' => '0',
- 'stop_date' => '0',
- 'stop_edition' => '0',
- 'php_eval' => '',
- 'title' => '[node:title] for [current-date:long]',
- );
- // Number of days to run for.
- $days = 370;
- // Index of the days we've done so far.
- $added_days = 0;
- // Iterate over days.
- $last_run_time = $start_date->getTimestamp();
- while ($added_days <= $days) {
- // Create today's date at noon and get the timestamp.
- $date = clone($start_date);
- $date->add(new DateInterval("P{$added_days}D"));
- $timestamp_noon = $date->getTimestamp();
- // Get the next run time from the API function we're testing.
- $next_run_time = simplenews_scheduler_calculate_next_run_time($newsletter_parent_data, $timestamp_noon);
- //debug($edition_time);
- if ($next_run_time != $last_run_time) {
- $offset = _simplenews_scheduler_make_time_offset($newsletter_parent_data->send_interval, $newsletter_parent_data->interval_frequency);
- $next_run_date = date_add(date_create(date('Y-m-d H:i:s', $last_run_time)), date_interval_create_from_date_string($offset));
- $this->assertEqual($next_run_date->getTimestamp(), $next_run_time, t('New next run timestamp has advanced by the expected offset of !offset.', array(
- '!offset' => $offset,
- )));
- $last_run_time = $next_run_time;
- }
- $this->assertTrue($timestamp_noon < $next_run_time, t('Next run time of !next-run is in the future relative to current time of !now.', array(
- '!next-run' => date("Y-n-d H:i:s", $next_run_time),
- '!now' => date("Y-n-d H:i:s", $timestamp_noon),
- )));
- $interval = $newsletter_parent_data->interval_frequency * 31 * 24 * 60 * 60;
- //$this->assertTrue($next_run_time - $timestamp_noon <= $interval, t('Next run timestamp is less than or exactly one month in the future.'));
- // Create a date object from the timestamp. The '@' makes the constructor
- // consider the string as a timestamp.
- $next_run_date = new DateTime(date('Y-m-d H:i:s', $last_run_time));
- $d = date_format($next_run_date, 'd');
- $this->assertEqual($next_run_date->format('d'), $this->edition_day, t('Next run timestamp is on same day of the month as the start date.'));
- $this->assertEqual($next_run_date->format('H:i:s'), '12:00:00', t('Next run timestamp is at the same time.'));
- $added_days++;
- } // while days
- }
- /**
- * Test a frequency of 2 months.
- */
- function testNextRunTimeTwoMonths() {
- // The start date of the edition.
- $this->edition_day = '05';
- $start_date = new DateTime("2012-01-{$this->edition_day} 12:00:00");
- // Fake newsletter parent data: sets the interval, start date, and frequency.
- $newsletter_parent_data = (object) array(
- 'nid' => 1,
- 'last_run' => 0,
- 'activated' => '1',
- 'send_interval' => 'month',
- 'interval_frequency' => '2',
- 'start_date' => $start_date->getTimestamp(),
- 'next_run' => $start_date->getTimestamp(), // Needs to be set manually when creating new records programmatically.
- 'stop_type' => '0',
- 'stop_date' => '0',
- 'stop_edition' => '0',
- 'php_eval' => '',
- 'title' => '[node:title] for [current-date:long]',
- );
- // Number of days to run for.
- $days = 370;
- // Index of the days we've done so far.
- $added_days = 0;
- // Iterate over days.
- while ($added_days <= $days) {
- // Create today's date at noon and get the timestamp.
- $date = clone($start_date);
- $date->add(new DateInterval("P{$added_days}D"));
- $timestamp_noon = $date->getTimestamp();
- // Get the next run time from the API function we're testing.
- $next_run_time = simplenews_scheduler_calculate_next_run_time($newsletter_parent_data, $timestamp_noon);
- //debug($edition_time);
- $this->assertTrue($timestamp_noon < $next_run_time, t('Next run time of !next-run is in the future relative to current time of !now.', array(
- '!next-run' => date("Y-n-d H:i:s", $next_run_time),
- '!now' => date("Y-n-d H:i:s", $timestamp_noon),
- )));
- $interval = $newsletter_parent_data->interval_frequency * 31 * 24 * 60 * 60;
- $this->assertTrue($next_run_time - $timestamp_noon <= $interval, t('Next run timestamp is less than or exactly two months in the future.'));
- // Create a date object from the timestamp. The '@' makes the constructor
- // consider the string as a timestamp.
- $next_run_date = new DateTime("@$next_run_time");
- $d = date_format($next_run_date, 'd');
- $this->assertEqual($next_run_date->format('d'), $this->edition_day, t('Next run timestamp is on same day of the month as the start date.'));
- $added_days++;
- } // while days
- }
- }
- /**
- * Unit testing for monthly newsletter edition times.
- */
- class SimpleNewsSchedulerEditionTimeTest extends SimpleNewsSchedulerWebTestCase {
- /**
- * Provides information about this test.
- */
- public static function getInfo() {
- return array(
- 'name' => 'Edition time: monthly',
- 'description' => 'Testing edition times for newsletters due every month and every 2 months.',
- 'group' => 'Simplenews Scheduler',
- );
- }
- /**
- * Test a frequency of 1 month.
- */
- function testEditionTimeOneMonth() {
- // The start date of the edition.
- $this->edition_day = '01';
- $start_date = new DateTime("2012-01-{$this->edition_day} 12:00:00");
- // Fake newsletter parent data: sets the interval, start date, and frequency.
- $newsletter_parent_data = (object) array(
- 'nid' => 1,
- 'last_run' => 0,
- 'activated' => '1',
- 'send_interval' => 'month',
- 'interval_frequency' => '1',
- 'start_date' => $start_date->getTimestamp(),
- 'stop_type' => '0',
- 'stop_date' => '0',
- 'stop_edition' => '0',
- 'php_eval' => '',
- 'title' => '[node:title] for [current-date:long]',
- );
- // Number of days to run for. Go just over one year.
- $days = 370;
- // Index of the days we've done so far.
- $added_days = 0;
- // Iterate over days.
- while ($added_days <= $days) {
- // Create today's date at noon and get the timestamp.
- $date = clone($start_date);
- $date->add(new DateInterval("P{$added_days}D"));
- $timestamp_noon = $date->getTimestamp();
- $edition_time = simplenews_scheduler_calculate_edition_time($newsletter_parent_data, $timestamp_noon);
- //debug($edition_time);
- // Expected edition time is always the {$this->edition_day}th of the month
- // at noon.
- $edition_time_formatted = date("Y-m-d H:i:s", $edition_time);
- $this_month = $date->format('Y-m');
- $expected_time_formatted = "{$this_month}-{$this->edition_day} 12:00:00";
- $this->assertEqual($edition_time_formatted, $expected_time_formatted, t("Edition time of !edition-time matches expected time of !edition-time-expected at time !now.", array(
- '!edition-time' => $edition_time_formatted,
- '!edition-time-expected' => $expected_time_formatted,
- '!now' => $date->format("Y-m-d H:i:s"),
- )));
- $added_days++;
- } // while days
- }
- /**
- * Test a frequency of 2 months.
- */
- function testEditionTimeTwoMonths() {
- // The start date of the edition.
- $this->edition_day = '01';
- $start_date = new DateTime("2012-01-{$this->edition_day} 12:00:00");
- // Fake newsletter parent data: sets the interval, start date, and frequency.
- $newsletter_parent_data = (object) array(
- 'nid' => 1,
- 'last_run' => 0,
- 'activated' => '1',
- 'send_interval' => 'month',
- 'interval_frequency' => '2',
- 'start_date' => $start_date->getTimestamp(),
- 'stop_type' => '0',
- 'stop_date' => '0',
- 'stop_edition' => '0',
- 'php_eval' => '',
- 'title' => '[node:title] for [current-date:long]',
- );
- // Number of days to run for. Go just over one year.
- $days = 370;
- // Index of the days we've done so far.
- $added_days = 0;
- // Iterate over days.
- while ($added_days <= $days) {
- // Create today's date at noon and get the timestamp.
- $date = clone($start_date);
- $date->add(new DateInterval("P{$added_days}D"));
- $timestamp_noon = $date->getTimestamp();
- $edition_time = simplenews_scheduler_calculate_edition_time($newsletter_parent_data, $timestamp_noon);
- //debug($edition_time);
- // Expected edition time is always the {$this->edition_day}th of the month
- // at noon.
- // Note here we use 'n' for the month to avoid having to pad.
- $edition_time_formatted = date("Y-n-d H:i:s", $edition_time);
- $this_year = $date->format('Y');
- $this_month = $date->format('n');
- // We start in January and run 2-monthly.
- // We want the number of elapsed months, module 2 (the frequency), to know
- // the remainder to subtract.
- $elapsed_mod = ($this_month - 1) % 2;
- $expected_month = $this_month - $elapsed_mod;
- $expected_time_formatted = "{$this_year}-{$expected_month}-{$this->edition_day} 12:00:00";
- $this->assertEqual($edition_time_formatted, $expected_time_formatted, t("Edition time of !edition-time matches expected time of !edition-time-expected at time !now.", array(
- '!edition-time' => $edition_time_formatted,
- '!edition-time-expected' => $expected_time_formatted,
- '!now' => $date->format("Y-m-d H:i:s"),
- )));
- $added_days++;
- } // while days
- }
- }
- /**
- * Unit testing for simplenews_scheduler_get_newsletters_due().
- */
- class SimpleNewsSchedulerEditionDueTest extends SimpleNewsSchedulerWebTestCase {
- protected $privileged_user;
- /**
- * Provides information about this test.
- */
- public static function getInfo() {
- return array(
- 'name' => 'Edition due test',
- 'description' => 'Functional tests for simplenews_scheduler_get_newsletters_due().',
- 'group' => 'Simplenews Scheduler',
- );
- }
- /**
- * Declares the module dependencies and create data for the test.
- */
- function setUp() {
- parent::setUp();
- $this->privileged_user = $this->drupalCreateUser(array(
- 'access content',
- 'administer nodes',
- 'create simplenews content',
- 'edit own simplenews content',
- 'send newsletter',
- 'send scheduled newsletters',
- 'overview scheduled newsletters',
- ));
- $this->drupalLogin($this->privileged_user);
- // The start date of the edition. This is on 5 January so that we get some
- // days in either month, and at at noon to keep things simple.
- $this->edition_day = '05';
- $start_date = new DateTime("2012-01-{$this->edition_day} 12:00:00");
- // Create a parent newsletter node.
- $node = (object) NULL;
- $node->type = 'simplenews';
- $node->title = 'Parent';
- $node->uid = 1;
- $node->status = 1;
- $node->language = 'und';
- // Safe to assume there is only one taxonomy term and it's the newsletter.
- $node->field_simplenews_term['und'][0]['tid'] = 1;
- // Workaround for http://drupal.org/node/1480258
- $node->nid = NULL;
- node_save($node);
- // Grumble grumble there's no node saving API in our module!
- // @see http://drupal.org/node/1480328 to clean this up.
- $node->simplenews_scheduler = (object) array(
- 'nid' => $node->nid,
- 'last_run' => 0,
- 'activated' => '1',
- 'send_interval' => 'month',
- 'interval_frequency' => '1',
- 'start_date' => $start_date->getTimestamp(),
- 'next_run' => $start_date->getTimestamp(), // Needs to be set manually when creating new records programmatically.
- 'stop_type' => '0',
- 'stop_date' => '0',
- 'stop_edition' => '0',
- 'php_eval' => '',
- 'title' => '[node:title] for [current-date:long]',
- );
- $record = (array) $node->simplenews_scheduler;
- $query = db_merge('simplenews_scheduler');
- $query->key(array(
- 'nid' => $record['nid'],
- ))
- ->fields($record)
- ->execute();
- // Store the node ID for the test to use.
- $this->parent_nid = $node->nid;
- }
- /**
- * Test simplenews_scheduler_get_newsletters_due().
- */
- function testEditionsDue() {
- // Get the node id of the parent newsletter node.
- $parent_nid = $this->parent_nid ;
- // But just check it exists for sanity.
- $this->drupalGet("node/$parent_nid");
- // Simulate cron running daily at half past 12 so that an edition due at
- // 12 noon should be picked up.
- $start_date = new DateTime("2012-01-01 12:00:00");
- $time_offsets = array(
- 'before' => "-1 hour",
- 'after' => "+1 hour",
- );
- // Number of days to run cron for.
- $days = 150;
- // Index of the days we've done so far.
- $added_days = 0;
- // Iterate over days.
- while ($added_days <= $days) {
- // Create today's date at noon and get the timestamp.
- $date = clone($start_date);
- $date->add(new DateInterval("P{$added_days}D"));
- $timestamp_noon = $date->getTimestamp();
- // We simulate running cron one hour before and one hour after noon.
- foreach ($time_offsets as $offset_key => $offset) {
- // Create a timestamp based on noon + the offset.
- // This gives us either 11:00 or 13:00 on the current day.
- $timestamp = strtotime($offset, $timestamp_noon);
- // debug("base: $timestamp_noon, off: $offset, result: $timestamp");
- // Get the list of newsletters due.
- $due = simplenews_scheduler_get_newsletters_due($timestamp);
- // An edition is due if it's 13:00 on the edition day.
- $formatted = date(DATE_RFC850, $timestamp);
- if ($offset_key == 'after' && date('d', $timestamp) == $this->edition_day) {
- $this->assertTrue(isset($due[$parent_nid]), "Edition due at day $added_days, $formatted, $timestamp");
- }
- else {
- $this->assertFalse(isset($due[$parent_nid]), "Edition not due at day $added_days, $formatted, $timestamp");
- }
- // Get some debug output to figure out what is going on in
- // simplenews_scheduler_get_newsletters_due().
- $intervals['hour'] = 3600;
- $intervals['day'] = 86400;
- $intervals['week'] = $intervals['day'] * 7;
- $intervals['month'] = $intervals['day'] * date_days_in_month(date('Y', $timestamp), date('m', $timestamp));
- if (isset($due[$parent_nid])) {
- // Output what we got back from the function.
- // debug($due);
- $newsletter_parent_data = $due[$parent_nid];
- $edition_time = simplenews_scheduler_calculate_edition_time($newsletter_parent_data, $timestamp);
- $eid = _simplenews_scheduler_new_edition($newsletter_parent_data->nid, $timestamp);
- // Output the last_run as a sanity check.
- $result = db_query("SELECT last_run FROM {simplenews_scheduler} WHERE nid = :nid", array(':nid' => $parent_nid));
- $last_run = $result->fetchField();
- $formatted = date(DATE_RFC850, $last_run);
- // debug("Last run: $formatted, $last_run");
- // Output the calculated edition time.
- $formatted = date(DATE_RFC850, $edition_time);
- // debug("Edition time: $formatted, $edition_time");
- // Check the edition time is 12:00.
- $this->assertEqual(date('H:i', $edition_time), '12:00', t('Edition time is at 12:00.'));
- // Fake sending it: update the 'last_run' for subsequent iterations.
- db_update('simplenews_scheduler')
- ->fields(array('last_run' => $timestamp))
- ->condition('nid', $parent_nid)
- ->execute();
- // Update the edition record.
- simplenews_scheduler_scheduler_update($newsletter_parent_data, $timestamp);
- // Check the node exists.
- $this->drupalGet("node/$eid");
- } // handling the request for a new edition
- } // foreach offset timestamp
- // Increment our counter.
- $added_days++;
- } // foreach day
- }
- }
- /**
- * Test edition time around DST changes.
- *
- * Test that simplenews_scheduler_calculate_edition_time() returns an edition
- * timestamp whose time in the local timezone remains the same after the
- * timezone changes over to Daylight Saving Time.
- */
- class SimpleNewsSchedulerDaylightSavingSwitchTest extends SimpleNewsSchedulerWebTestCase {
- protected $privileged_user;
- /**
- * Provides information about this test.
- */
- public static function getInfo() {
- return array(
- 'name' => 'Daylight Saving Time',
- 'description' => 'Functional tests for DST changes.',
- 'group' => 'Simplenews Scheduler',
- );
- }
- /**
- * Test edition time after DST changes for a monthly newsletter.
- *
- * @todo: generalize this for other intervals.
- */
- function testDSTMonthly() {
- $timezone_name = date_default_timezone();
- //debug($timezone_name);
- // Create a last run time before DST begins, and a now time after.
- // Use date_create() rather than strtotime so that we create a date at the
- // given time *in the current timezone* rather than UTC.
- $last_run_date = new DateTime("01-Mar-12 12:00:00");
- $now_date = date_create("05-Apr-12 12:00:00");
- //debug('last run date TZ: ' . $last_run_date->getTimezone()->getName());
- //debug('now date TZ: ' . $now_date->getTimezone()->getName());
- // Fake up newsletter data.
- $newsletter_parent_data = (object) array(
- 'last_run' => $last_run_date->getTimestamp(),
- 'send_interval' => 'month',
- 'interval_frequency' => 1,
- );
- // Get the edition time.
- $edition_time = simplenews_scheduler_calculate_edition_time($newsletter_parent_data, $now_date->getTimestamp());
- $edition_date = date_create('@' . $edition_time);
- //debug($edition_date->format(DATE_ATOM));
- // Format the edition time.
- $edition_time_formatted = format_date($edition_time, 'custom', DATE_ATOM);
- $edition_hour_formatted = format_date($edition_time, 'custom', 'H:i');
- $this->assertEqual($edition_hour_formatted, '12:00', t('Edition time is at 12:00 in the local timezone; full edition time is %time.', array(
- '%time' => $edition_time_formatted,
- )));
- }
- }
|