Commit f7a6cb9f by Qiang Xue

Refactored AR tests.

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