Browse Source

Unit test for Mongo Active Relation added.

tags/2.0.0-beta
Paul Klimov 11 years ago
parent
commit
3fd6d95aff
  1. 5
      tests/unit/data/ar/mongo/Customer.php
  2. 27
      tests/unit/data/ar/mongo/CustomerOrder.php
  3. 83
      tests/unit/extensions/mongo/ActiveRelationTest.php

5
tests/unit/data/ar/mongo/Customer.php

@ -24,4 +24,9 @@ class Customer extends ActiveRecord
{
$query->andWhere(['status' => 2]);
}
public function getOrders()
{
return $this->hasMany(CustomerOrder::className(), ['customer_id' => 'id']);
}
}

27
tests/unit/data/ar/mongo/CustomerOrder.php

@ -0,0 +1,27 @@
<?php
namespace yiiunit\data\ar\mongo;
class CustomerOrder extends ActiveRecord
{
public static function collectionName()
{
return 'customer_order';
}
public function attributes()
{
return [
'_id',
'number',
'customer_id',
'items',
];
}
public function getCustomer()
{
return $this->hasOne(Customer::className(), ['id' => 'customer_id']);
}
}

83
tests/unit/extensions/mongo/ActiveRelationTest.php

@ -0,0 +1,83 @@
<?php
namespace yiiunit\extensions\mongo;
use yiiunit\data\ar\mongo\ActiveRecord;
use yiiunit\data\ar\mongo\Customer;
use yiiunit\data\ar\mongo\CustomerOrder;
/**
* @group mongo
*/
class ActiveRelationTest extends MongoTestCase
{
protected function setUp()
{
parent::setUp();
ActiveRecord::$db = $this->getConnection();
$this->setUpTestRows();
}
protected function tearDown()
{
$this->dropCollection(Customer::collectionName());
$this->dropCollection(CustomerOrder::collectionName());
parent::tearDown();
}
/**
* Sets up test rows.
*/
protected function setUpTestRows()
{
$customerCollection = $this->getConnection()->getCollection('customer');
$customers = [];
for ($i = 1; $i <= 5; $i++) {
$customers[] = [
'name' => 'name' . $i,
'email' => 'email' . $i,
'address' => 'address' . $i,
'status' => $i,
];
}
$customerCollection->batchInsert($customers);
$customerOrderCollection = $this->getConnection()->getCollection('customer_order');
$customerOrders = [];
foreach ($customers as $customer) {
$customerOrders[] = [
'customer_id' => $customer['_id'],
'number' => $customer['status'],
];
$customerOrders[] = [
'customer_id' => $customer['_id'],
'number' => $customer['status'] + 1,
];
}
$customerOrderCollection->batchInsert($customerOrders);
}
// Tests :
public function testFindLazy()
{
/** @var CustomerOrder $order */
$order = CustomerOrder::find(['number' => 2]);
$this->assertFalse($order->isRelationPopulated('customer'));
$index = $order->customer;
$this->assertTrue($order->isRelationPopulated('customer'));
$this->assertTrue($index instanceof Customer);
$this->assertEquals(1, count($order->populatedRelations));
}
public function testFindEager()
{
$orders = CustomerOrder::find()->with('customer')->all();
$this->assertEquals(10, count($orders));
$this->assertTrue($orders[0]->isRelationPopulated('customer'));
$this->assertTrue($orders[1]->isRelationPopulated('customer'));
$this->assertTrue($orders[0]->index instanceof ArticleIndex);
$this->assertTrue($orders[1]->index instanceof ArticleIndex);
}
}
Loading…
Cancel
Save