silverstripe-framework/tests/model/DateTest.php
Fred Condo 5954774530 BUGFIX: Use UTC consistently across all tests for date/time calculations
This ensures that tests will not pass or fail based on whether the test
machine is on NZ time.

This partially reverts df050eda5d, which has
already been merged. Instead of finding tests that use date calculations, we
are now setting the default time zone in SapphireTest so it will apply to the
whole test suite and any future tests.

Adjust expected values in certain tests for UTC, where the expected values had
previously been expressed in NZ time.

When creating a temp DB for test fixtures, create the DB connection with
timezone UTC.
2012-03-27 10:29:07 -07:00

128 lines
4.5 KiB
PHP

<?php
/**
* @package sapphire
* @subpackage tests
*/
class DateTest extends SapphireTest {
protected $originalTZ;
function setUp() {
// Set timezone to support timestamp->date conversion.
// We can't use date_default_timezone_set() as its not supported prior to PHP 5.2
if (version_compare(PHP_VERSION, '5.2.0', '<')) {
$this->originalTZ = ini_get('date.timezone');
ini_set('date.timezone', 'Pacific/Auckland');
} else {
$this->originalTZ = date_default_timezone_get();
date_default_timezone_set('Pacific/Auckland');
}
parent::setUp();
}
function tearDown() {
if(version_compare(PHP_VERSION, '5.2.0', '<') ){
ini_set('date.timezone',$this->originalTZ);
} else {
date_default_timezone_set($this->originalTZ);
}
parent::tearDown();
}
function testNiceDate() {
$this->assertEquals('31/03/2008', DBField::create('Date', 1206968400)->Nice(),
"Date->Nice() works with timestamp integers"
);
$this->assertEquals('30/03/2008', DBField::create('Date', 1206882000)->Nice(),
"Date->Nice() works with timestamp integers"
);
$this->assertEquals('31/03/2008', DBField::create('Date', '1206968400')->Nice(),
"Date->Nice() works with timestamp strings"
);
$this->assertEquals('30/03/2008', DBField::create('Date', '1206882000')->Nice(),
"Date->Nice() works with timestamp strings"
);
$this->assertEquals('04/03/2003', DBField::create('Date', '4/3/03')->Nice(),
"Date->Nice() works with D/M/YY format"
);
$this->assertEquals('04/03/2003', DBField::create('Date', '04/03/03')->Nice(),
"Date->Nice() works with DD/MM/YY format"
);
$this->assertEquals('04/03/2003', DBField::create('Date', '4/3/03')->Nice(),
"Date->Nice() works with D/M/YY format"
);
$this->assertEquals('04/03/2003', DBField::create('Date', '4/03/03')->Nice(),
"Date->Nice() works with D/M/YY format"
);
$this->assertEquals('04/03/2003', DBField::create('Date', '4/3/2003')->Nice(),
"Date->Nice() works with D/M/YYYY format"
);
$this->assertEquals('04/03/2003', DBField::create('Date', '4-3-2003')->Nice(),
"Date->Nice() works with D-M-YYYY format"
);
$this->assertEquals('04/03/2003', DBField::create('Date', '2003-03-04')->Nice(),
"Date->Nice() works with YYYY-MM-DD format"
);
$this->assertEquals('04/03/2003', DBField::create('Date', '04/03/2003')->Nice(),
"Date->Nice() works with DD/MM/YYYY format"
);
$this->assertEquals('04/03/2003', DBField::create('Date', '04-03-2003')->Nice(),
"Date->Nice() works with DD/MM/YYYY format"
);
}
function testLongDate() {
$this->assertEquals('31 March 2008', DBField::create('Date', 1206968400)->Long(),
"Date->Long() works with numeric timestamp"
);
$this->assertEquals('31 March 2008', DBField::create('Date', '1206968400')->Long(),
"Date->Long() works with string timestamp"
);
$this->assertEquals('30 March 2008', DBField::create('Date', 1206882000)->Long(),
"Date->Long() works with numeric timestamp"
);
$this->assertEquals('30 March 2008', DBField::create('Date', '1206882000')->Long(),
"Date->Long() works with numeric timestamp"
);
$this->assertEquals('3 April 2003', DBField::create('Date', '2003-4-3')->Long(),
"Date->Long() works with YYYY-M-D"
);
$this->assertEquals('3 April 2003', DBField::create('Date', '3/4/2003')->Long(),
"Date->Long() works with D/M/YYYY"
);
}
function testSetNullAndZeroValues() {
$date = DBField::create('Date', '');
$this->assertNull($date->getValue(), 'Empty string evaluates to NULL');
$date = DBField::create('Date', null);
$this->assertNull($date->getValue(), 'NULL is set as NULL');
$date = DBField::create('Date', false);
$this->assertNull($date->getValue(), 'Boolean FALSE evaluates to NULL');
$date = DBField::create('Date', array());
$this->assertNull($date->getValue(), 'Empty array evaluates to NULL');
$date = DBField::create('Date', '0');
$this->assertEquals('1970-01-01', $date->getValue(), 'Zero is UNIX epoch date');
$date = DBField::create('Date', 0);
$this->assertEquals('1970-01-01', $date->getValue(), 'Zero is UNIX epoch date');
}
function testDayOfMonth() {
$date = DBField::create('Date', '2000-10-10');
$this->assertEquals('10', $date->DayOfMonth());
$this->assertEquals('10th', $date->DayOfMonth(true));
$range = $date->RangeString(DBField::create('Date', '2000-10-20'));
$this->assertEquals('10 - 20 Oct 2000', $range);
$range = $date->RangeString(DBField::create('Date', '2000-10-20'), true);
$this->assertEquals('10th - 20th Oct 2000', $range);
}
}