You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
180 lines
5.4 KiB
180 lines
5.4 KiB
<?php |
|
/** |
|
* @link http://www.yiiframework.com/ |
|
* @copyright Copyright (c) 2008 Yii Software LLC |
|
* @license http://www.yiiframework.com/license/ |
|
*/ |
|
|
|
namespace yiiunit\framework\data; |
|
|
|
use yii\web\UrlManager; |
|
use yiiunit\TestCase; |
|
use yii\data\Sort; |
|
|
|
/** |
|
* @author Qiang Xue <qiang.xue@gmail.com> |
|
* @since 2.0 |
|
* |
|
* @group data |
|
*/ |
|
class SortTest extends TestCase |
|
{ |
|
protected function setUp() |
|
{ |
|
parent::setUp(); |
|
$this->mockApplication(); |
|
} |
|
|
|
public function testGetOrders() |
|
{ |
|
$sort = new Sort([ |
|
'attributes' => [ |
|
'age', |
|
'name' => [ |
|
'asc' => ['first_name' => SORT_ASC, 'last_name' => SORT_ASC], |
|
'desc' => ['first_name' => SORT_DESC, 'last_name' => SORT_DESC], |
|
], |
|
], |
|
'params' => [ |
|
'sort' => 'age,-name' |
|
], |
|
'enableMultiSort' => true, |
|
]); |
|
|
|
$orders = $sort->getOrders(); |
|
$this->assertEquals(3, count($orders)); |
|
$this->assertEquals(SORT_ASC, $orders['age']); |
|
$this->assertEquals(SORT_DESC, $orders['first_name']); |
|
$this->assertEquals(SORT_DESC, $orders['last_name']); |
|
|
|
$sort->enableMultiSort = false; |
|
$orders = $sort->getOrders(true); |
|
$this->assertEquals(1, count($orders)); |
|
$this->assertEquals(SORT_ASC, $orders['age']); |
|
} |
|
|
|
public function testGetAttributeOrders() |
|
{ |
|
$sort = new Sort([ |
|
'attributes' => [ |
|
'age', |
|
'name' => [ |
|
'asc' => ['first_name' => SORT_ASC, 'last_name' => SORT_ASC], |
|
'desc' => ['first_name' => SORT_DESC, 'last_name' => SORT_DESC], |
|
], |
|
], |
|
'params' => [ |
|
'sort' => 'age,-name' |
|
], |
|
'enableMultiSort' => true, |
|
]); |
|
|
|
$orders = $sort->getAttributeOrders(); |
|
$this->assertEquals(2, count($orders)); |
|
$this->assertEquals(SORT_ASC, $orders['age']); |
|
$this->assertEquals(SORT_DESC, $orders['name']); |
|
|
|
$sort->enableMultiSort = false; |
|
$orders = $sort->getAttributeOrders(true); |
|
$this->assertEquals(1, count($orders)); |
|
$this->assertEquals(SORT_ASC, $orders['age']); |
|
} |
|
|
|
public function testGetAttributeOrder() |
|
{ |
|
$sort = new Sort([ |
|
'attributes' => [ |
|
'age', |
|
'name' => [ |
|
'asc' => ['first_name' => SORT_ASC, 'last_name' => SORT_ASC], |
|
'desc' => ['first_name' => SORT_DESC, 'last_name' => SORT_DESC], |
|
], |
|
], |
|
'params' => [ |
|
'sort' => 'age,-name' |
|
], |
|
'enableMultiSort' => true, |
|
]); |
|
|
|
$this->assertEquals(SORT_ASC, $sort->getAttributeOrder('age')); |
|
$this->assertEquals(SORT_DESC, $sort->getAttributeOrder('name')); |
|
$this->assertNull($sort->getAttributeOrder('xyz')); |
|
} |
|
|
|
public function testCreateSortParam() |
|
{ |
|
$sort = new Sort([ |
|
'attributes' => [ |
|
'age', |
|
'name' => [ |
|
'asc' => ['first_name' => SORT_ASC, 'last_name' => SORT_ASC], |
|
'desc' => ['first_name' => SORT_DESC, 'last_name' => SORT_DESC], |
|
], |
|
], |
|
'params' => [ |
|
'sort' => 'age,-name' |
|
], |
|
'enableMultiSort' => true, |
|
'route' => 'site/index', |
|
]); |
|
|
|
$this->assertEquals('-age,-name', $sort->createSortParam('age')); |
|
$this->assertEquals('name,age', $sort->createSortParam('name')); |
|
} |
|
|
|
public function testCreateUrl() |
|
{ |
|
$manager = new UrlManager([ |
|
'baseUrl' => '/', |
|
'ScriptUrl' => '/index.php', |
|
'cache' => null, |
|
]); |
|
|
|
$sort = new Sort([ |
|
'attributes' => [ |
|
'age', |
|
'name' => [ |
|
'asc' => ['first_name' => SORT_ASC, 'last_name' => SORT_ASC], |
|
'desc' => ['first_name' => SORT_DESC, 'last_name' => SORT_DESC], |
|
], |
|
], |
|
'params' => [ |
|
'sort' => 'age,-name' |
|
], |
|
'enableMultiSort' => true, |
|
'urlManager' => $manager, |
|
'route' => 'site/index', |
|
]); |
|
|
|
$this->assertEquals('/index.php?r=site%2Findex&sort=-age%2C-name', $sort->createUrl('age')); |
|
$this->assertEquals('/index.php?r=site%2Findex&sort=name%2Cage', $sort->createUrl('name')); |
|
} |
|
|
|
public function testLink() |
|
{ |
|
$this->mockApplication(); |
|
$manager = new UrlManager([ |
|
'baseUrl' => '/', |
|
'scriptUrl' => '/index.php', |
|
'cache' => null, |
|
]); |
|
|
|
$sort = new Sort([ |
|
'attributes' => [ |
|
'age', |
|
'name' => [ |
|
'asc' => ['first_name' => SORT_ASC, 'last_name' => SORT_ASC], |
|
'desc' => ['first_name' => SORT_DESC, 'last_name' => SORT_DESC], |
|
], |
|
], |
|
'params' => [ |
|
'sort' => 'age,-name' |
|
], |
|
'enableMultiSort' => true, |
|
'urlManager' => $manager, |
|
'route' => 'site/index', |
|
]); |
|
|
|
$this->assertEquals('<a class="asc" href="/index.php?r=site%2Findex&sort=-age%2C-name" data-sort="-age,-name">Age</a>', $sort->link('age')); |
|
} |
|
}
|
|
|