diff --git a/tests/unit/framework/data/ArrayDataProviderTest.php b/tests/unit/framework/data/ArrayDataProviderTest.php new file mode 100644 index 0000000000..31b7ae5122 --- /dev/null +++ b/tests/unit/framework/data/ArrayDataProviderTest.php @@ -0,0 +1,153 @@ +mockApplication(); + } + + public function testGetModels() + { + $simpleArray = [ + ['name' => 'zero'], + ['name' => 'one'] + ]; + $dataProvider = new ArrayDataProvider(['allModels' => $simpleArray]); + $this->assertEquals($simpleArray, $dataProvider->getModels()); + } + + public function testGetSortedData() + { + $simpleArray = [['sortField' => 1], ['sortField' => 0]]; + $dataProvider = new ArrayDataProvider( + [ + 'allModels' => $simpleArray, + 'sort' => [ + 'attributes' => [ + 'sort' => [ + 'asc' => ['sortField' => SORT_ASC], + 'desc' => ['sortField' => SORT_DESC], + 'label' => 'Sorting', + 'default' => 'asc', + ], + ], + 'defaultOrder' => [ + 'sort' => SORT_ASC, + ] + ], + ] + ); + $sortedArray = [['sortField' => 0], ['sortField' => 1]]; + $this->assertEquals($sortedArray, $dataProvider->getModels()); + } + + public function testGetSortedDataByInnerArrayField() + { + $simpleArray = [ + ['innerArray' => ['sortField' => 1]], + ['innerArray' => ['sortField' => 0]] + ]; + $dataProvider = new ArrayDataProvider( + [ + 'allModels' => $simpleArray, + 'sort' => [ + 'attributes' => [ + 'sort' => [ + 'asc' => ['innerArray.sortField' => SORT_ASC], + 'desc' => ['innerArray.sortField' => SORT_DESC], + 'label' => 'Sorting', + 'default' => 'asc', + ], + ], + 'defaultOrder' => [ + 'sort' => SORT_ASC, + ] + ], + ] + ); + $sortedArray = [ + ['innerArray' => ['sortField' => 0]], + ['innerArray' => ['sortField' => 1]] + ]; + $this->assertEquals($sortedArray, $dataProvider->getModels()); + } + + public function testCaseSensitiveSort() + { + // source data + $unsortedProjects = [ + ['title'=>'Zabbix', 'license'=>'GPL'], + ['title'=>'munin', 'license'=>'GPL'], + ['title'=>'Arch Linux', 'license'=>'GPL'], + ['title'=>'Nagios', 'license'=>'GPL'], + ['title'=>'zend framework', 'license'=>'BSD'], + ['title'=>'Zope', 'license'=>'ZPL'], + ['title'=>'active-record', 'license'=>false], + ['title'=>'ActiveState', 'license'=>false], + ['title'=>'mach', 'license'=>false], + ['title'=>'MySQL', 'license'=>'GPL'], + ['title'=>'mssql', 'license'=>'EULA'], + ['title'=>'Master-Master', 'license'=>false], + ['title'=>'Zend Engine', 'license'=>false], + ['title'=>'Mageia Linux', 'license'=>'GNU GPL'], + ['title'=>'nginx', 'license'=>'BSD'], + ['title'=>'Mozilla Firefox', 'license'=>'MPL'], + ]; + + // expected data + $sortedProjects = [ + // upper cased titles + ['title'=>'ActiveState', 'license'=>false], + ['title'=>'Arch Linux', 'license'=>'GPL'], + ['title'=>'Mageia Linux', 'license'=>'GNU GPL'], + ['title'=>'Master-Master', 'license'=>false], + ['title'=>'Mozilla Firefox', 'license'=>'MPL'], + ['title'=>'MySQL', 'license'=>'GPL'], + ['title'=>'Nagios', 'license'=>'GPL'], + ['title'=>'Zabbix', 'license'=>'GPL'], + ['title'=>'Zend Engine', 'license'=>false], + ['title'=>'Zope', 'license'=>'ZPL'], + // lower cased titles + ['title'=>'active-record', 'license'=>false], + ['title'=>'mach', 'license'=>false], + ['title'=>'mssql', 'license'=>'EULA'], + ['title'=>'munin', 'license'=>'GPL'], + ['title'=>'nginx', 'license'=>'BSD'], + ['title'=>'zend framework', 'license'=>'BSD'], + ]; + + $dataProvider = new ArrayDataProvider( + [ + 'allModels' => $unsortedProjects, + 'sort' => [ + 'attributes' => [ + 'sort' => [ + 'asc' => ['title' => SORT_ASC], + 'desc' => ['title' => SORT_DESC], + 'label' => 'Title', + 'default' => 'desc', + ], + ], + 'defaultOrder' => [ + 'sort' => SORT_ASC, + ] + ], + 'pagination' => [ + 'pageSize' => 100500, + ], + ] + ); + + $this->assertEquals($sortedProjects, $dataProvider->getModels()); + } +} \ No newline at end of file