Blame view

framework/tests/model/HasManyListTest.php 2.43 KB
0084d336   Administrator   Importers CRUD
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
  <?php
  
  class HasManyListTest extends SapphireTest {
  	
  	// Borrow the model from DataObjectTest
  	protected static $fixture_file = 'DataObjectTest.yml';
  
  	protected $extraDataObjects = array(
  		'DataObjectTest_Team',
  		'DataObjectTest_SubTeam',
  		'DataObjectTest_Player',
  	);
  	
  	public function testRelationshipEmptyOnNewRecords() {
  		// Relies on the fact that (unrelated) comments exist in the fixture file already
  		$newTeam = new DataObjectTest_Team(); // has_many Comments
  		$this->assertEquals(array(), $newTeam->Comments()->column('ID'));
  	}
  	
  	/**
  	 * Test that related objects can be removed from a relation
  	 */
  	public function testRemoveRelation() {
  		
  		// Check that expected teams exist
  		$list = DataObjectTest_Team::get();
  		$this->assertEquals(
  			array('Subteam 1', 'Subteam 2', 'Subteam 3', 'Team 1', 'Team 2', 'Team 3'),
  			$list->sort('Title')->column('Title')
  		);
  		
  		// Test that each team has the correct fans
  		$team1 = $this->objFromFixture('DataObjectTest_Team', 'team1');
  		$team2 = $this->objFromFixture('DataObjectTest_Team', 'team2');
  		$this->assertEquals(array('Bob', 'Joe'), $team1->Comments()->sort('Name')->column('Name'));
  		$this->assertEquals(array('Phil'), $team2->Comments()->sort('Name')->column('Name'));
  		
  		// Test that removing comments from unrelated team has no effect
  		$team1comment = $this->objFromFixture('DataObjectTest_TeamComment', 'comment1');
  		$team2comment = $this->objFromFixture('DataObjectTest_TeamComment', 'comment3');
  		$team1->Comments()->remove($team2comment);
  		$team2->Comments()->remove($team1comment);
  		$this->assertEquals(array('Bob', 'Joe'), $team1->Comments()->sort('Name')->column('Name'));
  		$this->assertEquals(array('Phil'), $team2->Comments()->sort('Name')->column('Name'));
  		$this->assertEquals($team1->ID, $team1comment->TeamID);
  		$this->assertEquals($team2->ID, $team2comment->TeamID);
  		
  		// Test that removing items from the related team resets the has_one relations on the fan
  		$team1comment = $this->objFromFixture('DataObjectTest_TeamComment', 'comment1');
  		$team2comment = $this->objFromFixture('DataObjectTest_TeamComment', 'comment3');
  		$team1->Comments()->remove($team1comment);
  		$team2->Comments()->remove($team2comment);
  		$this->assertEquals(array('Bob'), $team1->Comments()->sort('Name')->column('Name'));
  		$this->assertEquals(array(), $team2->Comments()->sort('Name')->column('Name'));
  		$this->assertEmpty($team1comment->TeamID);
  		$this->assertEmpty($team2comment->TeamID);
  	}
  
  }