Example #1
0
 public function testAddingWithMultipleForeignKeys()
 {
     $newPlayer = new DataObjectTest_Player();
     $newPlayer->write();
     $team1 = $this->objFromFixture('DataObjectTest_Team', 'team1');
     $team2 = $this->objFromFixture('DataObjectTest_Team', 'team2');
     $playersTeam1Team2 = DataObjectTest_Team::get()->relation('Players')->setForeignID(array($team1->ID, $team2->ID));
     $playersTeam1Team2->add($newPlayer);
     $this->assertEquals(array($team1->ID, $team2->ID), $newPlayer->Teams()->sort('Title')->column('ID'));
 }
Example #2
0
 public function testAddingExistingDoesntRemoveExtraFields()
 {
     $player = new DataObjectTest_Player();
     $player->write();
     $team1 = $this->objFromFixture('DataObjectTest_Team', 'team1');
     $team1->Players()->add($player, array('Position' => 'Captain'));
     $this->assertEquals(array('Position' => 'Captain'), $team1->Players()->getExtraData('Teams', $player->ID), 'Writes extrafields');
     $team1->Players()->add($player);
     $this->assertEquals(array('Position' => 'Captain'), $team1->Players()->getExtraData('Teams', $player->ID), 'Retains extrafields on subsequent adds with NULL fields');
     $team1->Players()->add($player, array('Position' => 'Defense'));
     $this->assertEquals(array('Position' => 'Defense'), $team1->Players()->getExtraData('Teams', $player->ID), 'Updates extrafields on subsequent adds with fields');
     $team1->Players()->add($player, array('Position' => null));
     $this->assertEquals(array('Position' => null), $team1->Players()->getExtraData('Teams', $player->ID), 'Allows clearing of extrafields on subsequent adds');
 }
 public function testGetIterator()
 {
     $list = new PaginatedList(new ArrayList(array(new DataObject(array('Num' => 1)), new DataObject(array('Num' => 2)), new DataObject(array('Num' => 3)), new DataObject(array('Num' => 4)), new DataObject(array('Num' => 5)))));
     $list->setPageLength(2);
     $this->assertDOSEquals(array(array('Num' => 1), array('Num' => 2)), $list->getIterator());
     $list->setCurrentPage(2);
     $this->assertDOSEquals(array(array('Num' => 3), array('Num' => 4)), $list->getIterator());
     $list->setCurrentPage(3);
     $this->assertDOSEquals(array(array('Num' => 5)), $list->getIterator());
     $list->setCurrentPage(999);
     $this->assertDOSEquals(array(), $list->getIterator());
     $players = DataObjectTest_Player::get();
     $list = new PaginatedList($players);
     $list->setPageLength(1);
     $list->getIterator();
     $this->assertEquals(4, $list->getTotalItems(), 'Getting an iterator should not trim the list to the page length.');
 }
 function testManyManyExtraFields()
 {
     $player = $this->objFromFixture('DataObjectTest_Player', 'player1');
     $team = $this->objFromFixture('DataObjectTest_Team', 'team1');
     // Extra fields are immediately available on the Team class (defined in $many_many_extraFields)
     $teamExtraFields = $team->many_many_extraFields('Players');
     $this->assertEquals($teamExtraFields, array('Position' => 'Varchar(100)'));
     // We'll have to go through the relation to get the extra fields on Player
     $playerExtraFields = $player->many_many_extraFields('Teams');
     $this->assertEquals($playerExtraFields, array('Position' => 'Varchar(100)'));
     // Iterate through a many-many relationship and confirm that extra fields are included
     $newTeam = new DataObjectTest_Team();
     $newTeam->Title = "New team";
     $newTeam->write();
     $newTeamID = $newTeam->ID;
     $newPlayer = new DataObjectTest_Player();
     $newPlayer->FirstName = "Sam";
     $newPlayer->Surname = "Minnee";
     $newPlayer->write();
     // The idea of Sam as a prop is essentially humourous.
     $newTeam->Players()->add($newPlayer, array("Position" => "Prop"));
     // Requery and uncache everything
     $newTeam->flushCache();
     $newTeam = DataObject::get_by_id('DataObjectTest_Team', $newTeamID);
     // Check that the Position many_many_extraField is extracted.
     $player = $newTeam->Players()->First();
     $this->assertEquals('Sam', $player->FirstName);
     $this->assertEquals("Prop", $player->Position);
     // Check that ordering a many-many relation by an aggregate column doesn't fail
     $player = $this->objFromFixture('DataObjectTest_Player', 'player2');
     $player->Teams("", "count(DISTINCT \"DataObjectTest_Team_Players\".\"DataObjectTest_PlayerID\") DESC");
 }
Example #5
0
 public function testFilterOnImplicitJoin()
 {
     // Many to many
     $list = DataObjectTest_Team::get()->filter('Players.FirstName', array('Captain', 'Captain 2'));
     $this->assertEquals(2, $list->count());
     // Has many
     $list = DataObjectTest_Team::get()->filter('Comments.Name', array('Joe', 'Phil'));
     $this->assertEquals(2, $list->count());
     // Has one
     $list = DataObjectTest_Player::get()->filter('FavouriteTeam.Title', 'Team 1');
     $this->assertEquals(1, $list->count());
     $this->assertEquals('007', $list->first()->ShirtNumber);
 }
Example #6
0
 public function testLateStaticBindingStyle()
 {
     // Confirm that DataObjectTest_Player::get() operates as excepted
     $this->assertEquals(4, DataObjectTest_Player::get()->Count());
     $this->assertInstanceOf('DataObjectTest_Player', DataObjectTest_Player::get()->First());
     // You can't pass arguments to LSB syntax - use the DataList methods instead.
     $this->setExpectedException('InvalidArgumentException');
     DataObjectTest_Player::get(null, "\"ID\" = 1");
 }
 public function testRemoveAll()
 {
     $first = new DataObjectTest_Team();
     $first->write();
     $second = new DataObjectTest_Team();
     $second->write();
     $firstPlayers = $first->Players();
     $secondPlayers = $second->Players();
     $a = new DataObjectTest_Player();
     $a->ShirtNumber = 'a';
     $a->write();
     $b = new DataObjectTest_Player();
     $b->ShirtNumber = 'b';
     $b->write();
     $firstPlayers->add($a);
     $firstPlayers->add($b);
     $secondPlayers->add($a);
     $secondPlayers->add($b);
     $this->assertEquals(array('a', 'b'), $firstPlayers->sort('ShirtNumber')->column('ShirtNumber'));
     $this->assertEquals(array('a', 'b'), $secondPlayers->sort('ShirtNumber')->column('ShirtNumber'));
     $firstPlayers->removeAll();
     $this->assertEquals(0, count($firstPlayers));
     $this->assertEquals(2, count($secondPlayers));
     $firstPlayers->removeAll();
     $firstPlayers->add($a);
     $firstPlayers->add($b);
     $this->assertEquals(array('a', 'b'), $firstPlayers->sort('ShirtNumber')->column('ShirtNumber'));
     $firstPlayers->filter('ShirtNumber', 'b')->removeAll();
     $this->assertEquals(array('a'), $firstPlayers->column('ShirtNumber'));
     $this->assertEquals(array('a', 'b'), $secondPlayers->sort('ShirtNumber')->column('ShirtNumber'));
     $this->assertNotNull(DataObjectTest_Player::get()->byID($a->ID));
     $this->assertNotNull(DataObjectTest_Player::get()->byID($b->ID));
 }