Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions tests/framework/data/ActiveDataFilterTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,45 @@ public function testBuild($filter, $expectedResult): void
$this->assertEquals($expectedResult, $builder->build());
}

public function testBuildWithQueryOperatorMap(): void
{
$builder = new ActiveDataFilter();
$builder->queryOperatorMap = [
'AND' => 'MY_AND',
'NOT' => 'MY_NOT',
'>' => 'MY_GT',
];
$searchModel = (new DynamicModel(['name' => null, 'number' => null]))
->addRule('name', 'string')
->addRule('number', 'integer');
$builder->setSearchModel($searchModel);

$builder->filter = ['and' => [['name' => 'a'], ['name' => 'b']]];
$result = $builder->build();
$this->assertSame(['MY_AND', ['name' => 'a'], ['name' => 'b']], $result);

$builder->filter = ['not' => ['name' => 'a']];
$result = $builder->build();
$this->assertSame(['MY_NOT', ['name' => 'a']], $result);

$builder->filter = ['number' => ['gt' => 5]];
$result = $builder->build();
$this->assertSame(['MY_GT', 'number', 5], $result);
}

public function testBuildAttributeConditionWithoutConditionBuilder(): void
{
$builder = new ActiveDataFilter();
$searchModel = (new DynamicModel(['number' => null]))
->addRule('number', 'integer');
$builder->setSearchModel($searchModel);

unset($builder->conditionBuilders['>']);
$builder->filter = ['number' => ['gt' => 5]];
$result = $builder->build();
$this->assertSame(['>', 'number', 5], $result);
}

/**
* @depends testBuild
*/
Expand Down
7 changes: 7 additions & 0 deletions tests/framework/data/ArrayDataProviderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,13 @@ public function testGetKeys(): void
$this->assertEquals(['key1', 'key2'], $dataProvider->getKeys());
}

public function testPrepareModelsWithNullAllModels(): void
{
$dataProvider = new ArrayDataProvider();
$this->assertSame([], $dataProvider->getModels());
$this->assertSame(0, $dataProvider->getTotalCount());
}

public function testSortFlags(): void
{
$simpleArray = [['sortField' => 1], ['sortField' => 2], ['sortField' => 11]];
Expand Down
164 changes: 164 additions & 0 deletions tests/framework/data/BaseDataProviderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,23 @@
namespace yiiunit\framework\data;

use ReflectionClass;
use yii\base\InvalidArgumentException;
use yii\data\BaseDataProvider;
use yii\data\Pagination;
use yii\data\Sort;
use yiiunit\TestCase;

/**
* @group data
*/
class BaseDataProviderTest extends TestCase
{
protected function setUp(): void
{
parent::setUp();
$this->mockApplication();
}

public function testGenerateId(): void
{
$rc = new ReflectionClass(BaseDataProvider::class);
Expand All @@ -33,6 +42,143 @@ public function testGenerateId(): void
$this->assertNull((new ConcreteDataProvider())->id);
$this->assertNotNull((new ConcreteDataProvider())->id);
}

public function testPrepareAndGetModels(): void
{
$provider = new ConcreteDataProvider();
$this->assertSame([], $provider->getModels());
$this->assertSame([], $provider->getKeys());
}

public function testSetModels(): void
{
$provider = new ConcreteDataProvider();
$provider->setModels(['a', 'b']);
$this->assertSame(['a', 'b'], $provider->getModels());
}

public function testSetKeys(): void
{
$provider = new ConcreteDataProvider();
$provider->setKeys([1, 2]);
$this->assertSame([1, 2], $provider->getKeys());
}

public function testGetCount(): void
{
$provider = new ConcreteDataProvider();
$provider->setModels(['a', 'b', 'c']);
$this->assertSame(3, $provider->getCount());
}

public function testGetTotalCountWithoutPagination(): void
{
$provider = new ConcreteDataProvider(['pagination' => false]);
$provider->setModels(['a', 'b']);
$this->assertSame(2, $provider->getTotalCount());
}

public function testGetTotalCountWithPagination(): void
{
$provider = new CountableDataProvider();
$this->assertSame(42, $provider->getTotalCount());
}

public function testSetTotalCount(): void
{
$provider = new ConcreteDataProvider();
$provider->setTotalCount(42);
$this->assertSame(42, $provider->getTotalCount());
}

public function testGetPaginationDefault(): void
{
$provider = new ConcreteDataProvider();
$this->assertInstanceOf(Pagination::class, $provider->getPagination());
}

public function testSetPaginationWithId(): void
{
$provider = new ConcreteDataProvider(['id' => 'test']);
$pagination = $provider->getPagination();
$this->assertSame('test-page', $pagination->pageParam);
$this->assertSame('test-per-page', $pagination->pageSizeParam);
}

public function testSetPaginationInstance(): void
{
$pagination = new Pagination();
$provider = new ConcreteDataProvider();
$provider->setPagination($pagination);
$this->assertSame($pagination, $provider->getPagination());
}

public function testSetPaginationFalse(): void
{
$provider = new ConcreteDataProvider();
$provider->setPagination(false);
$this->assertFalse($provider->getPagination());
}

public function testSetPaginationInvalid(): void
{
$provider = new ConcreteDataProvider();
$this->expectException(InvalidArgumentException::class);
$provider->setPagination('invalid');
}

public function testGetSortDefault(): void
{
$provider = new ConcreteDataProvider();
$this->assertInstanceOf(Sort::class, $provider->getSort());
}

public function testSetSortWithId(): void
{
$provider = new ConcreteDataProvider(['id' => 'test']);
$sort = $provider->getSort();
$this->assertSame('test-sort', $sort->sortParam);
}

public function testSetSortInstance(): void
{
$sort = new Sort();
$provider = new ConcreteDataProvider();
$provider->setSort($sort);
$this->assertSame($sort, $provider->getSort());
}

public function testSetSortFalse(): void
{
$provider = new ConcreteDataProvider();
$provider->setSort(false);
$this->assertFalse($provider->getSort());
}

public function testSetSortInvalid(): void
{
$provider = new ConcreteDataProvider();
$this->expectException(InvalidArgumentException::class);
$provider->setSort('invalid');
}

public function testRefresh(): void
{
$provider = new ConcreteDataProvider();
$provider->getModels();
$provider->setTotalCount(42);
$provider->refresh();
$this->assertSame(0, $provider->getTotalCount());
}

public function testForcePrepare(): void
{
$provider = new ConcreteDataProvider();
$provider->prepare();
$provider->setModels(['overridden']);
$provider->prepare(true);
$this->assertSame([], $provider->getModels());
}
}

/**
Expand Down Expand Up @@ -64,3 +210,21 @@ protected function prepareTotalCount()
return 0;
}
}

class CountableDataProvider extends BaseDataProvider
{
protected function prepareModels()
{
return ['prepared-model'];
}

protected function prepareKeys($models)
{
return array_keys($models);
}

protected function prepareTotalCount()
{
return 42;
}
}
Loading
Loading