Add tests for sorting HasManyList

This commit is contained in:
Robbie Averill 2018-09-27 17:09:24 +02:00
parent 3321c6b39d
commit c7d522ff6d
3 changed files with 58 additions and 21 deletions

View File

@ -11,17 +11,16 @@ use SilverStripe\ORM\Tests\HasManyListTest\Employee;
class HasManyListTest extends SapphireTest
{
// Borrow the model from DataObjectTest
protected static $fixture_file = [
'DataObjectTest.yml', // Borrow the model from DataObjectTest
'HasManyListTest.yml',
];
public static $extra_data_objects = array(
public static $extra_data_objects = [
Company::class,
Employee::class,
CompanyCar::class,
);
];
public static function getExtraDataObjects()
{
@ -36,7 +35,7 @@ class HasManyListTest extends SapphireTest
{
// Relies on the fact that (unrelated) comments exist in the fixture file already
$newTeam = new Team(); // has_many Comments
$this->assertEquals(array(), $newTeam->Comments()->column('ID'));
$this->assertEquals([], $newTeam->Comments()->column('ID'));
}
/**
@ -48,23 +47,23 @@ class HasManyListTest extends SapphireTest
// Check that expected teams exist
$list = Team::get();
$this->assertEquals(
array('Subteam 1', 'Subteam 2', 'Subteam 3', 'Team 1', 'Team 2', 'Team 3'),
['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::class, 'team1');
$team2 = $this->objFromFixture(DataObjectTest\Team::class, 'team2');
$this->assertEquals(array('Bob', 'Joe'), $team1->Comments()->sort('Name')->column('Name'));
$this->assertEquals(array('Phil'), $team2->Comments()->sort('Name')->column('Name'));
$this->assertEquals(['Bob', 'Joe'], $team1->Comments()->sort('Name')->column('Name'));
$this->assertEquals(['Phil'], $team2->Comments()->sort('Name')->column('Name'));
// Test that removing comments from unrelated team has no effect
$team1comment = $this->objFromFixture(DataObjectTest\TeamComment::class, 'comment1');
$team2comment = $this->objFromFixture(DataObjectTest\TeamComment::class, '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(['Bob', 'Joe'], $team1->Comments()->sort('Name')->column('Name'));
$this->assertEquals(['Phil'], $team2->Comments()->sort('Name')->column('Name'));
$this->assertEquals($team1->ID, $team1comment->TeamID);
$this->assertEquals($team2->ID, $team2comment->TeamID);
@ -73,9 +72,45 @@ class HasManyListTest extends SapphireTest
$team2comment = $this->objFromFixture(DataObjectTest\TeamComment::class, '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->assertEquals(['Bob'], $team1->Comments()->sort('Name')->column('Name'));
$this->assertEquals([], $team2->Comments()->sort('Name')->column('Name'));
$this->assertEmpty($team1comment->TeamID);
$this->assertEmpty($team2comment->TeamID);
}
public function testDefaultSortIsUsedOnList()
{
/** @var Company $company */
$company = $this->objFromFixture(Company::class, 'silverstripe');
$this->assertListEquals([
['Make' => 'Ferrari'],
['Make' => 'Jaguar'],
['Make' => 'Lamborghini'],
], $company->CompanyCars());
}
public function testCanBeSortedDescending()
{
/** @var Company $company */
$company = $this->objFromFixture(Company::class, 'silverstripe');
$this->assertListEquals([
['Make' => 'Lamborghini'],
['Make' => 'Jaguar'],
['Make' => 'Ferrari'],
], $company->CompanyCars()->sort('"Make" DESC'));
}
public function testSortByModel()
{
/** @var Company $company */
$company = $this->objFromFixture(Company::class, 'silverstripe');
$this->assertListEquals([
['Model' => 'Countach'],
['Model' => 'E Type'],
['Model' => 'F40'],
], $company->CompanyCars()->sort('"Model" ASC'));
}
}

View File

@ -1,26 +1,26 @@
SilverStripe\ORM\Tests\DataObjectTest\Company:
SilverStripe\ORM\Tests\HasManyListTest\Company:
silverstripe:
Name: 'SilverStripe Ltd'
SilverStripe\ORM\Tests\HasManyListTest\Employee:
john:
Name: 'John Smith'
Company: =>SilverStripe\ORM\Tests\DataObjectTest\Company.silverstripe
Company: =>SilverStripe\ORM\Tests\HasManyListTest\Company.silverstripe
jenny:
Name: 'Jenny Smith'
Company: =>SilverStripe\ORM\Tests\DataObjectTest\Company.silverstripe
Company: =>SilverStripe\ORM\Tests\HasManyListTest\Company.silverstripe
SilverStripe\ORM\Tests\HasManyListTest\CompanyCar:
jaguar:
Make: 'Jaguar'
Model: 'E Type'
User: =>SilverStripe\ORM\Tests\HasManyListTest\Employee.john
Company: =>SilverStripe\ORM\Tests\DataObjectTest\Company.silverstripe
Company: =>SilverStripe\ORM\Tests\HasManyListTest\Company.silverstripe
ferrari:
Make: 'Ferrari'
Model: 'F40'
User: =>SilverStripe\ORM\Tests\HasManyListTest\Employee.jenny
Company: =>SilverStripe\ORM\Tests\DataObjectTest\Company.silverstripe
Company: =>SilverStripe\ORM\Tests\HasManyListTest\Company.silverstripe
lamborghini:
Make: 'Lamborghini'
Model: 'Countach'
User: =>SilverStripe\ORM\Tests\HasManyListTest\Employee.jenny
Company: =>SilverStripe\ORM\Tests\DataObjectTest\Company.silverstripe
Company: =>SilverStripe\ORM\Tests\HasManyListTest\Company.silverstripe

View File

@ -7,13 +7,15 @@ use SilverStripe\ORM\DataObject;
class CompanyCar extends DataObject implements TestOnly
{
private static $db = array(
private static $db = [
'Make' => 'Varchar(100)',
'Model' => 'Varchar(100)',
);
];
private static $has_one = array(
private static $has_one = [
'User' => Employee::class,
'Company' => Company::class,
);
];
private static $default_sort = 'Make';
}