mockApplication(); } public function testEmptyListShown(): void { ob_start(); $this->getListView([ 'dataProvider' => new ArrayDataProvider(['allModels' => []]), 'emptyText' => 'Nothing at all', ])->run(); $out = ob_get_clean(); $this->assertEqualsWithoutLE('
Nothing at all
', $out); } public function testEmpty(): void { ob_start(); $this->getListView([ 'dataProvider' => new ArrayDataProvider(['allModels' => []]), 'emptyText' => false, ])->run(); $out = ob_get_clean(); $this->assertEqualsWithoutLE('
', $out); } public function testEmptyListNotShown(): void { ob_start(); $this->getListView([ 'dataProvider' => new ArrayDataProvider(['allModels' => []]), 'showOnEmpty' => true, ])->run(); $out = ob_get_clean(); $this->assertEqualsWithoutLE(<<<'HTML'
HTML , $out); } /** * @return ListView */ private function getListView(array $options = []) { return new ListView(array_merge([ 'id' => 'w0', 'dataProvider' => $this->getDataProvider(), ], $options)); } /** * @return DataProviderInterface */ private static function getDataProvider(array $additionalConfig = []) { return new ArrayDataProvider(array_merge([ 'allModels' => [ ['id' => 1, 'login' => 'silverfire'], ['id' => 2, 'login' => 'samdark'], ['id' => 3, 'login' => 'cebe'], ], ], $additionalConfig)); } public function testSimplyListView(): void { ob_start(); $this->getListView()->run(); $out = ob_get_clean(); $this->assertEqualsWithoutLE(<<<'HTML'
Showing 1-3 of 3 items.
0
1
2
HTML , $out); } public function testWidgetOptions(): void { ob_start(); $this->getListView(['options' => ['class' => 'test-passed'], 'separator' => ''])->run(); $out = ob_get_clean(); $this->assertEqualsWithoutLE(<<<'HTML'
Showing 1-3 of 3 items.
0
1
2
HTML , $out); } public static function itemViewOptions() { return [ [ null, '
Showing 1-3 of 3 items.
0
1
2
', ], [ fn($model, $key, $index, $widget) => "Item #{$index}: {$model['login']} - Widget: " . $widget::class, '
Showing 1-3 of 3 items.
Item #0: silverfire - Widget: yii\widgets\ListView
Item #1: samdark - Widget: yii\widgets\ListView
Item #2: cebe - Widget: yii\widgets\ListView
', ], [ '@yiiunit/data/views/widgets/ListView/item', '
Showing 1-3 of 3 items.
Item #0: silverfire - Widget: yii\widgets\ListView
Item #1: samdark - Widget: yii\widgets\ListView
Item #2: cebe - Widget: yii\widgets\ListView
', ], ]; } /** * @dataProvider itemViewOptions * * @param mixed $itemView The item view to be used. * @param string $expected The expected result. */ public function testItemViewOptions(mixed $itemView, string $expected): void { ob_start(); $this->getListView(['itemView' => $itemView])->run(); $out = ob_get_clean(); $this->assertEqualsWithoutLE($expected, $out); } public static function itemOptions(): array { return [ [ null, '
Showing 1-3 of 3 items.
0
1
2
', ], [ fn($model, $key, $index, $widget) => [ 'tag' => 'span', 'data' => [ 'test' => 'passed', 'key' => $key, 'index' => $index, 'id' => $model['id'], ], ], '
Showing 1-3 of 3 items.
0 1 2
', ], ]; } /** * @dataProvider itemOptions * * @param mixed $itemOptions The item options. * @param string $expected The expected result. */ public function testItemOptions(mixed $itemOptions, string $expected): void { ob_start(); $this->getListView(['itemOptions' => $itemOptions])->run(); $out = ob_get_clean(); $this->assertEqualsWithoutLE($expected, $out); } public function testBeforeAndAfterItem(): void { $before = function ($model, $key, $index, $widget) { $widget = $widget::class; return ""; }; $after = function ($model, $key, $index, $widget) { if ($model['id'] === 1) { return null; } $widget = $widget::class; return ""; }; ob_start(); $this->getListView([ 'beforeItem' => $before, 'afterItem' => $after, ])->run(); $out = ob_get_clean(); $this->assertEqualsWithoutLE(<<
Showing 1-3 of 3 items.
0
1
2
HTML , $out ); } /** * @see https://github.com/yiisoft/yii2/pull/14596 */ public function testShouldTriggerInitEvent(): void { $initTriggered = false; $this->getListView([ 'on init' => function () use (&$initTriggered): void { $initTriggered = true; }, 'dataProvider' => new ArrayDataProvider(['allModels' => []]), ]); $this->assertTrue($initTriggered); } public function testNoDataProvider(): void { $this->expectException('yii\base\InvalidConfigException'); $this->expectExceptionMessage('The "dataProvider" property must be set.'); (new ListView())->run(); } public static function providerForNoSorter(): array { return [ 'no sort attributes' => [[]], 'sorter false' => [['dataProvider' => self::getDataProvider(['sort' => false])]], ]; } /** * @dataProvider providerForNoSorter * * @param array $additionalConfig Additional configuration for the list view. */ public function testRenderNoSorter(array $additionalConfig): void { $config = array_merge(['layout' => '{sorter}'], $additionalConfig); ob_start(); $this->getListView($config)->run(); $out = ob_get_clean(); $this->assertEqualsWithoutLE('
', $out); } public function testRenderSorterOnlyWithNoItems(): void { // by default sorter is skipped when there are no items during run() $out = (new ListView([ 'id' => 'w0', 'dataProvider' => $this->getDataProvider(['allModels' => [], 'sort' => ['attributes' => ['id']]]), ]))->renderSorter(); $this->assertEquals('', $out); } public function testRenderSorter(): void { \Yii::$app->set('request', new Request(['scriptUrl' => '/'])); ob_start(); $this->getListView([ 'layout' => '{sorter}', 'dataProvider' => $this->getDataProvider([ 'sort' => [ 'attributes' => ['id'], 'route' => 'list/view', ] ]) ])->run(); $out = ob_get_clean(); $this->assertEqualsWithoutLE('
', $out); } public function testRenderSummaryWhenPaginationIsFalseAndSummaryIsNull(): void { ob_start(); $this->getListView(['dataProvider' => $this->getDataProvider(['pagination' => false])])->run(); $out = ob_get_clean(); $this->assertEqualsWithoutLE('
Total 3 items.
0
1
2
', $out); } public static function providerForSummary(): array { return [ 'empty' => ['', '
0
1
2
'], 'all tokens' => ['{begin}-{end}-{count}-{totalCount}-{page}-{pageCount}', '
1-3-3-3-1-1
0
1
2
'], ]; } /** * @dataProvider providerForSummary * * @param string $summary Summary template. * @param string $result Expected result. */ public function testRenderSummaryWhenSummaryIsCustom(string $summary, string $result): void { ob_start(); $this->getListView(['summary' => $summary])->run(); $out = ob_get_clean(); $this->assertEqualsWithoutLE($result, $out); } }