Commit f7a6cb9f by Qiang Xue

Refactored AR tests.

parent 338b6aa7
...@@ -20,26 +20,6 @@ class ActiveRecordTest extends ElasticSearchTestCase ...@@ -20,26 +20,6 @@ class ActiveRecordTest extends ElasticSearchTestCase
{ {
use ActiveRecordTestTrait; use ActiveRecordTestTrait;
public function callCustomerFind($q = null)
{
return Customer::find($q);
}
public function callOrderFind($q = null)
{
return Order::find($q);
}
public function callOrderItemFind($q = null)
{
return OrderItem::find($q);
}
public function callItemFind($q = null)
{
return Item::find($q);
}
public function getCustomerClass() public function getCustomerClass()
{ {
return Customer::className(); return Customer::className();
...@@ -164,7 +144,7 @@ class ActiveRecordTest extends ElasticSearchTestCase ...@@ -164,7 +144,7 @@ class ActiveRecordTest extends ElasticSearchTestCase
public function testFindAsArray() public function testFindAsArray()
{ {
// asArray // asArray
$customer = $this->callCustomerFind()->where(['id' => 2])->asArray()->one(); $customer = Customer::find()->where(['id' => 2])->asArray()->one();
$this->assertEquals([ $this->assertEquals([
'id' => 2, 'id' => 2,
'email' => 'user2@example.com', 'email' => 'user2@example.com',
...@@ -177,7 +157,7 @@ class ActiveRecordTest extends ElasticSearchTestCase ...@@ -177,7 +157,7 @@ class ActiveRecordTest extends ElasticSearchTestCase
public function testSearch() public function testSearch()
{ {
$customers = $this->callCustomerFind()->search()['hits']; $customers = Customer::find()->search()['hits'];
$this->assertEquals(3, $customers['total']); $this->assertEquals(3, $customers['total']);
$this->assertEquals(3, count($customers['hits'])); $this->assertEquals(3, count($customers['hits']));
$this->assertTrue($customers['hits'][0] instanceof Customer); $this->assertTrue($customers['hits'][0] instanceof Customer);
...@@ -185,12 +165,12 @@ class ActiveRecordTest extends ElasticSearchTestCase ...@@ -185,12 +165,12 @@ class ActiveRecordTest extends ElasticSearchTestCase
$this->assertTrue($customers['hits'][2] instanceof Customer); $this->assertTrue($customers['hits'][2] instanceof Customer);
// limit vs. totalcount // limit vs. totalcount
$customers = $this->callCustomerFind()->limit(2)->search()['hits']; $customers = Customer::find()->limit(2)->search()['hits'];
$this->assertEquals(3, $customers['total']); $this->assertEquals(3, $customers['total']);
$this->assertEquals(2, count($customers['hits'])); $this->assertEquals(2, count($customers['hits']));
// asArray // asArray
$result = $this->callCustomerFind()->asArray()->search()['hits']; $result = Customer::find()->asArray()->search()['hits'];
$this->assertEquals(3, $result['total']); $this->assertEquals(3, $result['total']);
$customers = $result['hits']; $customers = $result['hits'];
$this->assertEquals(3, count($customers)); $this->assertEquals(3, count($customers));
...@@ -213,7 +193,7 @@ class ActiveRecordTest extends ElasticSearchTestCase ...@@ -213,7 +193,7 @@ class ActiveRecordTest extends ElasticSearchTestCase
// TODO test asArray() + fields() + indexBy() // TODO test asArray() + fields() + indexBy()
// find by attributes // find by attributes
$result = $this->callCustomerFind()->where(['name' => 'user2'])->search()['hits']; $result = Customer::find()->where(['name' => 'user2'])->search()['hits'];
$customer = reset($result['hits']); $customer = reset($result['hits']);
$this->assertTrue($customer instanceof Customer); $this->assertTrue($customer instanceof Customer);
$this->assertEquals(2, $customer->id); $this->assertEquals(2, $customer->id);
...@@ -223,7 +203,7 @@ class ActiveRecordTest extends ElasticSearchTestCase ...@@ -223,7 +203,7 @@ class ActiveRecordTest extends ElasticSearchTestCase
public function testSearchFacets() public function testSearchFacets()
{ {
$result = $this->callCustomerFind()->addStatisticalFacet('status_stats', ['field' => 'status'])->search(); $result = Customer::find()->addStatisticalFacet('status_stats', ['field' => 'status'])->search();
$this->assertArrayHasKey('facets', $result); $this->assertArrayHasKey('facets', $result);
$this->assertEquals(3, $result['facets']['status_stats']['count']); $this->assertEquals(3, $result['facets']['status_stats']['count']);
$this->assertEquals(4, $result['facets']['status_stats']['total']); // sum of values $this->assertEquals(4, $result['facets']['status_stats']['total']); // sum of values
...@@ -400,10 +380,10 @@ class ActiveRecordTest extends ElasticSearchTestCase ...@@ -400,10 +380,10 @@ class ActiveRecordTest extends ElasticSearchTestCase
$customer->save(false); $customer->save(false);
$this->afterSave(); $this->afterSave();
$customers = $this->callCustomerFind()->where(['status' => true])->all(); $customers = Customer::find()->where(['status' => true])->all();
$this->assertEquals(1, count($customers)); $this->assertEquals(1, count($customers));
$customers = $this->callCustomerFind()->where(['status' => false])->all(); $customers = Customer::find()->where(['status' => false])->all();
$this->assertEquals(2, count($customers)); $this->assertEquals(2, count($customers));
} }
...@@ -411,7 +391,7 @@ class ActiveRecordTest extends ElasticSearchTestCase ...@@ -411,7 +391,7 @@ class ActiveRecordTest extends ElasticSearchTestCase
{ {
/** @var TestCase|ActiveRecordTestTrait $this */ /** @var TestCase|ActiveRecordTestTrait $this */
// indexBy + asArray // indexBy + asArray
$customers = $this->callCustomerFind()->asArray()->fields(['id', 'name'])->all(); $customers = Customer::find()->asArray()->fields(['id', 'name'])->all();
$this->assertEquals(3, count($customers)); $this->assertEquals(3, count($customers));
$this->assertArrayHasKey('id', $customers[0]); $this->assertArrayHasKey('id', $customers[0]);
$this->assertArrayHasKey('name', $customers[0]); $this->assertArrayHasKey('name', $customers[0]);
...@@ -435,7 +415,7 @@ class ActiveRecordTest extends ElasticSearchTestCase ...@@ -435,7 +415,7 @@ class ActiveRecordTest extends ElasticSearchTestCase
$customerClass = $this->getCustomerClass(); $customerClass = $this->getCustomerClass();
/** @var TestCase|ActiveRecordTestTrait $this */ /** @var TestCase|ActiveRecordTestTrait $this */
// indexBy + asArray // indexBy + asArray
$customers = $this->callCustomerFind()->indexBy('name')->fields('id', 'name')->all(); $customers = Customer::find()->indexBy('name')->fields('id', 'name')->all();
$this->assertEquals(3, count($customers)); $this->assertEquals(3, count($customers));
$this->assertTrue($customers['user1'] instanceof $customerClass); $this->assertTrue($customers['user1'] instanceof $customerClass);
$this->assertTrue($customers['user2'] instanceof $customerClass); $this->assertTrue($customers['user2'] instanceof $customerClass);
...@@ -457,7 +437,7 @@ class ActiveRecordTest extends ElasticSearchTestCase ...@@ -457,7 +437,7 @@ class ActiveRecordTest extends ElasticSearchTestCase
$this->assertNull($customers['user3']->status); $this->assertNull($customers['user3']->status);
// indexBy callable + asArray // indexBy callable + asArray
$customers = $this->callCustomerFind()->indexBy(function ($customer) { $customers = Customer::find()->indexBy(function ($customer) {
return $customer->id . '-' . $customer->name; return $customer->id . '-' . $customer->name;
})->fields('id', 'name')->all(); })->fields('id', 'name')->all();
$this->assertEquals(3, count($customers)); $this->assertEquals(3, count($customers));
...@@ -485,7 +465,7 @@ class ActiveRecordTest extends ElasticSearchTestCase ...@@ -485,7 +465,7 @@ class ActiveRecordTest extends ElasticSearchTestCase
{ {
/** @var TestCase|ActiveRecordTestTrait $this */ /** @var TestCase|ActiveRecordTestTrait $this */
// indexBy + asArray // indexBy + asArray
$customers = $this->callCustomerFind()->indexBy('name')->asArray()->fields('id', 'name')->all(); $customers = Customer::find()->indexBy('name')->asArray()->fields('id', 'name')->all();
$this->assertEquals(3, count($customers)); $this->assertEquals(3, count($customers));
$this->assertArrayHasKey('id', $customers['user1']); $this->assertArrayHasKey('id', $customers['user1']);
$this->assertArrayHasKey('name', $customers['user1']); $this->assertArrayHasKey('name', $customers['user1']);
...@@ -504,7 +484,7 @@ class ActiveRecordTest extends ElasticSearchTestCase ...@@ -504,7 +484,7 @@ class ActiveRecordTest extends ElasticSearchTestCase
$this->assertArrayNotHasKey('status', $customers['user3']); $this->assertArrayNotHasKey('status', $customers['user3']);
// indexBy callable + asArray // indexBy callable + asArray
$customers = $this->callCustomerFind()->indexBy(function ($customer) { $customers = Customer::find()->indexBy(function ($customer) {
return $customer['id'] . '-' . $customer['name']; return $customer['id'] . '-' . $customer['name'];
})->asArray()->fields('id', 'name')->all(); })->asArray()->fields('id', 'name')->all();
$this->assertEquals(3, count($customers)); $this->assertEquals(3, count($customers));
......
...@@ -16,26 +16,6 @@ class ActiveRecordTest extends RedisTestCase ...@@ -16,26 +16,6 @@ class ActiveRecordTest extends RedisTestCase
{ {
use ActiveRecordTestTrait; use ActiveRecordTestTrait;
public function callCustomerFind($q = null)
{
return Customer::find($q);
}
public function callOrderFind($q = null)
{
return Order::find($q);
}
public function callOrderItemFind($q = null)
{
return OrderItem::find($q);
}
public function callItemFind($q = null)
{
return Item::find($q);
}
public function getCustomerClass() public function getCustomerClass()
{ {
return Customer::className(); return Customer::className();
...@@ -142,7 +122,7 @@ class ActiveRecordTest extends RedisTestCase ...@@ -142,7 +122,7 @@ class ActiveRecordTest extends RedisTestCase
$this->markTestSkipped('Redis does not support orderBy.'); $this->markTestSkipped('Redis does not support orderBy.');
} }
public function testSatisticalFind() public function testStatisticalFind()
{ {
// find count, sum, average, min, max, scalar // find count, sum, average, min, max, scalar
$this->assertEquals(3, Customer::find()->count()); $this->assertEquals(3, Customer::find()->count());
...@@ -155,19 +135,19 @@ class ActiveRecordTest extends RedisTestCase ...@@ -155,19 +135,19 @@ class ActiveRecordTest extends RedisTestCase
$this->assertEquals(7, OrderItem::find()->sum('quantity')); $this->assertEquals(7, OrderItem::find()->sum('quantity'));
} }
public function testfindIndexBy() public function testFindIndexBy()
{ {
$customerClass = $this->getCustomerClass(); $customerClass = $this->getCustomerClass();
/** @var TestCase|ActiveRecordTestTrait $this */ /** @var TestCase|ActiveRecordTestTrait $this */
// indexBy // indexBy
$customers = $this->callCustomerFind()->indexBy('name')/*->orderBy('id')*/->all(); $customers = Customer::find()->indexBy('name')/*->orderBy('id')*/->all();
$this->assertEquals(3, count($customers)); $this->assertEquals(3, count($customers));
$this->assertTrue($customers['user1'] instanceof $customerClass); $this->assertTrue($customers['user1'] instanceof $customerClass);
$this->assertTrue($customers['user2'] instanceof $customerClass); $this->assertTrue($customers['user2'] instanceof $customerClass);
$this->assertTrue($customers['user3'] instanceof $customerClass); $this->assertTrue($customers['user3'] instanceof $customerClass);
// indexBy callable // indexBy callable
$customers = $this->callCustomerFind()->indexBy(function ($customer) { $customers = Customer::find()->indexBy(function ($customer) {
return $customer->id . '-' . $customer->name; return $customer->id . '-' . $customer->name;
})/*->orderBy('id')*/->all(); // TODO this test is duplicated because of missing orderBy support in redis })/*->orderBy('id')*/->all(); // TODO this test is duplicated because of missing orderBy support in redis
$this->assertEquals(3, count($customers)); $this->assertEquals(3, count($customers));
...@@ -181,50 +161,53 @@ class ActiveRecordTest extends RedisTestCase ...@@ -181,50 +161,53 @@ class ActiveRecordTest extends RedisTestCase
// TODO this test is duplicated because of missing orderBy support in redis // TODO this test is duplicated because of missing orderBy support in redis
/** @var TestCase|ActiveRecordTestTrait $this */ /** @var TestCase|ActiveRecordTestTrait $this */
// all() // all()
$customers = $this->callCustomerFind()->all(); $customers = Customer::find()->all();
$this->assertEquals(3, count($customers)); $this->assertEquals(3, count($customers));
$customers = $this->callCustomerFind()/*->orderBy('id')*/->limit(1)->all(); $customers = Customer::find()/*->orderBy('id')*/->limit(1)->all();
$this->assertEquals(1, count($customers)); $this->assertEquals(1, count($customers));
$this->assertEquals('user1', $customers[0]->name); $this->assertEquals('user1', $customers[0]->name);
$customers = $this->callCustomerFind()/*->orderBy('id')*/->limit(1)->offset(1)->all(); $customers = Customer::find()/*->orderBy('id')*/->limit(1)->offset(1)->all();
$this->assertEquals(1, count($customers)); $this->assertEquals(1, count($customers));
$this->assertEquals('user2', $customers[0]->name); $this->assertEquals('user2', $customers[0]->name);
$customers = $this->callCustomerFind()/*->orderBy('id')*/->limit(1)->offset(2)->all(); $customers = Customer::find()/*->orderBy('id')*/->limit(1)->offset(2)->all();
$this->assertEquals(1, count($customers)); $this->assertEquals(1, count($customers));
$this->assertEquals('user3', $customers[0]->name); $this->assertEquals('user3', $customers[0]->name);
$customers = $this->callCustomerFind()/*->orderBy('id')*/->limit(2)->offset(1)->all(); $customers = Customer::find()/*->orderBy('id')*/->limit(2)->offset(1)->all();
$this->assertEquals(2, count($customers)); $this->assertEquals(2, count($customers));
$this->assertEquals('user2', $customers[0]->name); $this->assertEquals('user2', $customers[0]->name);
$this->assertEquals('user3', $customers[1]->name); $this->assertEquals('user3', $customers[1]->name);
$customers = $this->callCustomerFind()->limit(2)->offset(3)->all(); $customers = Customer::find()->limit(2)->offset(3)->all();
$this->assertEquals(0, count($customers)); $this->assertEquals(0, count($customers));
// one() // one()
$customer = $this->callCustomerFind()/*->orderBy('id')*/->one(); $customer = Customer::find()/*->orderBy('id')*/->one();
$this->assertEquals('user1', $customer->name); $this->assertEquals('user1', $customer->name);
$customer = $this->callCustomerFind()/*->orderBy('id')*/->offset(0)->one(); $customer = Customer::find()/*->orderBy('id')*/->offset(0)->one();
$this->assertEquals('user1', $customer->name); $this->assertEquals('user1', $customer->name);
$customer = $this->callCustomerFind()/*->orderBy('id')*/->offset(1)->one(); $customer = Customer::find()/*->orderBy('id')*/->offset(1)->one();
$this->assertEquals('user2', $customer->name); $this->assertEquals('user2', $customer->name);
$customer = $this->callCustomerFind()/*->orderBy('id')*/->offset(2)->one(); $customer = Customer::find()/*->orderBy('id')*/->offset(2)->one();
$this->assertEquals('user3', $customer->name); $this->assertEquals('user3', $customer->name);
$customer = $this->callCustomerFind()->offset(3)->one(); $customer = Customer::find()->offset(3)->one();
$this->assertNull($customer); $this->assertNull($customer);
} }
public function testFindEagerViaRelation() public function testFindEagerViaRelation()
{ {
/** @var \yii\db\ActiveRecordInterface $orderClass */
$orderClass = $this->getOrderClass();
/** @var TestCase|ActiveRecordTestTrait $this */ /** @var TestCase|ActiveRecordTestTrait $this */
$orders = $this->callOrderFind()->with('items')/*->orderBy('id')*/->all(); // TODO this test is duplicated because of missing orderBy support in redis $orders = $orderClass::find()->with('items')/*->orderBy('id')*/->all(); // TODO this test is duplicated because of missing orderBy support in redis
$this->assertEquals(3, count($orders)); $this->assertEquals(3, count($orders));
$order = $orders[0]; $order = $orders[0];
$this->assertEquals(1, $order->id); $this->assertEquals(1, $order->id);
......
...@@ -26,26 +26,6 @@ class ActiveRecordTest extends DatabaseTestCase ...@@ -26,26 +26,6 @@ class ActiveRecordTest extends DatabaseTestCase
ActiveRecord::$db = $this->getConnection(); ActiveRecord::$db = $this->getConnection();
} }
public function callCustomerFind($q = null)
{
return Customer::find($q);
}
public function callOrderFind($q = null)
{
return Order::find($q);
}
public function callOrderItemFind($q = null)
{
return OrderItem::find($q);
}
public function callItemFind($q = null)
{
return Item::find($q);
}
public function getCustomerClass() public function getCustomerClass()
{ {
return Customer::className(); return Customer::className();
...@@ -69,7 +49,7 @@ class ActiveRecordTest extends DatabaseTestCase ...@@ -69,7 +49,7 @@ class ActiveRecordTest extends DatabaseTestCase
public function testCustomColumns() public function testCustomColumns()
{ {
// find custom column // find custom column
$customer = $this->callCustomerFind()->select(['*', '(status*2) AS status2']) $customer = Customer::find()->select(['*', '(status*2) AS status2'])
->where(['name' => 'user3'])->one(); ->where(['name' => 'user3'])->one();
$this->assertEquals(3, $customer->id); $this->assertEquals(3, $customer->id);
$this->assertEquals(4, $customer->status2); $this->assertEquals(4, $customer->status2);
...@@ -78,19 +58,19 @@ class ActiveRecordTest extends DatabaseTestCase ...@@ -78,19 +58,19 @@ class ActiveRecordTest extends DatabaseTestCase
public function testStatisticalFind() public function testStatisticalFind()
{ {
// find count, sum, average, min, max, scalar // find count, sum, average, min, max, scalar
$this->assertEquals(3, $this->callCustomerFind()->count()); $this->assertEquals(3, Customer::find()->count());
$this->assertEquals(2, $this->callCustomerFind()->where('id=1 OR id=2')->count()); $this->assertEquals(2, Customer::find()->where('id=1 OR id=2')->count());
$this->assertEquals(6, $this->callCustomerFind()->sum('id')); $this->assertEquals(6, Customer::find()->sum('id'));
$this->assertEquals(2, $this->callCustomerFind()->average('id')); $this->assertEquals(2, Customer::find()->average('id'));
$this->assertEquals(1, $this->callCustomerFind()->min('id')); $this->assertEquals(1, Customer::find()->min('id'));
$this->assertEquals(3, $this->callCustomerFind()->max('id')); $this->assertEquals(3, Customer::find()->max('id'));
$this->assertEquals(3, $this->callCustomerFind()->select('COUNT(*)')->scalar()); $this->assertEquals(3, Customer::find()->select('COUNT(*)')->scalar());
} }
public function testFindScalar() public function testFindScalar()
{ {
// query scalar // query scalar
$customerName = $this->callCustomerFind()->where(['id' => 2])->select('name')->scalar(); $customerName = Customer::find()->where(['id' => 2])->select('name')->scalar();
$this->assertEquals('user2', $customerName); $this->assertEquals('user2', $customerName);
} }
...@@ -168,7 +148,7 @@ class ActiveRecordTest extends DatabaseTestCase ...@@ -168,7 +148,7 @@ class ActiveRecordTest extends DatabaseTestCase
public function testDeeplyNestedTableRelation() public function testDeeplyNestedTableRelation()
{ {
/** @var Customer $customer */ /** @var Customer $customer */
$customer = $this->callCustomerFind(1); $customer = Customer::find(1);
$this->assertNotNull($customer); $this->assertNotNull($customer);
$items = $customer->orderItems; $items = $customer->orderItems;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment