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.
181 lines
5.4 KiB
181 lines
5.4 KiB
11 years ago
|
<?php
|
||
|
/**
|
||
|
* @link http://www.yiiframework.com/
|
||
|
* @copyright Copyright (c) 2008 Yii Software LLC
|
||
|
* @license http://www.yiiframework.com/license/
|
||
|
*/
|
||
|
|
||
|
namespace yiiunit\framework\data;
|
||
11 years ago
|
|
||
11 years ago
|
use yii\web\UrlManager;
|
||
|
use yiiunit\TestCase;
|
||
|
use yii\data\Sort;
|
||
|
|
||
|
/**
|
||
|
* @author Qiang Xue <qiang.xue@gmail.com>
|
||
|
* @since 2.0
|
||
11 years ago
|
*
|
||
|
* @group data
|
||
11 years ago
|
*/
|
||
|
class SortTest extends TestCase
|
||
|
{
|
||
11 years ago
|
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([
|
||
10 years ago
|
'baseUrl' => '/',
|
||
|
'ScriptUrl' => '/index.php',
|
||
11 years ago
|
'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',
|
||
|
]);
|
||
|
|
||
10 years ago
|
$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'));
|
||
11 years ago
|
}
|
||
|
|
||
|
public function testLink()
|
||
|
{
|
||
|
$this->mockApplication();
|
||
|
$manager = new UrlManager([
|
||
10 years ago
|
'baseUrl' => '/',
|
||
|
'scriptUrl' => '/index.php',
|
||
11 years ago
|
'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',
|
||
|
]);
|
||
|
|
||
10 years ago
|
$this->assertEquals('<a class="asc" href="/index.php?r=site%2Findex&sort=-age%2C-name" data-sort="-age,-name">Age</a>', $sort->link('age'));
|
||
11 years ago
|
}
|
||
11 years ago
|
}
|