diff --git a/tests/DbDatetimeTest.php b/tests/DbDatetimeTest.php index 341477b..f627965 100644 --- a/tests/DbDatetimeTest.php +++ b/tests/DbDatetimeTest.php @@ -1,44 +1,54 @@ assertTrue(abs($time1-$time2)<$allowedDifference, $comment . " ($date1, $date2)"); + } + + private function getDbNow() { + $query = 'SELECT ' . $this->adapter->formattedDatetimeClause('now', '%U'); + return DB::query($query)->value(); + } function setUp() { parent::setUp(); $this->adapter = DB::getConn(); $this->supportDbDatetime = method_exists($this->adapter, 'datetimeIntervalClause'); } - - function testIfWebserverInSyncWithDbServer() { - if($this->supportDbDatetime) { - $query = 'SELECT ' . $this->adapter->formattedDatetimeClause('now', '%Y-%m-%d %H:%i:%s'); - $result = DB::query($query)->value(); - $this->assertEquals($result, date('Y-m-d H:i:s')); - } - } function testCorrectNow() { if($this->supportDbDatetime) { $query = 'SELECT ' . $this->adapter->formattedDatetimeClause('now', '%U'); $result = DB::query($query)->value(); - $this->assertEquals($result, time()); + $this->assertRegExp('/^\d*$/', $result); + $this->assertTrue($result>0); } } function testDbDatetimeFormat() { if($this->supportDbDatetime) { - $query = 'SELECT ' . $this->adapter->formattedDatetimeClause('1973-10-14 10:30:00', '%H:%i, %d/%m/%Y'); $result = DB::query($query)->value(); - $this->assertEquals($result, date('H:i, d/m/Y', strtotime('1973-10-14 10:30:00')), 'nice literal time'); + $this->matchesRoughly($result, date('H:i, d/m/Y', strtotime('1973-10-14 10:30:00')), 'nice literal time'); $query = 'SELECT ' . $this->adapter->formattedDatetimeClause('now', '%d'); $result = DB::query($query)->value(); - $this->assertEquals($result, date('d'), 'todays day'); + $this->matchesRoughly($result, date('d', $this->getDbNow()), 'todays day'); $query = 'SELECT ' . $this->adapter->formattedDatetimeClause('"Created"', '%U') . ' AS test FROM "SiteTree" WHERE "URLSegment" = \'home\''; $result = DB::query($query)->value(); - $this->assertEquals($result, date('U', strtotime(Dataobject::get_one('SiteTree',"\"URLSegment\" = 'home'")->Created)), 'SiteTree[home]->Created as timestamp'); - + $this->matchesRoughly($result, strtotime(Dataobject::get_one('SiteTree',"\"URLSegment\" = 'home'")->Created), 'SiteTree[home]->Created as timestamp'); } } @@ -47,15 +57,15 @@ class DbDatetimeTest extends FunctionalTest { $query = 'SELECT ' . $this->adapter->datetimeIntervalClause('1973-10-14 10:30:00', '+18 Years'); $result = DB::query($query)->value(); - $this->assertEquals($result, '1991-10-14 10:30:00', 'add 18 years'); + $this->matchesRoughly($result, '1991-10-14 10:30:00', 'add 18 years'); $query = 'SELECT ' . $this->adapter->datetimeIntervalClause('now', '+1 Day'); $result = DB::query($query)->value(); - $this->assertEquals($result, date('Y-m-d H:i:s', strtotime('+1 Day')), 'tomorrow'); + $this->matchesRoughly($result, date('Y-m-d H:i:s', strtotime('+1 Day', $this->getDbNow())), 'tomorrow'); $query = 'SELECT ' . $this->adapter->datetimeIntervalClause('"Created"', '-15 Minutes') . ' AS "test" FROM "SiteTree" WHERE "URLSegment" = \'home\''; $result = DB::query($query)->value(); - $this->assertEquals($result, date('Y-m-d H:i:s', strtotime(Dataobject::get_one('SiteTree',"\"URLSegment\" = 'home'")->Created) - 900), '15 Minutes before creating SiteTree[home]'); + $this->matchesRoughly($result, date('Y-m-d H:i:s', strtotime(Dataobject::get_one('SiteTree',"\"URLSegment\" = 'home'")->Created) - 900), '15 Minutes before creating SiteTree[home]'); } } @@ -65,21 +75,21 @@ class DbDatetimeTest extends FunctionalTest { $query = 'SELECT ' . $this->adapter->datetimeDifferenceClause('1974-10-14 10:30:00', '1973-10-14 10:30:00'); $result = DB::query($query)->value(); - $this->assertEquals($result/86400, 365, '1974 - 1973 = 365 * 86400 sec'); + $this->matchesRoughly($result/86400, 365, '1974 - 1973 = 365 * 86400 sec'); $query = 'SELECT ' . $this->adapter->datetimeDifferenceClause(date('Y-m-d H:i:s', strtotime('-15 seconds')), 'now'); $result = DB::query($query)->value(); - $this->assertEquals($result, -15, '15 seconds ago - now'); + $this->matchesRoughly($result, -15, '15 seconds ago - now'); $query = 'SELECT ' . $this->adapter->datetimeDifferenceClause('now', $this->adapter->datetimeIntervalClause('now', '+45 Minutes')); $result = DB::query($query)->value(); - $this->assertEquals($result, -45 * 60, 'now - 45 minutes ahead'); + $this->matchesRoughly($result, -45 * 60, 'now - 45 minutes ahead'); $query = 'SELECT ' . $this->adapter->datetimeDifferenceClause('"LastEdited"', '"Created"') . ' AS "test" FROM "SiteTree" WHERE "URLSegment" = \'home\''; $result = DB::query($query)->value(); $lastedited = Dataobject::get_one('SiteTree',"\"URLSegment\" = 'home'")->LastEdited; $created = Dataobject::get_one('SiteTree',"\"URLSegment\" = 'home'")->Created; - $this->assertEquals($result, strtotime($lastedited) - strtotime($created), 'age of HomePage record in seconds since unix epoc'); + $this->matchesRoughly($result, strtotime($lastedited) - strtotime($created), 'age of HomePage record in seconds since unix epoc'); } } diff --git a/tests/DbDatetimeTest.yml b/tests/DbDatetimeTest.yml new file mode 100644 index 0000000..4a70837 --- /dev/null +++ b/tests/DbDatetimeTest.yml @@ -0,0 +1,4 @@ +Page: + first: + Title: Home page + URLSegment: home \ No newline at end of file