예제 #1
0
 /**
  * Test import with manual column mapping and custom column names
  */
 function testLoadWithCustomHeaderAndRelation()
 {
     $loader = new CsvBulkLoader('CsvBulkLoaderTest_Player');
     $filepath = Director::baseFolder() . '/sapphire/tests/dev/CsvBulkLoaderTest_PlayersWithCustomHeaderAndRelation.csv';
     $file = fopen($filepath, 'r');
     $compareCount = $this->getLineCount($file);
     fgetcsv($file);
     // pop header row
     $compareRow = fgetcsv($file);
     $loader->columnMap = array('first name' => 'FirstName', 'bio' => 'Biography', 'bday' => 'Birthday', 'teamtitle' => 'Team.Title', 'teamsize' => 'Team.TeamSize', 'salary' => 'Contract.Amount');
     $loader->hasHeaderRow = true;
     $loader->relationCallbacks = array('Team.Title' => array('relationname' => 'Team', 'callback' => 'getTeamByTitle'));
     $results = $loader->load($filepath);
     // Test that right amount of columns was imported
     $this->assertEquals(1, $results->Count(), 'Test correct count of imported data');
     // Test of augumenting existing relation (created by fixture)
     $testTeam = DataObject::get_one('CsvBulkLoaderTest_Team', null, null, 'Created DESC');
     $this->assertEquals('20', $testTeam->TeamSize, 'Augumenting existing has_one relation works');
     // Test of creating relation
     $testContract = DataObject::get_one('CsvBulkLoaderTest_PlayerContract');
     $testPlayer = Dataobject::get_one("CsvBulkLoaderTest_Player", "FirstName = 'John'");
     $this->assertEquals($testPlayer->ContractID, $testContract->ID, 'Creating new has_one relation works');
     // Test nested setting of relation properties
     $contractAmount = DBField::create('Currency', $compareRow[5])->RAW();
     $this->assertEquals($testPlayer->Contract()->Amount, $contractAmount, 'Setting nested values in a relation works');
     fclose($file);
 }
예제 #2
0
 function testDbDatetimeDifference()
 {
     if ($this->supportDbDatetime) {
         $query = 'SELECT ' . $this->adapter->datetimeDifferenceClause('1974-10-14 10:30:00', '1973-10-14 10:30:00');
         $result = DB::query($query)->value();
         $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->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->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->matchesRoughly($result, strtotime($lastedited) - strtotime($created), 'age of HomePage record in seconds since unix epoc');
     }
 }
예제 #3
0
 function testDbDatetimeDifference()
 {
     if ($this->supportDbDatetime) {
         $clause = $this->adapter->datetimeDifferenceClause('1974-10-14 10:30:00', '1973-10-14 10:30:00');
         $result = DB::query('SELECT ' . $clause)->value();
         $this->matchesRoughly($result / 86400, 365, '1974 - 1973 = 365 * 86400 sec');
         $clause = $this->adapter->datetimeDifferenceClause(date('Y-m-d H:i:s', strtotime('-15 seconds')), 'now');
         $result = DB::query('SELECT ' . $clause)->value();
         $this->matchesRoughly($result, -15, '15 seconds ago - now');
         $clause = $this->adapter->datetimeDifferenceClause('now', $this->adapter->datetimeIntervalClause('now', '+45 Minutes'));
         $result = DB::query('SELECT ' . $clause)->value();
         $this->matchesRoughly($result, -45 * 60, 'now - 45 minutes ahead');
         $query = new SQLQuery();
         $query->select($this->adapter->datetimeDifferenceClause('"LastEdited"', '"Created"') . ' AS "test"')->from('"DbDateTimeTest_Team"')->limit(1);
         $result = $query->execute()->value();
         $lastedited = Dataobject::get_one('DbDateTimeTest_Team')->LastEdited;
         $created = Dataobject::get_one('DbDateTimeTest_Team')->Created;
         $this->matchesRoughly($result, strtotime($lastedited) - strtotime($created), 'age of HomePage record in seconds since unix epoc');
     }
 }