ActiveDataProviderTest.php 5.52 KB
Newer Older
1 2 3 4 5 6 7 8 9 10
<?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\data\ActiveDataProvider;
11
use yii\db\Query;
12
use yiiunit\data\ar\ActiveRecord;
13 14
use yiiunit\data\ar\Customer;
use yiiunit\data\ar\Item;
15 16 17 18 19 20
use yiiunit\framework\db\DatabaseTestCase;
use yiiunit\data\ar\Order;

/**
 * @author Qiang Xue <qiang.xue@gmail.com>
 * @since 2.0
21 22
 *
 * @group data
23
 * @group db
24 25 26
 */
class ActiveDataProviderTest extends DatabaseTestCase
{
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
    protected function setUp()
    {
        parent::setUp();
        ActiveRecord::$db = $this->getConnection();
    }

    public function testActiveQuery()
    {
        $provider = new ActiveDataProvider([
            'query' => Order::find()->orderBy('id'),
        ]);
        $orders = $provider->getModels();
        $this->assertEquals(3, count($orders));
        $this->assertTrue($orders[0] instanceof Order);
        $this->assertTrue($orders[1] instanceof Order);
        $this->assertTrue($orders[2] instanceof Order);
        $this->assertEquals([1, 2, 3], $provider->getKeys());

        $provider = new ActiveDataProvider([
            'query' => Order::find(),
            'pagination' => [
                'pageSize' => 2,
            ]
        ]);
        $orders = $provider->getModels();
        $this->assertEquals(2, count($orders));
    }

    public function testActiveRelation()
    {
57
        /* @var $customer Customer */
Alexander Makarov committed
58
        $customer = Customer::findOne(2);
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
        $provider = new ActiveDataProvider([
            'query' => $customer->getOrders(),
        ]);
        $orders = $provider->getModels();
        $this->assertEquals(2, count($orders));
        $this->assertTrue($orders[0] instanceof Order);
        $this->assertTrue($orders[1] instanceof Order);
        $this->assertEquals([2, 3], $provider->getKeys());

        $provider = new ActiveDataProvider([
            'query' => $customer->getOrders(),
            'pagination' => [
                'pageSize' => 1,
            ]
        ]);
        $orders = $provider->getModels();
        $this->assertEquals(1, count($orders));
    }

    public function testActiveRelationVia()
    {
80
        /* @var $order Order */
Alexander Makarov committed
81
        $order = Order::findOne(2);
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
        $provider = new ActiveDataProvider([
            'query' => $order->getItems(),
        ]);
        $items = $provider->getModels();
        $this->assertEquals(3, count($items));
        $this->assertTrue($items[0] instanceof Item);
        $this->assertTrue($items[1] instanceof Item);
        $this->assertTrue($items[2] instanceof Item);
        $this->assertEquals([3, 4, 5], $provider->getKeys());

        $provider = new ActiveDataProvider([
            'query' => $order->getItems(),
            'pagination' => [
                'pageSize' => 2,
            ]
        ]);
        $items = $provider->getModels();
        $this->assertEquals(2, count($items));
    }

    public function testActiveRelationViaTable()
    {
104
        /* @var $order Order */
Alexander Makarov committed
105
        $order = Order::findOne(1);
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
        $provider = new ActiveDataProvider([
            'query' => $order->getBooks(),
        ]);
        $items = $provider->getModels();
        $this->assertEquals(2, count($items));
        $this->assertTrue($items[0] instanceof Item);
        $this->assertTrue($items[1] instanceof Item);

        $provider = new ActiveDataProvider([
            'query' => $order->getBooks(),
            'pagination' => [
                'pageSize' => 1,
            ]
        ]);
        $items = $provider->getModels();
        $this->assertEquals(1, count($items));
    }

    public function testQuery()
    {
        $query = new Query;
        $provider = new ActiveDataProvider([
            'db' => $this->getConnection(),
129
            'query' => $query->from('order')->orderBy('id'),
130 131 132 133 134 135 136 137 138
        ]);
        $orders = $provider->getModels();
        $this->assertEquals(3, count($orders));
        $this->assertTrue(is_array($orders[0]));
        $this->assertEquals([0, 1, 2], $provider->getKeys());

        $query = new Query;
        $provider = new ActiveDataProvider([
            'db' => $this->getConnection(),
139
            'query' => $query->from('order'),
140 141 142 143 144 145 146 147 148 149 150 151 152
            'pagination' => [
                'pageSize' => 2,
            ]
        ]);
        $orders = $provider->getModels();
        $this->assertEquals(2, count($orders));
    }

    public function testRefresh()
    {
        $query = new Query;
        $provider = new ActiveDataProvider([
            'db' => $this->getConnection(),
153
            'query' => $query->from('order')->orderBy('id'),
154 155 156 157 158 159 160 161 162 163 164 165 166 167
        ]);
        $this->assertEquals(3, count($provider->getModels()));

        $provider->getPagination()->pageSize = 2;
        $this->assertEquals(3, count($provider->getModels()));
        $provider->refresh();
        $this->assertEquals(2, count($provider->getModels()));
    }

    public function testPaginationBeforeModels()
    {
        $query = new Query;
        $provider = new ActiveDataProvider([
            'db' => $this->getConnection(),
168
            'query' => $query->from('order')->orderBy('id'),
169 170 171 172 173 174 175 176 177 178 179
        ]);
        $pagination = $provider->getPagination();
        $this->assertEquals(0, $pagination->getPageCount());
        $this->assertCount(3, $provider->getModels());
        $this->assertEquals(1, $pagination->getPageCount());

        $provider->getPagination()->pageSize = 2;
        $this->assertEquals(3, count($provider->getModels()));
        $provider->refresh();
        $this->assertEquals(2, count($provider->getModels()));
    }
180
}