mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
Add tests for sorting HasManyList
This commit is contained in:
parent
3321c6b39d
commit
c7d522ff6d
@ -11,17 +11,16 @@ use SilverStripe\ORM\Tests\HasManyListTest\Employee;
|
|||||||
class HasManyListTest extends SapphireTest
|
class HasManyListTest extends SapphireTest
|
||||||
{
|
{
|
||||||
|
|
||||||
// Borrow the model from DataObjectTest
|
|
||||||
protected static $fixture_file = [
|
protected static $fixture_file = [
|
||||||
'DataObjectTest.yml', // Borrow the model from DataObjectTest
|
'DataObjectTest.yml', // Borrow the model from DataObjectTest
|
||||||
'HasManyListTest.yml',
|
'HasManyListTest.yml',
|
||||||
];
|
];
|
||||||
|
|
||||||
public static $extra_data_objects = array(
|
public static $extra_data_objects = [
|
||||||
Company::class,
|
Company::class,
|
||||||
Employee::class,
|
Employee::class,
|
||||||
CompanyCar::class,
|
CompanyCar::class,
|
||||||
);
|
];
|
||||||
|
|
||||||
public static function getExtraDataObjects()
|
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
|
// Relies on the fact that (unrelated) comments exist in the fixture file already
|
||||||
$newTeam = new Team(); // has_many Comments
|
$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
|
// Check that expected teams exist
|
||||||
$list = Team::get();
|
$list = Team::get();
|
||||||
$this->assertEquals(
|
$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')
|
$list->sort('Title')->column('Title')
|
||||||
);
|
);
|
||||||
|
|
||||||
// Test that each team has the correct fans
|
// Test that each team has the correct fans
|
||||||
$team1 = $this->objFromFixture(DataObjectTest\Team::class, 'team1');
|
$team1 = $this->objFromFixture(DataObjectTest\Team::class, 'team1');
|
||||||
$team2 = $this->objFromFixture(DataObjectTest\Team::class, 'team2');
|
$team2 = $this->objFromFixture(DataObjectTest\Team::class, 'team2');
|
||||||
$this->assertEquals(array('Bob', 'Joe'), $team1->Comments()->sort('Name')->column('Name'));
|
$this->assertEquals(['Bob', 'Joe'], $team1->Comments()->sort('Name')->column('Name'));
|
||||||
$this->assertEquals(array('Phil'), $team2->Comments()->sort('Name')->column('Name'));
|
$this->assertEquals(['Phil'], $team2->Comments()->sort('Name')->column('Name'));
|
||||||
|
|
||||||
// Test that removing comments from unrelated team has no effect
|
// Test that removing comments from unrelated team has no effect
|
||||||
$team1comment = $this->objFromFixture(DataObjectTest\TeamComment::class, 'comment1');
|
$team1comment = $this->objFromFixture(DataObjectTest\TeamComment::class, 'comment1');
|
||||||
$team2comment = $this->objFromFixture(DataObjectTest\TeamComment::class, 'comment3');
|
$team2comment = $this->objFromFixture(DataObjectTest\TeamComment::class, 'comment3');
|
||||||
$team1->Comments()->remove($team2comment);
|
$team1->Comments()->remove($team2comment);
|
||||||
$team2->Comments()->remove($team1comment);
|
$team2->Comments()->remove($team1comment);
|
||||||
$this->assertEquals(array('Bob', 'Joe'), $team1->Comments()->sort('Name')->column('Name'));
|
$this->assertEquals(['Bob', 'Joe'], $team1->Comments()->sort('Name')->column('Name'));
|
||||||
$this->assertEquals(array('Phil'), $team2->Comments()->sort('Name')->column('Name'));
|
$this->assertEquals(['Phil'], $team2->Comments()->sort('Name')->column('Name'));
|
||||||
$this->assertEquals($team1->ID, $team1comment->TeamID);
|
$this->assertEquals($team1->ID, $team1comment->TeamID);
|
||||||
$this->assertEquals($team2->ID, $team2comment->TeamID);
|
$this->assertEquals($team2->ID, $team2comment->TeamID);
|
||||||
|
|
||||||
@ -73,9 +72,45 @@ class HasManyListTest extends SapphireTest
|
|||||||
$team2comment = $this->objFromFixture(DataObjectTest\TeamComment::class, 'comment3');
|
$team2comment = $this->objFromFixture(DataObjectTest\TeamComment::class, 'comment3');
|
||||||
$team1->Comments()->remove($team1comment);
|
$team1->Comments()->remove($team1comment);
|
||||||
$team2->Comments()->remove($team2comment);
|
$team2->Comments()->remove($team2comment);
|
||||||
$this->assertEquals(array('Bob'), $team1->Comments()->sort('Name')->column('Name'));
|
$this->assertEquals(['Bob'], $team1->Comments()->sort('Name')->column('Name'));
|
||||||
$this->assertEquals(array(), $team2->Comments()->sort('Name')->column('Name'));
|
$this->assertEquals([], $team2->Comments()->sort('Name')->column('Name'));
|
||||||
$this->assertEmpty($team1comment->TeamID);
|
$this->assertEmpty($team1comment->TeamID);
|
||||||
$this->assertEmpty($team2comment->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'));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,26 +1,26 @@
|
|||||||
SilverStripe\ORM\Tests\DataObjectTest\Company:
|
SilverStripe\ORM\Tests\HasManyListTest\Company:
|
||||||
silverstripe:
|
silverstripe:
|
||||||
Name: 'SilverStripe Ltd'
|
Name: 'SilverStripe Ltd'
|
||||||
SilverStripe\ORM\Tests\HasManyListTest\Employee:
|
SilverStripe\ORM\Tests\HasManyListTest\Employee:
|
||||||
john:
|
john:
|
||||||
Name: 'John Smith'
|
Name: 'John Smith'
|
||||||
Company: =>SilverStripe\ORM\Tests\DataObjectTest\Company.silverstripe
|
Company: =>SilverStripe\ORM\Tests\HasManyListTest\Company.silverstripe
|
||||||
jenny:
|
jenny:
|
||||||
Name: 'Jenny Smith'
|
Name: 'Jenny Smith'
|
||||||
Company: =>SilverStripe\ORM\Tests\DataObjectTest\Company.silverstripe
|
Company: =>SilverStripe\ORM\Tests\HasManyListTest\Company.silverstripe
|
||||||
SilverStripe\ORM\Tests\HasManyListTest\CompanyCar:
|
SilverStripe\ORM\Tests\HasManyListTest\CompanyCar:
|
||||||
jaguar:
|
jaguar:
|
||||||
Make: 'Jaguar'
|
Make: 'Jaguar'
|
||||||
Model: 'E Type'
|
Model: 'E Type'
|
||||||
User: =>SilverStripe\ORM\Tests\HasManyListTest\Employee.john
|
User: =>SilverStripe\ORM\Tests\HasManyListTest\Employee.john
|
||||||
Company: =>SilverStripe\ORM\Tests\DataObjectTest\Company.silverstripe
|
Company: =>SilverStripe\ORM\Tests\HasManyListTest\Company.silverstripe
|
||||||
ferrari:
|
ferrari:
|
||||||
Make: 'Ferrari'
|
Make: 'Ferrari'
|
||||||
Model: 'F40'
|
Model: 'F40'
|
||||||
User: =>SilverStripe\ORM\Tests\HasManyListTest\Employee.jenny
|
User: =>SilverStripe\ORM\Tests\HasManyListTest\Employee.jenny
|
||||||
Company: =>SilverStripe\ORM\Tests\DataObjectTest\Company.silverstripe
|
Company: =>SilverStripe\ORM\Tests\HasManyListTest\Company.silverstripe
|
||||||
lamborghini:
|
lamborghini:
|
||||||
Make: 'Lamborghini'
|
Make: 'Lamborghini'
|
||||||
Model: 'Countach'
|
Model: 'Countach'
|
||||||
User: =>SilverStripe\ORM\Tests\HasManyListTest\Employee.jenny
|
User: =>SilverStripe\ORM\Tests\HasManyListTest\Employee.jenny
|
||||||
Company: =>SilverStripe\ORM\Tests\DataObjectTest\Company.silverstripe
|
Company: =>SilverStripe\ORM\Tests\HasManyListTest\Company.silverstripe
|
||||||
|
@ -7,13 +7,15 @@ use SilverStripe\ORM\DataObject;
|
|||||||
|
|
||||||
class CompanyCar extends DataObject implements TestOnly
|
class CompanyCar extends DataObject implements TestOnly
|
||||||
{
|
{
|
||||||
private static $db = array(
|
private static $db = [
|
||||||
'Make' => 'Varchar(100)',
|
'Make' => 'Varchar(100)',
|
||||||
'Model' => 'Varchar(100)',
|
'Model' => 'Varchar(100)',
|
||||||
);
|
];
|
||||||
|
|
||||||
private static $has_one = array(
|
private static $has_one = [
|
||||||
'User' => Employee::class,
|
'User' => Employee::class,
|
||||||
'Company' => Company::class,
|
'Company' => Company::class,
|
||||||
);
|
];
|
||||||
|
|
||||||
|
private static $default_sort = 'Make';
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user