Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

<?php namespace yiiunit\framework\ar; use yii\base\Event; use yii\db\ActiveRecordInterfac..

Decoded Output download

<?php
 namespace yiiunitrameworkr; use yiiase\Event; use yii\db\ActiveRecordInterface; use yii\db\BaseActiveRecord; use yii\db\Expression; use yiiunit\datar\Customer; use yiiunit\datar\Order; use yiiunit\TestCase; trait ActiveRecordTestTrait { public abstract function getCustomerClass(); public abstract function getOrderClass(); public abstract function getOrderItemClass(); public abstract function getItemClass(); public abstract function getOrderWithNullFKClass(); public abstract function getOrderItemWithNullFKmClass(); public function afterSave() { } public function testFind() { $customerClass = $this->getCustomerClass(); $result = $customerClass::find(); $this->assertInstanceOf("\yii\db\ActiveQueryInterface", $result); $customer = $result->one(); $this->assertInstanceOf($customerClass, $customer); $customers = $customerClass::find()->all(); $this->assertCount(3, $customers); $this->assertInstanceOf($customerClass, $customers[0]); $this->assertInstanceOf($customerClass, $customers[1]); $this->assertInstanceOf($customerClass, $customers[2]); $customer = $customerClass::findOne(2); $this->assertInstanceOf($customerClass, $customer); $this->assertEquals("user2", $customer->name); $customer = $customerClass::findOne(5); $this->assertNull($customer); $customer = $customerClass::findOne(array("id" => array(5, 6, 1))); $this->assertInstanceOf($customerClass, $customer); $customer = $customerClass::find()->where(array("id" => array(5, 6, 1)))->one(); $this->assertNotNull($customer); $customer = $customerClass::findOne(array("id" => 2, "name" => "user2")); $this->assertInstanceOf($customerClass, $customer); $this->assertEquals("user2", $customer->name); $customer = $customerClass::findOne(array("id" => 2, "name" => "user1")); $this->assertNull($customer); $customer = $customerClass::findOne(array("id" => 5)); $this->assertNull($customer); $customer = $customerClass::findOne(array("name" => "user5")); $this->assertNull($customer); $customer = $customerClass::find()->where(array("name" => "user2"))->one(); $this->assertInstanceOf($customerClass, $customer); $this->assertEquals(2, $customer->id); $customer = $customerClass::findOne(new Expression("[[id]] = :id", array(":id" => 2))); $this->assertInstanceOf($customerClass, $customer); $this->assertEquals("user2", $customer->name); $customer = $customerClass::findOne(new Expression("[[id]] = :id AND [[name]] = :name", array(":id" => 2, ":name" => "user1"))); $this->assertNull($customer); $customer = $customerClass::findOne(new Expression("[[id]] = :id", array(":id" => 5))); $this->assertNull($customer); $customer = $customerClass::findOne(new Expression("[[name]] = :name", array(":name" => "user5"))); $this->assertNull($customer); $this->assertCount(2, $customerClass::find()->active()->all()); $this->assertEquals(2, $customerClass::find()->active()->count()); } public function testFindAsArray() { $customerClass = $this->getCustomerClass(); $customer = $customerClass::find()->where(array("id" => 2))->asArray()->one(); $this->assertEquals(array("id" => 2, "email" => "[email protected]", "name" => "user2", "address" => "address2", "status" => 1, "profile_id" => null), $customer); $customers = $customerClass::find()->asArray()->all(); $this->assertCount(3, $customers); $this->assertArrayHasKey("id", $customers[0]); $this->assertArrayHasKey("name", $customers[0]); $this->assertArrayHasKey("email", $customers[0]); $this->assertArrayHasKey("address", $customers[0]); $this->assertArrayHasKey("status", $customers[0]); $this->assertArrayHasKey("id", $customers[1]); $this->assertArrayHasKey("name", $customers[1]); $this->assertArrayHasKey("email", $customers[1]); $this->assertArrayHasKey("address", $customers[1]); $this->assertArrayHasKey("status", $customers[1]); $this->assertArrayHasKey("id", $customers[2]); $this->assertArrayHasKey("name", $customers[2]); $this->assertArrayHasKey("email", $customers[2]); $this->assertArrayHasKey("address", $customers[2]); $this->assertArrayHasKey("status", $customers[2]); } public function testHasAttribute() { $customerClass = $this->getCustomerClass(); $customer = new $customerClass(); $this->assertTrue($customer->hasAttribute("id")); $this->assertTrue($customer->hasAttribute("email")); $this->assertFalse($customer->hasAttribute(0)); $this->assertFalse($customer->hasAttribute(null)); $this->assertFalse($customer->hasAttribute(42)); $customer = $customerClass::findOne(1); $this->assertTrue($customer->hasAttribute("id")); $this->assertTrue($customer->hasAttribute("email")); $this->assertFalse($customer->hasAttribute(0)); $this->assertFalse($customer->hasAttribute(null)); $this->assertFalse($customer->hasAttribute(42)); } public function testFindScalar() { $customerClass = $this->getCustomerClass(); $customerName = $customerClass::find()->where(array("id" => 2))->scalar("name"); $this->assertEquals("user2", $customerName); $customerName = $customerClass::find()->where(array("status" => 2))->scalar("name"); $this->assertEquals("user3", $customerName); $customerName = $customerClass::find()->where(array("status" => 2))->scalar("noname"); $this->assertNull($customerName); $customerId = $customerClass::find()->where(array("status" => 2))->scalar("id"); $this->assertEquals(3, $customerId); } public function testFindColumn() { $customerClass = $this->getCustomerClass(); $this->assertEquals(array("user1", "user2", "user3"), $customerClass::find()->orderBy(array("name" => SORT_ASC))->column("name")); $this->assertEquals(array("user3", "user2", "user1"), $customerClass::find()->orderBy(array("name" => SORT_DESC))->column("name")); } public function testFindIndexBy() { $customerClass = $this->getCustomerClass(); $customers = $customerClass::find()->indexBy("name")->orderBy("id")->all(); $this->assertCount(3, $customers); $this->assertInstanceOf($customerClass, $customers["user1"]); $this->assertInstanceOf($customerClass, $customers["user2"]); $this->assertInstanceOf($customerClass, $customers["user3"]); $customers = $customerClass::find()->indexBy(function ($customer) { return $customer->id . "-" . $customer->name; })->orderBy("id")->all(); $this->assertCount(3, $customers); $this->assertInstanceOf($customerClass, $customers["1-user1"]); $this->assertInstanceOf($customerClass, $customers["2-user2"]); $this->assertInstanceOf($customerClass, $customers["3-user3"]); } public function testFindIndexByAsArray() { $customerClass = $this->getCustomerClass(); $customers = $customerClass::find()->asArray()->indexBy("name")->all(); $this->assertCount(3, $customers); $this->assertArrayHasKey("id", $customers["user1"]); $this->assertArrayHasKey("name", $customers["user1"]); $this->assertArrayHasKey("email", $customers["user1"]); $this->assertArrayHasKey("address", $customers["user1"]); $this->assertArrayHasKey("status", $customers["user1"]); $this->assertArrayHasKey("id", $customers["user2"]); $this->assertArrayHasKey("name", $customers["user2"]); $this->assertArrayHasKey("email", $customers["user2"]); $this->assertArrayHasKey("address", $customers["user2"]); $this->assertArrayHasKey("status", $customers["user2"]); $this->assertArrayHasKey("id", $customers["user3"]); $this->assertArrayHasKey("name", $customers["user3"]); $this->assertArrayHasKey("email", $customers["user3"]); $this->assertArrayHasKey("address", $customers["user3"]); $this->assertArrayHasKey("status", $customers["user3"]); $customers = $customerClass::find()->indexBy(function ($customer) { return $customer["id"] . "-" . $customer["name"]; })->asArray()->all(); $this->assertCount(3, $customers); $this->assertArrayHasKey("id", $customers["1-user1"]); $this->assertArrayHasKey("name", $customers["1-user1"]); $this->assertArrayHasKey("email", $customers["1-user1"]); $this->assertArrayHasKey("address", $customers["1-user1"]); $this->assertArrayHasKey("status", $customers["1-user1"]); $this->assertArrayHasKey("id", $customers["2-user2"]); $this->assertArrayHasKey("name", $customers["2-user2"]); $this->assertArrayHasKey("email", $customers["2-user2"]); $this->assertArrayHasKey("address", $customers["2-user2"]); $this->assertArrayHasKey("status", $customers["2-user2"]); $this->assertArrayHasKey("id", $customers["3-user3"]); $this->assertArrayHasKey("name", $customers["3-user3"]); $this->assertArrayHasKey("email", $customers["3-user3"]); $this->assertArrayHasKey("address", $customers["3-user3"]); $this->assertArrayHasKey("status", $customers["3-user3"]); } public function testRefresh() { $customerClass = $this->getCustomerClass(); $customer = new $customerClass(); $this->assertFalse($customer->refresh()); $customer = $customerClass::findOne(1); $customer->name = "to be refreshed"; $this->assertTrue($customer->refresh()); $this->assertEquals("user1", $customer->name); } public function testEquals() { $customerClass = $this->getCustomerClass(); $itemClass = $this->getItemClass(); $customerA = new $customerClass(); $customerB = new $customerClass(); $this->assertFalse($customerA->equals($customerB)); $customerA = new $customerClass(); $customerB = new $itemClass(); $this->assertFalse($customerA->equals($customerB)); $customerA = $customerClass::findOne(1); $customerB = $customerClass::findOne(2); $this->assertFalse($customerA->equals($customerB)); $customerB = $customerClass::findOne(1); $this->assertTrue($customerA->equals($customerB)); $customerA = $customerClass::findOne(1); $customerB = $itemClass::findOne(1); $this->assertFalse($customerA->equals($customerB)); } public function testFindCount() { $customerClass = $this->getCustomerClass(); $this->assertEquals(3, $customerClass::find()->count()); $this->assertEquals(1, $customerClass::find()->where(array("id" => 1))->count()); $this->assertEquals(2, $customerClass::find()->where(array("id" => array(1, 2)))->count()); $this->assertEquals(2, $customerClass::find()->where(array("id" => array(1, 2)))->offset(1)->count()); $this->assertEquals(2, $customerClass::find()->where(array("id" => array(1, 2)))->offset(2)->count()); $this->assertEquals(3, $customerClass::find()->limit(1)->count()); $this->assertEquals(3, $customerClass::find()->limit(2)->count()); $this->assertEquals(3, $customerClass::find()->limit(10)->count()); $this->assertEquals(3, $customerClass::find()->offset(2)->limit(2)->count()); } public function testFindLimit() { $customerClass = $this->getCustomerClass(); $customers = $customerClass::find()->all(); $this->assertCount(3, $customers); $customers = $customerClass::find()->orderBy("id")->limit(1)->all(); $this->assertCount(1, $customers); $this->assertEquals("user1", $customers[0]->name); $customers = $customerClass::find()->orderBy("id")->limit(1)->offset(1)->all(); $this->assertCount(1, $customers); $this->assertEquals("user2", $customers[0]->name); $customers = $customerClass::find()->orderBy("id")->limit(1)->offset(2)->all(); $this->assertCount(1, $customers); $this->assertEquals("user3", $customers[0]->name); $customers = $customerClass::find()->orderBy("id")->limit(2)->offset(1)->all(); $this->assertCount(2, $customers); $this->assertEquals("user2", $customers[0]->name); $this->assertEquals("user3", $customers[1]->name); $customers = $customerClass::find()->limit(2)->offset(3)->all(); $this->assertCount(0, $customers); $customer = $customerClass::find()->orderBy("id")->one(); $this->assertEquals("user1", $customer->name); $customer = $customerClass::find()->orderBy("id")->offset(0)->one(); $this->assertEquals("user1", $customer->name); $customer = $customerClass::find()->orderBy("id")->offset(1)->one(); $this->assertEquals("user2", $customer->name); $customer = $customerClass::find()->orderBy("id")->offset(2)->one(); $this->assertEquals("user3", $customer->name); $customer = $customerClass::find()->offset(3)->one(); $this->assertNull($customer); } public function testFindComplexCondition() { $customerClass = $this->getCustomerClass(); $this->assertEquals(2, $customerClass::find()->where(array("OR", array("name" => "user1"), array("name" => "user2")))->count()); $this->assertCount(2, $customerClass::find()->where(array("OR", array("name" => "user1"), array("name" => "user2")))->all()); $this->assertEquals(2, $customerClass::find()->where(array("name" => array("user1", "user2")))->count()); $this->assertCount(2, $customerClass::find()->where(array("name" => array("user1", "user2")))->all()); $this->assertEquals(1, $customerClass::find()->where(array("AND", array("name" => array("user2", "user3")), array("BETWEEN", "status", 2, 4)))->count()); $this->assertCount(1, $customerClass::find()->where(array("AND", array("name" => array("user2", "user3")), array("BETWEEN", "status", 2, 4)))->all()); } public function testFindNullValues() { $customerClass = $this->getCustomerClass(); $customer = $customerClass::findOne(2); $customer->name = null; $customer->save(false); $this->afterSave(); $result = $customerClass::find()->where(array("name" => null))->all(); $this->assertCount(1, $result); $this->assertEquals(2, reset($result)->primaryKey); } public function testExists() { $customerClass = $this->getCustomerClass(); $this->assertTrue($customerClass::find()->where(array("id" => 2))->exists()); $this->assertFalse($customerClass::find()->where(array("id" => 5))->exists()); $this->assertTrue($customerClass::find()->where(array("name" => "user1"))->exists()); $this->assertFalse($customerClass::find()->where(array("name" => "user5"))->exists()); $this->assertTrue($customerClass::find()->where(array("id" => array(2, 3)))->exists()); $this->assertTrue($customerClass::find()->where(array("id" => array(2, 3)))->offset(1)->exists()); $this->assertFalse($customerClass::find()->where(array("id" => array(2, 3)))->offset(2)->exists()); } public function testFindLazy() { $customerClass = $this->getCustomerClass(); $customer = $customerClass::findOne(2); $this->assertFalse($customer->isRelationPopulated("orders")); $orders = $customer->orders; $this->assertTrue($customer->isRelationPopulated("orders")); $this->assertCount(2, $orders); $this->assertCount(1, $customer->relatedRecords); unset($customer["orders"]); $this->assertFalse($customer->isRelationPopulated("orders")); $customer = $customerClass::findOne(2); $this->assertFalse($customer->isRelationPopulated("orders")); $orders = $customer->getOrders()->where(array("id" => 3))->all(); $this->assertFalse($customer->isRelationPopulated("orders")); $this->assertCount(0, $customer->relatedRecords); $this->assertCount(1, $orders); $this->assertEquals(3, $orders[0]->id); } public function testFindEager() { $customerClass = $this->getCustomerClass(); $orderClass = $this->getOrderClass(); $customers = $customerClass::find()->with("orders")->indexBy("id")->all(); ksort($customers); $this->assertCount(3, $customers); $this->assertTrue($customers[1]->isRelationPopulated("orders")); $this->assertTrue($customers[2]->isRelationPopulated("orders")); $this->assertTrue($customers[3]->isRelationPopulated("orders")); $this->assertCount(1, $customers[1]->orders); $this->assertCount(2, $customers[2]->orders); $this->assertCount(0, $customers[3]->orders); unset($customers[1]->orders); $this->assertFalse($customers[1]->isRelationPopulated("orders")); $customer = $customerClass::find()->where(array("id" => 1))->with("orders")->one(); $this->assertTrue($customer->isRelationPopulated("orders")); $this->assertCount(1, $customer->orders); $this->assertCount(1, $customer->relatedRecords); $orders = $orderClass::find()->with("customer", "items")->all(); $this->assertCount(3, $orders); $this->assertTrue($orders[0]->isRelationPopulated("customer")); $this->assertTrue($orders[0]->isRelationPopulated("items")); $orders = $orderClass::find()->with("customer")->with("items")->all(); $this->assertCount(3, $orders); $this->assertTrue($orders[0]->isRelationPopulated("customer")); $this->assertTrue($orders[0]->isRelationPopulated("items")); } public function testFindLazyVia() { $orderClass = $this->getOrderClass(); $order = $orderClass::findOne(1); $this->assertEquals(1, $order->id); $this->assertCount(2, $order->items); $this->assertEquals(1, $order->items[0]->id); $this->assertEquals(2, $order->items[1]->id); } public function testFindLazyVia2() { $orderClass = $this->getOrderClass(); $order = $orderClass::findOne(1); $order->id = 100; $this->assertEquals(array(), $order->items); } public function testFindEagerViaRelation() { $orderClass = $this->getOrderClass(); $orders = $orderClass::find()->with("items")->orderBy("id")->all(); $this->assertCount(3, $orders); $order = $orders[0]; $this->assertEquals(1, $order->id); $this->assertTrue($order->isRelationPopulated("items")); $this->assertCount(2, $order->items); $this->assertEquals(1, $order->items[0]->id); $this->assertEquals(2, $order->items[1]->id); } public function testFindNestedRelation() { $customerClass = $this->getCustomerClass(); $customers = $customerClass::find()->with("orders", "orders.items")->indexBy("id")->all(); ksort($customers); $this->assertCount(3, $customers); $this->assertTrue($customers[1]->isRelationPopulated("orders")); $this->assertTrue($customers[2]->isRelationPopulated("orders")); $this->assertTrue($customers[3]->isRelationPopulated("orders")); $this->assertCount(1, $customers[1]->orders); $this->assertCount(2, $customers[2]->orders); $this->assertCount(0, $customers[3]->orders); $this->assertTrue($customers[1]->orders[0]->isRelationPopulated("items")); $this->assertTrue($customers[2]->orders[0]->isRelationPopulated("items")); $this->assertTrue($customers[2]->orders[1]->isRelationPopulated("items")); $this->assertCount(2, $customers[1]->orders[0]->items); $this->assertCount(3, $customers[2]->orders[0]->items); $this->assertCount(1, $customers[2]->orders[1]->items); $customers = $customerClass::find()->where(array("id" => 1))->with("ordersWithItems")->one(); $this->assertTrue($customers->isRelationPopulated("ordersWithItems")); $this->assertCount(1, $customers->ordersWithItems); $order = $customers->ordersWithItems[0]; $this->assertTrue($order->isRelationPopulated("orderItems")); $this->assertCount(2, $order->orderItems); } public function testFindEagerViaRelationPreserveOrder() { $orderClass = $this->getOrderClass(); $orders = $orderClass::find()->with("itemsInOrder1")->orderBy("created_at")->all(); $this->assertCount(3, $orders); $order = $orders[0]; $this->assertEquals(1, $order->id); $this->assertTrue($order->isRelationPopulated("itemsInOrder1")); $this->assertCount(2, $order->itemsInOrder1); $this->assertEquals(1, $order->itemsInOrder1[0]->id); $this->assertEquals(2, $order->itemsInOrder1[1]->id); $order = $orders[1]; $this->assertEquals(2, $order->id); $this->assertTrue($order->isRelationPopulated("itemsInOrder1")); $this->assertCount(3, $order->itemsInOrder1); $this->assertEquals(5, $order->itemsInOrder1[0]->id); $this->assertEquals(3, $order->itemsInOrder1[1]->id); $this->assertEquals(4, $order->itemsInOrder1[2]->id); $order = $orders[2]; $this->assertEquals(3, $order->id); $this->assertTrue($order->isRelationPopulated("itemsInOrder1")); $this->assertCount(1, $order->itemsInOrder1); $this->assertEquals(2, $order->itemsInOrder1[0]->id); } public function testFindEagerViaRelationPreserveOrderB() { $orderClass = $this->getOrderClass(); $orders = $orderClass::find()->with("itemsInOrder2")->orderBy("created_at")->all(); $this->assertCount(3, $orders); $order = $orders[0]; $this->assertEquals(1, $order->id); $this->assertTrue($order->isRelationPopulated("itemsInOrder2")); $this->assertCount(2, $order->itemsInOrder2); $this->assertEquals(1, $order->itemsInOrder2[0]->id); $this->assertEquals(2, $order->itemsInOrder2[1]->id); $order = $orders[1]; $this->assertEquals(2, $order->id); $this->assertTrue($order->isRelationPopulated("itemsInOrder2")); $this->assertCount(3, $order->itemsInOrder2); $this->assertEquals(5, $order->itemsInOrder2[0]->id); $this->assertEquals(3, $order->itemsInOrder2[1]->id); $this->assertEquals(4, $order->itemsInOrder2[2]->id); $order = $orders[2]; $this->assertEquals(3, $order->id); $this->assertTrue($order->isRelationPopulated("itemsInOrder2")); $this->assertCount(1, $order->itemsInOrder2); $this->assertEquals(2, $order->itemsInOrder2[0]->id); } public function testLink() { $customerClass = $this->getCustomerClass(); $orderClass = $this->getOrderClass(); $orderItemClass = $this->getOrderItemClass(); $itemClass = $this->getItemClass(); $customer = $customerClass::findOne(2); $this->assertCount(2, $customer->orders); $order = new $orderClass(); $order->total = 100; $this->assertTrue($order->isNewRecord); $customer->link("orders", $order); $this->afterSave(); $this->assertCount(3, $customer->orders); $this->assertFalse($order->isNewRecord); $this->assertCount(3, $customer->getOrders()->all()); $this->assertEquals(2, $order->customer_id); $order = new $orderClass(); $order->total = 100; $this->assertTrue($order->isNewRecord); $customer = $customerClass::findOne(1); $this->assertNull($order->customer); $order->link("customer", $customer); $this->assertFalse($order->isNewRecord); $this->assertEquals(1, $order->customer_id); $this->assertEquals(1, $order->customer->primaryKey); $order = $orderClass::findOne(1); $this->assertCount(2, $order->items); $this->assertCount(2, $order->orderItems); $orderItem = $orderItemClass::findOne(array("order_id" => 1, "item_id" => 3)); $this->assertNull($orderItem); $item = $itemClass::findOne(3); $order->link("items", $item, array("quantity" => 10, "subtotal" => 100)); $this->afterSave(); $this->assertCount(3, $order->items); $this->assertCount(3, $order->orderItems); $orderItem = $orderItemClass::findOne(array("order_id" => 1, "item_id" => 3)); $this->assertInstanceOf($orderItemClass, $orderItem); $this->assertEquals(10, $orderItem->quantity); $this->assertEquals(100, $orderItem->subtotal); } public function testUnlink() { $customerClass = $this->getCustomerClass(); $orderClass = $this->getOrderClass(); $orderWithNullFKClass = $this->getOrderWithNullFKClass(); $orderItemsWithNullFKClass = $this->getOrderItemWithNullFKmClass(); $customer = $customerClass::findOne(2); $this->assertCount(2, $customer->ordersWithNullFK); $customer->unlink("ordersWithNullFK", $customer->ordersWithNullFK[1], false); $this->assertCount(1, $customer->ordersWithNullFK); $orderWithNullFK = $orderWithNullFKClass::findOne(3); $this->assertEquals(3, $orderWithNullFK->id); $this->assertNull($orderWithNullFK->customer_id); $customer = $customerClass::findOne(2); $this->assertCount(2, $customer->orders); $customer->unlink("orders", $customer->orders[1], true); $this->afterSave(); $this->assertCount(1, $customer->orders); $this->assertNull($orderClass::findOne(3)); $order = $orderClass::findOne(2); $this->assertCount(3, $order->items); $this->assertCount(3, $order->orderItems); $order->unlink("items", $order->items[2], true); $this->afterSave(); $this->assertCount(2, $order->items); $this->assertCount(2, $order->orderItems); $this->assertCount(2, $order->itemsWithNullFK); $order->unlink("itemsWithNullFK", $order->itemsWithNullFK[1], false); $this->afterSave(); $this->assertCount(1, $order->itemsWithNullFK); $this->assertCount(2, $order->orderItems); } public function testUnlinkAll() { $customerClass = $this->getCustomerClass(); $orderClass = $this->getOrderClass(); $orderItemClass = $this->getOrderItemClass(); $itemClass = $this->getItemClass(); $orderWithNullFKClass = $this->getOrderWithNullFKClass(); $orderItemsWithNullFKClass = $this->getOrderItemWithNullFKmClass(); $customer = $customerClass::findOne(2); $this->assertCount(2, $customer->orders); $this->assertEquals(3, $orderClass::find()->count()); $customer->unlinkAll("orders", true); $this->afterSave(); $this->assertEquals(1, $orderClass::find()->count()); $this->assertCount(0, $customer->orders); $this->assertNull($orderClass::findOne(2)); $this->assertNull($orderClass::findOne(3)); $customer = $customerClass::findOne(2); $this->assertCount(2, $customer->ordersWithNullFK); $this->assertEquals(3, $orderWithNullFKClass::find()->count()); $customer->unlinkAll("ordersWithNullFK", false); $this->afterSave(); $this->assertCount(0, $customer->ordersWithNullFK); $this->assertEquals(3, $orderWithNullFKClass::find()->count()); $this->assertEquals(2, $orderWithNullFKClass::find()->where(array("AND", array("id" => array(2, 3)), array("customer_id" => null)))->count()); $order = $orderClass::findOne(1); $this->assertCount(2, $order->books); $orderItemCount = $orderItemClass::find()->count(); $this->assertEquals(5, $itemClass::find()->count()); $order->unlinkAll("books", true); $this->afterSave(); $this->assertEquals(5, $itemClass::find()->count()); $this->assertEquals($orderItemCount - 2, $orderItemClass::find()->count()); $this->assertCount(0, $order->books); $this->assertCount(2, $order->booksWithNullFK); $orderItemCount = $orderItemsWithNullFKClass::find()->count(); $this->assertEquals(5, $itemClass::find()->count()); $order->unlinkAll("booksWithNullFK", false); $this->afterSave(); $this->assertCount(0, $order->booksWithNullFK); $this->assertEquals(2, $orderItemsWithNullFKClass::find()->where(array("AND", array("item_id" => array(1, 2)), array("order_id" => null)))->count()); $this->assertEquals($orderItemCount, $orderItemsWithNullFKClass::find()->count()); $this->assertEquals(5, $itemClass::find()->count()); } public function testUnlinkAllAndConditionSetNull() { $customerClass = $this->getCustomerClass(); $orderClass = $this->getOrderWithNullFKClass(); $orderClass::updateAll(array("customer_id" => 1)); $this->afterSave(); $customer = $customerClass::findOne(1); $this->assertCount(3, $customer->ordersWithNullFK); $this->assertCount(1, $customer->expensiveOrdersWithNullFK); $this->assertEquals(3, $orderClass::find()->count()); $customer->unlinkAll("expensiveOrdersWithNullFK"); $this->assertCount(3, $customer->ordersWithNullFK); $this->assertCount(0, $customer->expensiveOrdersWithNullFK); $this->assertEquals(3, $orderClass::find()->count()); $customer = $customerClass::findOne(1); $this->assertCount(2, $customer->ordersWithNullFK); $this->assertCount(0, $customer->expensiveOrdersWithNullFK); } public function testUnlinkAllAndConditionDelete() { $customerClass = $this->getCustomerClass(); $orderClass = $this->getOrderClass(); $orderClass::updateAll(array("customer_id" => 1)); $this->afterSave(); $customer = $customerClass::findOne(1); $this->assertCount(3, $customer->orders); $this->assertCount(1, $customer->expensiveOrders); $this->assertEquals(3, $orderClass::find()->count()); $customer->unlinkAll("expensiveOrders", true); $this->assertCount(3, $customer->orders); $this->assertCount(0, $customer->expensiveOrders); $this->assertEquals(2, $orderClass::find()->count()); $customer = $customerClass::findOne(1); $this->assertCount(2, $customer->orders); $this->assertCount(0, $customer->expensiveOrders); } public static $afterSaveNewRecord; public static $afterSaveInsert; public function testInsert() { $customerClass = $this->getCustomerClass(); $customer = new $customerClass(); $customer->email = "[email protected]"; $customer->name = "user4"; $customer->address = "address4"; $this->assertNull($customer->id); $this->assertTrue($customer->isNewRecord); static::$afterSaveNewRecord = null; static::$afterSaveInsert = null; $customer->save(); $this->afterSave(); $this->assertNotNull($customer->id); $this->assertFalse(static::$afterSaveNewRecord); $this->assertTrue(static::$afterSaveInsert); $this->assertFalse($customer->isNewRecord); } public function testExplicitPkOnAutoIncrement() { $customerClass = $this->getCustomerClass(); $customer = new $customerClass(); $customer->id = 1337; $customer->email = "[email protected]"; $customer->name = "user1337"; $customer->address = "address1337"; $this->assertTrue($customer->isNewRecord); $customer->save(); $this->afterSave(); $this->assertEquals(1337, $customer->id); $this->assertFalse($customer->isNewRecord); } public function testUpdate() { $customerClass = $this->getCustomerClass(); $customer = $customerClass::findOne(2); $this->assertInstanceOf($customerClass, $customer); $this->assertEquals("user2", $customer->name); $this->assertFalse($customer->isNewRecord); static::$afterSaveNewRecord = null; static::$afterSaveInsert = null; $this->assertEmpty($customer->dirtyAttributes); $customer->name = "user2x"; $customer->save(); $this->afterSave(); $this->assertEquals("user2x", $customer->name); $this->assertFalse($customer->isNewRecord); $this->assertFalse(static::$afterSaveNewRecord); $this->assertFalse(static::$afterSaveInsert); $customer2 = $customerClass::findOne(2); $this->assertEquals("user2x", $customer2->name); $customer = $customerClass::findOne(3); $this->assertEquals("user3", $customer->name); $ret = $customerClass::updateAll(array("name" => "temp"), array("id" => 3)); $this->afterSave(); $this->assertEquals(1, $ret); $customer = $customerClass::findOne(3); $this->assertEquals("temp", $customer->name); $ret = $customerClass::updateAll(array("name" => "tempX")); $this->afterSave(); $this->assertEquals(3, $ret); $ret = $customerClass::updateAll(array("name" => "temp"), array("name" => "user6")); $this->afterSave(); $this->assertEquals(0, $ret); } public function testUpdateAttributes() { $customerClass = $this->getCustomerClass(); $customer = $customerClass::findOne(2); $this->assertInstanceOf($customerClass, $customer); $this->assertEquals("user2", $customer->name); $this->assertFalse($customer->isNewRecord); static::$afterSaveNewRecord = null; static::$afterSaveInsert = null; $customer->updateAttributes(array("name" => "user2x")); $this->afterSave(); $this->assertEquals("user2x", $customer->name); $this->assertFalse($customer->isNewRecord); $this->assertNull(static::$afterSaveNewRecord); $this->assertNull(static::$afterSaveInsert); $customer2 = $customerClass::findOne(2); $this->assertEquals("user2x", $customer2->name); $customer = $customerClass::findOne(1); $this->assertEquals("user1", $customer->name); $this->assertEquals(1, $customer->status); $customer->name = "user1x"; $customer->status = 2; $customer->updateAttributes(array("name")); $this->assertEquals("user1x", $customer->name); $this->assertEquals(2, $customer->status); $customer = $customerClass::findOne(1); $this->assertEquals("user1x", $customer->name); $this->assertEquals(1, $customer->status); } public function testUpdateCounters() { $orderItemClass = $this->getOrderItemClass(); $pk = array("order_id" => 2, "item_id" => 4); $orderItem = $orderItemClass::findOne($pk); $this->assertEquals(1, $orderItem->quantity); $ret = $orderItem->updateCounters(array("quantity" => -1)); $this->afterSave(); $this->assertEquals(1, $ret); $this->assertEquals(0, $orderItem->quantity); $orderItem = $orderItemClass::findOne($pk); $this->assertEquals(0, $orderItem->quantity); $pk = array("order_id" => 1, "item_id" => 2); $orderItem = $orderItemClass::findOne($pk); $this->assertEquals(2, $orderItem->quantity); $ret = $orderItemClass::updateAllCounters(array("quantity" => 3, "subtotal" => -10), $pk); $this->afterSave(); $this->assertEquals(1, $ret); $orderItem = $orderItemClass::findOne($pk); $this->assertEquals(5, $orderItem->quantity); $this->assertEquals(30, $orderItem->subtotal); } public function testDelete() { $customerClass = $this->getCustomerClass(); $customer = $customerClass::findOne(2); $this->assertInstanceOf($customerClass, $customer); $this->assertEquals("user2", $customer->name); $customer->delete(); $this->afterSave(); $customer = $customerClass::findOne(2); $this->assertNull($customer); $customers = $customerClass::find()->all(); $this->assertCount(2, $customers); $ret = $customerClass::deleteAll(); $this->afterSave(); $this->assertEquals(2, $ret); $customers = $customerClass::find()->all(); $this->assertCount(0, $customers); $ret = $customerClass::deleteAll(); $this->afterSave(); $this->assertEquals(0, $ret); } public function testBooleanAttribute() { $customerClass = $this->getCustomerClass(); $customer = new $customerClass(); $customer->name = "boolean customer"; $customer->email = "[email protected]"; $customer->status = true; $customer->save(false); $customer->refresh(); $this->assertEquals(1, $customer->status); $customer->status = false; $customer->save(false); $customer->refresh(); $this->assertEquals(0, $customer->status); $customers = $customerClass::find()->where(array("status" => true))->all(); $this->assertCount(2, $customers); $customers = $customerClass::find()->where(array("status" => false))->all(); $this->assertCount(1, $customers); } public function testAfterFind() { $customerClass = $this->getCustomerClass(); $orderClass = $this->getOrderClass(); $afterFindCalls = array(); Event::on(BaseActiveRecord::className(), BaseActiveRecord::EVENT_AFTER_FIND, function ($event) use(&$afterFindCalls) { $ar = $event->sender; $afterFindCalls[] = array(\get_class($ar), $ar->getIsNewRecord(), $ar->getPrimaryKey(), $ar->isRelationPopulated("orders")); }); $customer = $customerClass::findOne(1); $this->assertNotNull($customer); $this->assertEquals(array(array($customerClass, false, 1, false)), $afterFindCalls); $afterFindCalls = array(); $customer = $customerClass::find()->where(array("id" => 1))->one(); $this->assertNotNull($customer); $this->assertEquals(array(array($customerClass, false, 1, false)), $afterFindCalls); $afterFindCalls = array(); $customer = $customerClass::find()->where(array("id" => 1))->all(); $this->assertNotNull($customer); $this->assertEquals(array(array($customerClass, false, 1, false)), $afterFindCalls); $afterFindCalls = array(); $customer = $customerClass::find()->where(array("id" => 1))->with("orders")->all(); $this->assertNotNull($customer); $this->assertEquals(array(array($this->getOrderClass(), false, 1, false), array($customerClass, false, 1, true)), $afterFindCalls); $afterFindCalls = array(); if ($this instanceof \yiiunit\extensions
edis\ActiveRecordTest) { $customer = $customerClass::find()->where(array("id" => array(1, 2)))->with("orders")->all(); } else { $customer = $customerClass::find()->where(array("id" => array(1, 2)))->with("orders")->orderBy("name")->all(); } $this->assertNotNull($customer); $this->assertEquals(array(array($orderClass, false, 1, false), array($orderClass, false, 2, false), array($orderClass, false, 3, false), array($customerClass, false, 1, true), array($customerClass, false, 2, true)), $afterFindCalls); $afterFindCalls = array(); Event::off(BaseActiveRecord::className(), BaseActiveRecord::EVENT_AFTER_FIND); } public function testAfterRefresh() { $customerClass = $this->getCustomerClass(); $afterRefreshCalls = array(); Event::on(BaseActiveRecord::className(), BaseActiveRecord::EVENT_AFTER_REFRESH, function ($event) use(&$afterRefreshCalls) { $ar = $event->sender; $afterRefreshCalls[] = array(\get_class($ar), $ar->getIsNewRecord(), $ar->getPrimaryKey(), $ar->isRelationPopulated("orders")); }); $customer = $customerClass::findOne(1); $this->assertNotNull($customer); $customer->refresh(); $this->assertEquals(array(array($customerClass, false, 1, false)), $afterRefreshCalls); $afterRefreshCalls = array(); Event::off(BaseActiveRecord::className(), BaseActiveRecord::EVENT_AFTER_REFRESH); } public function testFindEmptyInCondition() { $customerClass = $this->getCustomerClass(); $customers = $customerClass::find()->where(array("id" => array(1)))->all(); $this->assertCount(1, $customers); $customers = $customerClass::find()->where(array("id" => array()))->all(); $this->assertCount(0, $customers); $customers = $customerClass::find()->where(array("IN", "id", array(1)))->all(); $this->assertCount(1, $customers); $customers = $customerClass::find()->where(array("IN", "id", array()))->all(); $this->assertCount(0, $customers); } public function testFindEagerIndexBy() { $orderClass = $this->getOrderClass(); $order = $orderClass::find()->with("itemsIndexed")->where(array("id" => 1))->one(); $this->assertTrue($order->isRelationPopulated("itemsIndexed")); $items = $order->itemsIndexed; $this->assertCount(2, $items); $this->assertTrue(isset($items[1])); $this->assertTrue(isset($items[2])); $order = $orderClass::find()->with("itemsIndexed")->where(array("id" => 2))->one(); $this->assertTrue($order->isRelationPopulated("itemsIndexed")); $items = $order->itemsIndexed; $this->assertCount(3, $items); $this->assertTrue(isset($items[3])); $this->assertTrue(isset($items[4])); $this->assertTrue(isset($items[5])); } public function testAttributeAccess() { $customerClass = $this->getCustomerClass(); $model = new $customerClass(); $this->assertTrue($model->canSetProperty("name")); $this->assertTrue($model->canGetProperty("name")); $this->assertFalse($model->canSetProperty("unExistingColumn")); $this->assertFalse(isset($model->name)); $model->name = "foo"; $this->assertTrue(isset($model->name)); unset($model->name); $this->assertNull($model->name); $baseModel = new $customerClass(); $this->assertFalse($baseModel->hasProperty("unExistingColumn")); $customer = new $customerClass(); $this->assertInstanceOf($customerClass, $customer); $this->assertTrue($customer->canGetProperty("id")); $this->assertTrue($customer->canSetProperty("id")); $this->assertNull($customer->id); $customer->id = 10; $this->assertNotNull($customer->id); $this->assertTrue($customer->canGetProperty("orderItems")); $this->assertFalse($customer->canSetProperty("orderItems")); $this->assertSame(array(), $customer->orderItems); $this->assertTrue($customer->canGetProperty("orderItems")); $this->assertFalse($customer->canSetProperty("orderItems")); try { $itemClass = $this->getItemClass(); $customer->orderItems = array(new $itemClass()); $this->fail("setter call above MUST throw Exception"); } catch (\Exception $e) { $this->assertInstanceOf("yiiase\InvalidCallException", $e); } $this->assertSame(array(), $customer->orderItems); $this->assertFalse($customer->canGetProperty("non_existing_property")); $this->assertFalse($customer->canSetProperty("non_existing_property")); } public function testViaWithCallable() { $orderClass = $this->getOrderClass(); $order = $orderClass::findOne(2); $expensiveItems = $order->expensiveItemsUsingViaWithCallable; $cheapItems = $order->cheapItemsUsingViaWithCallable; $this->assertCount(2, $expensiveItems); $this->assertEquals(4, $expensiveItems[0]->id); $this->assertEquals(5, $expensiveItems[1]->id); $this->assertCount(1, $cheapItems); $this->assertEquals(3, $cheapItems[0]->id); } } ?>

Did this file decode correctly?

Original Code

<?php
 namespace yiiunit\framework\ar; use yii\base\Event; use yii\db\ActiveRecordInterface; use yii\db\BaseActiveRecord; use yii\db\Expression; use yiiunit\data\ar\Customer; use yiiunit\data\ar\Order; use yiiunit\TestCase; trait ActiveRecordTestTrait { public abstract function getCustomerClass(); public abstract function getOrderClass(); public abstract function getOrderItemClass(); public abstract function getItemClass(); public abstract function getOrderWithNullFKClass(); public abstract function getOrderItemWithNullFKmClass(); public function afterSave() { } public function testFind() { $customerClass = $this->getCustomerClass(); $result = $customerClass::find(); $this->assertInstanceOf("\134\x79\x69\151\134\x64\142\x5c\x41\143\x74\151\x76\x65\x51\x75\145\x72\x79\111\x6e\164\145\162\146\x61\x63\x65", $result); $customer = $result->one(); $this->assertInstanceOf($customerClass, $customer); $customers = $customerClass::find()->all(); $this->assertCount(3, $customers); $this->assertInstanceOf($customerClass, $customers[0]); $this->assertInstanceOf($customerClass, $customers[1]); $this->assertInstanceOf($customerClass, $customers[2]); $customer = $customerClass::findOne(2); $this->assertInstanceOf($customerClass, $customer); $this->assertEquals("\x75\x73\145\x72\x32", $customer->name); $customer = $customerClass::findOne(5); $this->assertNull($customer); $customer = $customerClass::findOne(array("\151\144" => array(5, 6, 1))); $this->assertInstanceOf($customerClass, $customer); $customer = $customerClass::find()->where(array("\x69\x64" => array(5, 6, 1)))->one(); $this->assertNotNull($customer); $customer = $customerClass::findOne(array("\x69\144" => 2, "\x6e\141\x6d\x65" => "\165\163\x65\x72\62")); $this->assertInstanceOf($customerClass, $customer); $this->assertEquals("\165\x73\x65\x72\x32", $customer->name); $customer = $customerClass::findOne(array("\151\144" => 2, "\x6e\141\155\x65" => "\165\x73\x65\x72\61")); $this->assertNull($customer); $customer = $customerClass::findOne(array("\151\x64" => 5)); $this->assertNull($customer); $customer = $customerClass::findOne(array("\156\x61\155\145" => "\165\x73\x65\162\65")); $this->assertNull($customer); $customer = $customerClass::find()->where(array("\156\141\x6d\x65" => "\165\x73\x65\162\62"))->one(); $this->assertInstanceOf($customerClass, $customer); $this->assertEquals(2, $customer->id); $customer = $customerClass::findOne(new Expression("\133\x5b\151\x64\x5d\x5d\x20\75\40\x3a\x69\x64", array("\x3a\x69\144" => 2))); $this->assertInstanceOf($customerClass, $customer); $this->assertEquals("\x75\x73\x65\x72\62", $customer->name); $customer = $customerClass::findOne(new Expression("\x5b\133\x69\144\135\x5d\40\75\40\72\x69\x64\40\101\x4e\x44\40\x5b\133\156\141\155\x65\135\135\40\x3d\x20\72\156\141\x6d\x65", array("\72\x69\x64" => 2, "\72\156\x61\155\145" => "\165\x73\145\x72\x31"))); $this->assertNull($customer); $customer = $customerClass::findOne(new Expression("\x5b\x5b\151\x64\x5d\x5d\x20\75\40\72\151\144", array("\x3a\x69\144" => 5))); $this->assertNull($customer); $customer = $customerClass::findOne(new Expression("\133\133\x6e\141\x6d\x65\x5d\x5d\40\x3d\x20\x3a\x6e\141\x6d\145", array("\72\x6e\x61\x6d\x65" => "\x75\163\x65\x72\65"))); $this->assertNull($customer); $this->assertCount(2, $customerClass::find()->active()->all()); $this->assertEquals(2, $customerClass::find()->active()->count()); } public function testFindAsArray() { $customerClass = $this->getCustomerClass(); $customer = $customerClass::find()->where(array("\x69\144" => 2))->asArray()->one(); $this->assertEquals(array("\x69\x64" => 2, "\x65\x6d\x61\x69\154" => "\165\163\145\162\x32\x40\x65\170\141\155\x70\154\145\x2e\x63\157\155", "\x6e\x61\x6d\x65" => "\165\163\x65\162\x32", "\x61\x64\x64\162\x65\163\163" => "\141\144\144\x72\145\x73\163\62", "\x73\164\x61\164\x75\163" => 1, "\x70\162\157\x66\151\x6c\145\x5f\x69\x64" => null), $customer); $customers = $customerClass::find()->asArray()->all(); $this->assertCount(3, $customers); $this->assertArrayHasKey("\x69\144", $customers[0]); $this->assertArrayHasKey("\x6e\x61\155\x65", $customers[0]); $this->assertArrayHasKey("\x65\155\x61\151\x6c", $customers[0]); $this->assertArrayHasKey("\x61\x64\144\162\145\x73\x73", $customers[0]); $this->assertArrayHasKey("\x73\164\141\164\165\x73", $customers[0]); $this->assertArrayHasKey("\151\x64", $customers[1]); $this->assertArrayHasKey("\x6e\141\155\145", $customers[1]); $this->assertArrayHasKey("\145\x6d\x61\151\154", $customers[1]); $this->assertArrayHasKey("\x61\144\x64\162\145\163\x73", $customers[1]); $this->assertArrayHasKey("\163\164\141\164\x75\163", $customers[1]); $this->assertArrayHasKey("\151\x64", $customers[2]); $this->assertArrayHasKey("\x6e\141\155\145", $customers[2]); $this->assertArrayHasKey("\x65\x6d\141\x69\x6c", $customers[2]); $this->assertArrayHasKey("\x61\x64\144\162\145\x73\163", $customers[2]); $this->assertArrayHasKey("\x73\164\x61\x74\x75\x73", $customers[2]); } public function testHasAttribute() { $customerClass = $this->getCustomerClass(); $customer = new $customerClass(); $this->assertTrue($customer->hasAttribute("\151\x64")); $this->assertTrue($customer->hasAttribute("\145\155\141\x69\154")); $this->assertFalse($customer->hasAttribute(0)); $this->assertFalse($customer->hasAttribute(null)); $this->assertFalse($customer->hasAttribute(42)); $customer = $customerClass::findOne(1); $this->assertTrue($customer->hasAttribute("\151\x64")); $this->assertTrue($customer->hasAttribute("\x65\x6d\141\x69\154")); $this->assertFalse($customer->hasAttribute(0)); $this->assertFalse($customer->hasAttribute(null)); $this->assertFalse($customer->hasAttribute(42)); } public function testFindScalar() { $customerClass = $this->getCustomerClass(); $customerName = $customerClass::find()->where(array("\x69\144" => 2))->scalar("\156\141\155\x65"); $this->assertEquals("\x75\x73\x65\x72\x32", $customerName); $customerName = $customerClass::find()->where(array("\163\164\x61\164\165\163" => 2))->scalar("\156\141\x6d\145"); $this->assertEquals("\x75\x73\145\x72\63", $customerName); $customerName = $customerClass::find()->where(array("\x73\164\141\164\165\x73" => 2))->scalar("\156\x6f\x6e\141\155\x65"); $this->assertNull($customerName); $customerId = $customerClass::find()->where(array("\163\x74\141\164\x75\163" => 2))->scalar("\x69\144"); $this->assertEquals(3, $customerId); } public function testFindColumn() { $customerClass = $this->getCustomerClass(); $this->assertEquals(array("\165\163\x65\162\x31", "\165\163\x65\x72\62", "\x75\163\145\162\63"), $customerClass::find()->orderBy(array("\156\141\x6d\145" => SORT_ASC))->column("\x6e\x61\x6d\145")); $this->assertEquals(array("\165\x73\x65\162\63", "\x75\x73\145\x72\x32", "\x75\163\145\162\61"), $customerClass::find()->orderBy(array("\156\141\x6d\145" => SORT_DESC))->column("\156\x61\x6d\x65")); } public function testFindIndexBy() { $customerClass = $this->getCustomerClass(); $customers = $customerClass::find()->indexBy("\x6e\141\x6d\145")->orderBy("\x69\x64")->all(); $this->assertCount(3, $customers); $this->assertInstanceOf($customerClass, $customers["\165\x73\145\x72\x31"]); $this->assertInstanceOf($customerClass, $customers["\165\163\145\x72\x32"]); $this->assertInstanceOf($customerClass, $customers["\x75\x73\145\162\x33"]); $customers = $customerClass::find()->indexBy(function ($customer) { return $customer->id . "\55" . $customer->name; })->orderBy("\x69\144")->all(); $this->assertCount(3, $customers); $this->assertInstanceOf($customerClass, $customers["\x31\x2d\165\x73\145\162\x31"]); $this->assertInstanceOf($customerClass, $customers["\62\55\165\163\x65\162\62"]); $this->assertInstanceOf($customerClass, $customers["\63\55\x75\163\x65\x72\63"]); } public function testFindIndexByAsArray() { $customerClass = $this->getCustomerClass(); $customers = $customerClass::find()->asArray()->indexBy("\156\141\x6d\145")->all(); $this->assertCount(3, $customers); $this->assertArrayHasKey("\151\x64", $customers["\x75\163\x65\162\61"]); $this->assertArrayHasKey("\x6e\x61\155\145", $customers["\165\163\145\162\61"]); $this->assertArrayHasKey("\145\155\141\x69\154", $customers["\165\x73\145\x72\x31"]); $this->assertArrayHasKey("\x61\x64\144\x72\145\x73\163", $customers["\x75\x73\x65\162\61"]); $this->assertArrayHasKey("\x73\164\x61\x74\x75\163", $customers["\x75\x73\145\x72\x31"]); $this->assertArrayHasKey("\x69\x64", $customers["\165\x73\145\162\x32"]); $this->assertArrayHasKey("\x6e\x61\155\x65", $customers["\165\163\x65\x72\62"]); $this->assertArrayHasKey("\145\155\141\x69\x6c", $customers["\x75\x73\145\162\x32"]); $this->assertArrayHasKey("\141\x64\144\x72\x65\163\163", $customers["\x75\x73\x65\x72\62"]); $this->assertArrayHasKey("\163\164\141\x74\x75\163", $customers["\x75\163\145\x72\62"]); $this->assertArrayHasKey("\151\x64", $customers["\165\163\x65\x72\63"]); $this->assertArrayHasKey("\x6e\141\155\145", $customers["\x75\x73\145\x72\63"]); $this->assertArrayHasKey("\145\x6d\x61\x69\154", $customers["\165\x73\x65\x72\x33"]); $this->assertArrayHasKey("\141\x64\x64\162\x65\x73\x73", $customers["\165\163\145\162\63"]); $this->assertArrayHasKey("\163\164\x61\x74\x75\163", $customers["\x75\163\145\x72\63"]); $customers = $customerClass::find()->indexBy(function ($customer) { return $customer["\x69\144"] . "\x2d" . $customer["\x6e\141\x6d\145"]; })->asArray()->all(); $this->assertCount(3, $customers); $this->assertArrayHasKey("\x69\x64", $customers["\61\x2d\x75\x73\145\162\x31"]); $this->assertArrayHasKey("\x6e\x61\155\x65", $customers["\x31\55\x75\x73\x65\x72\x31"]); $this->assertArrayHasKey("\x65\x6d\x61\x69\x6c", $customers["\x31\55\x75\163\x65\x72\61"]); $this->assertArrayHasKey("\x61\144\144\162\145\x73\163", $customers["\x31\55\x75\x73\x65\162\61"]); $this->assertArrayHasKey("\163\164\x61\x74\165\x73", $customers["\61\55\165\163\x65\162\x31"]); $this->assertArrayHasKey("\151\x64", $customers["\62\x2d\165\x73\x65\x72\62"]); $this->assertArrayHasKey("\156\141\x6d\x65", $customers["\62\55\x75\x73\145\x72\62"]); $this->assertArrayHasKey("\x65\155\x61\x69\x6c", $customers["\62\x2d\x75\163\x65\x72\62"]); $this->assertArrayHasKey("\141\144\x64\162\x65\163\x73", $customers["\62\55\165\163\x65\162\x32"]); $this->assertArrayHasKey("\163\x74\141\x74\x75\x73", $customers["\x32\55\165\x73\x65\x72\x32"]); $this->assertArrayHasKey("\151\x64", $customers["\x33\55\x75\163\145\162\63"]); $this->assertArrayHasKey("\156\141\x6d\x65", $customers["\x33\x2d\165\163\145\162\63"]); $this->assertArrayHasKey("\145\x6d\x61\x69\154", $customers["\x33\55\x75\x73\x65\162\63"]); $this->assertArrayHasKey("\x61\144\x64\162\145\x73\163", $customers["\63\x2d\165\x73\145\x72\x33"]); $this->assertArrayHasKey("\x73\x74\141\x74\165\x73", $customers["\x33\55\x75\163\x65\162\63"]); } public function testRefresh() { $customerClass = $this->getCustomerClass(); $customer = new $customerClass(); $this->assertFalse($customer->refresh()); $customer = $customerClass::findOne(1); $customer->name = "\x74\x6f\40\142\x65\x20\x72\x65\x66\162\145\163\x68\145\x64"; $this->assertTrue($customer->refresh()); $this->assertEquals("\165\x73\x65\x72\x31", $customer->name); } public function testEquals() { $customerClass = $this->getCustomerClass(); $itemClass = $this->getItemClass(); $customerA = new $customerClass(); $customerB = new $customerClass(); $this->assertFalse($customerA->equals($customerB)); $customerA = new $customerClass(); $customerB = new $itemClass(); $this->assertFalse($customerA->equals($customerB)); $customerA = $customerClass::findOne(1); $customerB = $customerClass::findOne(2); $this->assertFalse($customerA->equals($customerB)); $customerB = $customerClass::findOne(1); $this->assertTrue($customerA->equals($customerB)); $customerA = $customerClass::findOne(1); $customerB = $itemClass::findOne(1); $this->assertFalse($customerA->equals($customerB)); } public function testFindCount() { $customerClass = $this->getCustomerClass(); $this->assertEquals(3, $customerClass::find()->count()); $this->assertEquals(1, $customerClass::find()->where(array("\151\144" => 1))->count()); $this->assertEquals(2, $customerClass::find()->where(array("\151\x64" => array(1, 2)))->count()); $this->assertEquals(2, $customerClass::find()->where(array("\x69\144" => array(1, 2)))->offset(1)->count()); $this->assertEquals(2, $customerClass::find()->where(array("\x69\144" => array(1, 2)))->offset(2)->count()); $this->assertEquals(3, $customerClass::find()->limit(1)->count()); $this->assertEquals(3, $customerClass::find()->limit(2)->count()); $this->assertEquals(3, $customerClass::find()->limit(10)->count()); $this->assertEquals(3, $customerClass::find()->offset(2)->limit(2)->count()); } public function testFindLimit() { $customerClass = $this->getCustomerClass(); $customers = $customerClass::find()->all(); $this->assertCount(3, $customers); $customers = $customerClass::find()->orderBy("\x69\144")->limit(1)->all(); $this->assertCount(1, $customers); $this->assertEquals("\x75\x73\x65\x72\x31", $customers[0]->name); $customers = $customerClass::find()->orderBy("\x69\144")->limit(1)->offset(1)->all(); $this->assertCount(1, $customers); $this->assertEquals("\x75\x73\145\x72\62", $customers[0]->name); $customers = $customerClass::find()->orderBy("\x69\x64")->limit(1)->offset(2)->all(); $this->assertCount(1, $customers); $this->assertEquals("\165\163\x65\x72\63", $customers[0]->name); $customers = $customerClass::find()->orderBy("\151\x64")->limit(2)->offset(1)->all(); $this->assertCount(2, $customers); $this->assertEquals("\x75\163\x65\162\x32", $customers[0]->name); $this->assertEquals("\165\x73\x65\x72\63", $customers[1]->name); $customers = $customerClass::find()->limit(2)->offset(3)->all(); $this->assertCount(0, $customers); $customer = $customerClass::find()->orderBy("\151\x64")->one(); $this->assertEquals("\x75\x73\145\162\61", $customer->name); $customer = $customerClass::find()->orderBy("\x69\x64")->offset(0)->one(); $this->assertEquals("\x75\x73\x65\x72\61", $customer->name); $customer = $customerClass::find()->orderBy("\x69\144")->offset(1)->one(); $this->assertEquals("\165\x73\145\x72\62", $customer->name); $customer = $customerClass::find()->orderBy("\x69\x64")->offset(2)->one(); $this->assertEquals("\x75\163\x65\162\x33", $customer->name); $customer = $customerClass::find()->offset(3)->one(); $this->assertNull($customer); } public function testFindComplexCondition() { $customerClass = $this->getCustomerClass(); $this->assertEquals(2, $customerClass::find()->where(array("\117\x52", array("\156\141\x6d\x65" => "\165\x73\145\162\x31"), array("\156\141\x6d\x65" => "\165\x73\x65\x72\x32")))->count()); $this->assertCount(2, $customerClass::find()->where(array("\x4f\122", array("\x6e\x61\155\145" => "\x75\x73\x65\x72\61"), array("\156\x61\x6d\145" => "\x75\163\145\x72\62")))->all()); $this->assertEquals(2, $customerClass::find()->where(array("\x6e\x61\155\x65" => array("\165\x73\x65\162\61", "\x75\163\145\162\x32")))->count()); $this->assertCount(2, $customerClass::find()->where(array("\x6e\x61\155\x65" => array("\x75\x73\x65\x72\61", "\x75\163\145\x72\62")))->all()); $this->assertEquals(1, $customerClass::find()->where(array("\101\x4e\104", array("\x6e\x61\x6d\145" => array("\165\x73\x65\x72\62", "\165\x73\x65\162\63")), array("\x42\105\x54\127\x45\105\116", "\x73\x74\x61\164\x75\163", 2, 4)))->count()); $this->assertCount(1, $customerClass::find()->where(array("\101\116\104", array("\156\x61\x6d\x65" => array("\x75\163\145\x72\x32", "\165\163\145\162\63")), array("\102\105\x54\127\x45\x45\116", "\163\x74\141\164\165\x73", 2, 4)))->all()); } public function testFindNullValues() { $customerClass = $this->getCustomerClass(); $customer = $customerClass::findOne(2); $customer->name = null; $customer->save(false); $this->afterSave(); $result = $customerClass::find()->where(array("\156\141\x6d\x65" => null))->all(); $this->assertCount(1, $result); $this->assertEquals(2, reset($result)->primaryKey); } public function testExists() { $customerClass = $this->getCustomerClass(); $this->assertTrue($customerClass::find()->where(array("\x69\144" => 2))->exists()); $this->assertFalse($customerClass::find()->where(array("\x69\144" => 5))->exists()); $this->assertTrue($customerClass::find()->where(array("\x6e\x61\155\x65" => "\165\x73\145\x72\x31"))->exists()); $this->assertFalse($customerClass::find()->where(array("\156\141\155\x65" => "\165\163\x65\x72\65"))->exists()); $this->assertTrue($customerClass::find()->where(array("\151\144" => array(2, 3)))->exists()); $this->assertTrue($customerClass::find()->where(array("\151\144" => array(2, 3)))->offset(1)->exists()); $this->assertFalse($customerClass::find()->where(array("\x69\144" => array(2, 3)))->offset(2)->exists()); } public function testFindLazy() { $customerClass = $this->getCustomerClass(); $customer = $customerClass::findOne(2); $this->assertFalse($customer->isRelationPopulated("\157\x72\144\x65\x72\163")); $orders = $customer->orders; $this->assertTrue($customer->isRelationPopulated("\157\162\x64\x65\162\x73")); $this->assertCount(2, $orders); $this->assertCount(1, $customer->relatedRecords); unset($customer["\x6f\162\x64\x65\x72\163"]); $this->assertFalse($customer->isRelationPopulated("\x6f\162\x64\x65\x72\x73")); $customer = $customerClass::findOne(2); $this->assertFalse($customer->isRelationPopulated("\157\x72\144\x65\x72\x73")); $orders = $customer->getOrders()->where(array("\x69\144" => 3))->all(); $this->assertFalse($customer->isRelationPopulated("\157\x72\144\145\x72\163")); $this->assertCount(0, $customer->relatedRecords); $this->assertCount(1, $orders); $this->assertEquals(3, $orders[0]->id); } public function testFindEager() { $customerClass = $this->getCustomerClass(); $orderClass = $this->getOrderClass(); $customers = $customerClass::find()->with("\x6f\162\x64\145\x72\163")->indexBy("\151\x64")->all(); ksort($customers); $this->assertCount(3, $customers); $this->assertTrue($customers[1]->isRelationPopulated("\x6f\x72\144\145\x72\x73")); $this->assertTrue($customers[2]->isRelationPopulated("\157\x72\144\145\x72\163")); $this->assertTrue($customers[3]->isRelationPopulated("\x6f\162\144\145\x72\x73")); $this->assertCount(1, $customers[1]->orders); $this->assertCount(2, $customers[2]->orders); $this->assertCount(0, $customers[3]->orders); unset($customers[1]->orders); $this->assertFalse($customers[1]->isRelationPopulated("\x6f\162\144\x65\x72\x73")); $customer = $customerClass::find()->where(array("\151\x64" => 1))->with("\x6f\162\x64\145\x72\x73")->one(); $this->assertTrue($customer->isRelationPopulated("\157\162\x64\x65\x72\x73")); $this->assertCount(1, $customer->orders); $this->assertCount(1, $customer->relatedRecords); $orders = $orderClass::find()->with("\x63\x75\x73\164\157\x6d\x65\162", "\151\164\145\155\163")->all(); $this->assertCount(3, $orders); $this->assertTrue($orders[0]->isRelationPopulated("\x63\165\x73\x74\157\x6d\145\x72")); $this->assertTrue($orders[0]->isRelationPopulated("\x69\164\145\x6d\x73")); $orders = $orderClass::find()->with("\x63\165\x73\164\157\155\145\162")->with("\151\164\145\155\x73")->all(); $this->assertCount(3, $orders); $this->assertTrue($orders[0]->isRelationPopulated("\143\x75\x73\164\157\x6d\145\x72")); $this->assertTrue($orders[0]->isRelationPopulated("\151\x74\145\x6d\x73")); } public function testFindLazyVia() { $orderClass = $this->getOrderClass(); $order = $orderClass::findOne(1); $this->assertEquals(1, $order->id); $this->assertCount(2, $order->items); $this->assertEquals(1, $order->items[0]->id); $this->assertEquals(2, $order->items[1]->id); } public function testFindLazyVia2() { $orderClass = $this->getOrderClass(); $order = $orderClass::findOne(1); $order->id = 100; $this->assertEquals(array(), $order->items); } public function testFindEagerViaRelation() { $orderClass = $this->getOrderClass(); $orders = $orderClass::find()->with("\x69\x74\x65\155\x73")->orderBy("\x69\x64")->all(); $this->assertCount(3, $orders); $order = $orders[0]; $this->assertEquals(1, $order->id); $this->assertTrue($order->isRelationPopulated("\151\x74\145\x6d\163")); $this->assertCount(2, $order->items); $this->assertEquals(1, $order->items[0]->id); $this->assertEquals(2, $order->items[1]->id); } public function testFindNestedRelation() { $customerClass = $this->getCustomerClass(); $customers = $customerClass::find()->with("\x6f\162\x64\x65\162\163", "\157\x72\x64\145\x72\163\56\151\164\x65\x6d\x73")->indexBy("\x69\x64")->all(); ksort($customers); $this->assertCount(3, $customers); $this->assertTrue($customers[1]->isRelationPopulated("\157\162\144\x65\162\163")); $this->assertTrue($customers[2]->isRelationPopulated("\157\162\144\145\162\x73")); $this->assertTrue($customers[3]->isRelationPopulated("\x6f\x72\x64\145\x72\x73")); $this->assertCount(1, $customers[1]->orders); $this->assertCount(2, $customers[2]->orders); $this->assertCount(0, $customers[3]->orders); $this->assertTrue($customers[1]->orders[0]->isRelationPopulated("\x69\164\x65\155\x73")); $this->assertTrue($customers[2]->orders[0]->isRelationPopulated("\x69\164\x65\155\x73")); $this->assertTrue($customers[2]->orders[1]->isRelationPopulated("\x69\x74\145\x6d\163")); $this->assertCount(2, $customers[1]->orders[0]->items); $this->assertCount(3, $customers[2]->orders[0]->items); $this->assertCount(1, $customers[2]->orders[1]->items); $customers = $customerClass::find()->where(array("\151\x64" => 1))->with("\x6f\x72\144\145\162\163\127\151\164\150\111\x74\145\155\x73")->one(); $this->assertTrue($customers->isRelationPopulated("\x6f\162\144\145\162\x73\x57\151\x74\x68\x49\164\x65\155\x73")); $this->assertCount(1, $customers->ordersWithItems); $order = $customers->ordersWithItems[0]; $this->assertTrue($order->isRelationPopulated("\x6f\x72\x64\x65\162\x49\164\145\155\163")); $this->assertCount(2, $order->orderItems); } public function testFindEagerViaRelationPreserveOrder() { $orderClass = $this->getOrderClass(); $orders = $orderClass::find()->with("\151\x74\145\x6d\x73\111\x6e\x4f\x72\x64\145\162\61")->orderBy("\143\162\x65\x61\x74\145\144\137\141\164")->all(); $this->assertCount(3, $orders); $order = $orders[0]; $this->assertEquals(1, $order->id); $this->assertTrue($order->isRelationPopulated("\x69\x74\x65\x6d\x73\x49\156\117\x72\x64\145\162\61")); $this->assertCount(2, $order->itemsInOrder1); $this->assertEquals(1, $order->itemsInOrder1[0]->id); $this->assertEquals(2, $order->itemsInOrder1[1]->id); $order = $orders[1]; $this->assertEquals(2, $order->id); $this->assertTrue($order->isRelationPopulated("\x69\164\x65\x6d\163\111\x6e\x4f\162\144\145\162\x31")); $this->assertCount(3, $order->itemsInOrder1); $this->assertEquals(5, $order->itemsInOrder1[0]->id); $this->assertEquals(3, $order->itemsInOrder1[1]->id); $this->assertEquals(4, $order->itemsInOrder1[2]->id); $order = $orders[2]; $this->assertEquals(3, $order->id); $this->assertTrue($order->isRelationPopulated("\151\x74\x65\x6d\x73\x49\156\x4f\x72\144\x65\162\61")); $this->assertCount(1, $order->itemsInOrder1); $this->assertEquals(2, $order->itemsInOrder1[0]->id); } public function testFindEagerViaRelationPreserveOrderB() { $orderClass = $this->getOrderClass(); $orders = $orderClass::find()->with("\x69\164\x65\x6d\x73\x49\156\x4f\162\x64\x65\162\62")->orderBy("\x63\162\145\141\164\145\144\x5f\x61\164")->all(); $this->assertCount(3, $orders); $order = $orders[0]; $this->assertEquals(1, $order->id); $this->assertTrue($order->isRelationPopulated("\151\x74\145\x6d\x73\111\156\117\162\144\x65\162\62")); $this->assertCount(2, $order->itemsInOrder2); $this->assertEquals(1, $order->itemsInOrder2[0]->id); $this->assertEquals(2, $order->itemsInOrder2[1]->id); $order = $orders[1]; $this->assertEquals(2, $order->id); $this->assertTrue($order->isRelationPopulated("\x69\x74\x65\155\x73\x49\x6e\x4f\x72\144\x65\162\62")); $this->assertCount(3, $order->itemsInOrder2); $this->assertEquals(5, $order->itemsInOrder2[0]->id); $this->assertEquals(3, $order->itemsInOrder2[1]->id); $this->assertEquals(4, $order->itemsInOrder2[2]->id); $order = $orders[2]; $this->assertEquals(3, $order->id); $this->assertTrue($order->isRelationPopulated("\x69\164\x65\x6d\163\111\x6e\117\x72\x64\145\162\62")); $this->assertCount(1, $order->itemsInOrder2); $this->assertEquals(2, $order->itemsInOrder2[0]->id); } public function testLink() { $customerClass = $this->getCustomerClass(); $orderClass = $this->getOrderClass(); $orderItemClass = $this->getOrderItemClass(); $itemClass = $this->getItemClass(); $customer = $customerClass::findOne(2); $this->assertCount(2, $customer->orders); $order = new $orderClass(); $order->total = 100; $this->assertTrue($order->isNewRecord); $customer->link("\157\162\x64\x65\x72\x73", $order); $this->afterSave(); $this->assertCount(3, $customer->orders); $this->assertFalse($order->isNewRecord); $this->assertCount(3, $customer->getOrders()->all()); $this->assertEquals(2, $order->customer_id); $order = new $orderClass(); $order->total = 100; $this->assertTrue($order->isNewRecord); $customer = $customerClass::findOne(1); $this->assertNull($order->customer); $order->link("\143\x75\163\164\x6f\155\145\x72", $customer); $this->assertFalse($order->isNewRecord); $this->assertEquals(1, $order->customer_id); $this->assertEquals(1, $order->customer->primaryKey); $order = $orderClass::findOne(1); $this->assertCount(2, $order->items); $this->assertCount(2, $order->orderItems); $orderItem = $orderItemClass::findOne(array("\157\x72\x64\x65\162\137\x69\x64" => 1, "\151\x74\x65\155\137\x69\x64" => 3)); $this->assertNull($orderItem); $item = $itemClass::findOne(3); $order->link("\x69\164\x65\x6d\163", $item, array("\161\x75\x61\x6e\x74\151\164\171" => 10, "\x73\165\x62\x74\157\x74\x61\x6c" => 100)); $this->afterSave(); $this->assertCount(3, $order->items); $this->assertCount(3, $order->orderItems); $orderItem = $orderItemClass::findOne(array("\157\x72\x64\145\162\137\151\144" => 1, "\x69\164\x65\155\x5f\151\x64" => 3)); $this->assertInstanceOf($orderItemClass, $orderItem); $this->assertEquals(10, $orderItem->quantity); $this->assertEquals(100, $orderItem->subtotal); } public function testUnlink() { $customerClass = $this->getCustomerClass(); $orderClass = $this->getOrderClass(); $orderWithNullFKClass = $this->getOrderWithNullFKClass(); $orderItemsWithNullFKClass = $this->getOrderItemWithNullFKmClass(); $customer = $customerClass::findOne(2); $this->assertCount(2, $customer->ordersWithNullFK); $customer->unlink("\157\x72\x64\x65\x72\x73\127\x69\164\150\116\165\154\x6c\x46\113", $customer->ordersWithNullFK[1], false); $this->assertCount(1, $customer->ordersWithNullFK); $orderWithNullFK = $orderWithNullFKClass::findOne(3); $this->assertEquals(3, $orderWithNullFK->id); $this->assertNull($orderWithNullFK->customer_id); $customer = $customerClass::findOne(2); $this->assertCount(2, $customer->orders); $customer->unlink("\157\x72\144\145\162\163", $customer->orders[1], true); $this->afterSave(); $this->assertCount(1, $customer->orders); $this->assertNull($orderClass::findOne(3)); $order = $orderClass::findOne(2); $this->assertCount(3, $order->items); $this->assertCount(3, $order->orderItems); $order->unlink("\x69\x74\145\x6d\163", $order->items[2], true); $this->afterSave(); $this->assertCount(2, $order->items); $this->assertCount(2, $order->orderItems); $this->assertCount(2, $order->itemsWithNullFK); $order->unlink("\151\x74\x65\x6d\x73\x57\x69\x74\150\116\165\x6c\154\106\113", $order->itemsWithNullFK[1], false); $this->afterSave(); $this->assertCount(1, $order->itemsWithNullFK); $this->assertCount(2, $order->orderItems); } public function testUnlinkAll() { $customerClass = $this->getCustomerClass(); $orderClass = $this->getOrderClass(); $orderItemClass = $this->getOrderItemClass(); $itemClass = $this->getItemClass(); $orderWithNullFKClass = $this->getOrderWithNullFKClass(); $orderItemsWithNullFKClass = $this->getOrderItemWithNullFKmClass(); $customer = $customerClass::findOne(2); $this->assertCount(2, $customer->orders); $this->assertEquals(3, $orderClass::find()->count()); $customer->unlinkAll("\157\x72\x64\145\x72\163", true); $this->afterSave(); $this->assertEquals(1, $orderClass::find()->count()); $this->assertCount(0, $customer->orders); $this->assertNull($orderClass::findOne(2)); $this->assertNull($orderClass::findOne(3)); $customer = $customerClass::findOne(2); $this->assertCount(2, $customer->ordersWithNullFK); $this->assertEquals(3, $orderWithNullFKClass::find()->count()); $customer->unlinkAll("\157\162\144\145\162\x73\127\x69\x74\150\116\x75\154\154\x46\x4b", false); $this->afterSave(); $this->assertCount(0, $customer->ordersWithNullFK); $this->assertEquals(3, $orderWithNullFKClass::find()->count()); $this->assertEquals(2, $orderWithNullFKClass::find()->where(array("\x41\x4e\x44", array("\x69\x64" => array(2, 3)), array("\143\x75\x73\x74\x6f\155\x65\x72\x5f\x69\x64" => null)))->count()); $order = $orderClass::findOne(1); $this->assertCount(2, $order->books); $orderItemCount = $orderItemClass::find()->count(); $this->assertEquals(5, $itemClass::find()->count()); $order->unlinkAll("\x62\x6f\157\x6b\x73", true); $this->afterSave(); $this->assertEquals(5, $itemClass::find()->count()); $this->assertEquals($orderItemCount - 2, $orderItemClass::find()->count()); $this->assertCount(0, $order->books); $this->assertCount(2, $order->booksWithNullFK); $orderItemCount = $orderItemsWithNullFKClass::find()->count(); $this->assertEquals(5, $itemClass::find()->count()); $order->unlinkAll("\142\x6f\x6f\153\x73\127\x69\164\150\x4e\165\x6c\154\106\113", false); $this->afterSave(); $this->assertCount(0, $order->booksWithNullFK); $this->assertEquals(2, $orderItemsWithNullFKClass::find()->where(array("\101\x4e\x44", array("\x69\164\x65\155\x5f\151\x64" => array(1, 2)), array("\x6f\x72\x64\145\162\137\x69\144" => null)))->count()); $this->assertEquals($orderItemCount, $orderItemsWithNullFKClass::find()->count()); $this->assertEquals(5, $itemClass::find()->count()); } public function testUnlinkAllAndConditionSetNull() { $customerClass = $this->getCustomerClass(); $orderClass = $this->getOrderWithNullFKClass(); $orderClass::updateAll(array("\x63\x75\163\x74\x6f\155\145\x72\x5f\151\144" => 1)); $this->afterSave(); $customer = $customerClass::findOne(1); $this->assertCount(3, $customer->ordersWithNullFK); $this->assertCount(1, $customer->expensiveOrdersWithNullFK); $this->assertEquals(3, $orderClass::find()->count()); $customer->unlinkAll("\145\x78\160\x65\x6e\163\151\x76\145\x4f\162\144\145\162\163\x57\x69\164\x68\x4e\165\154\154\x46\113"); $this->assertCount(3, $customer->ordersWithNullFK); $this->assertCount(0, $customer->expensiveOrdersWithNullFK); $this->assertEquals(3, $orderClass::find()->count()); $customer = $customerClass::findOne(1); $this->assertCount(2, $customer->ordersWithNullFK); $this->assertCount(0, $customer->expensiveOrdersWithNullFK); } public function testUnlinkAllAndConditionDelete() { $customerClass = $this->getCustomerClass(); $orderClass = $this->getOrderClass(); $orderClass::updateAll(array("\x63\165\x73\x74\157\155\145\162\x5f\151\x64" => 1)); $this->afterSave(); $customer = $customerClass::findOne(1); $this->assertCount(3, $customer->orders); $this->assertCount(1, $customer->expensiveOrders); $this->assertEquals(3, $orderClass::find()->count()); $customer->unlinkAll("\x65\170\160\x65\x6e\163\x69\166\145\x4f\x72\x64\x65\162\163", true); $this->assertCount(3, $customer->orders); $this->assertCount(0, $customer->expensiveOrders); $this->assertEquals(2, $orderClass::find()->count()); $customer = $customerClass::findOne(1); $this->assertCount(2, $customer->orders); $this->assertCount(0, $customer->expensiveOrders); } public static $afterSaveNewRecord; public static $afterSaveInsert; public function testInsert() { $customerClass = $this->getCustomerClass(); $customer = new $customerClass(); $customer->email = "\x75\x73\145\162\64\x40\145\170\x61\x6d\x70\154\x65\x2e\143\x6f\x6d"; $customer->name = "\165\x73\x65\162\64"; $customer->address = "\x61\x64\144\x72\x65\163\x73\x34"; $this->assertNull($customer->id); $this->assertTrue($customer->isNewRecord); static::$afterSaveNewRecord = null; static::$afterSaveInsert = null; $customer->save(); $this->afterSave(); $this->assertNotNull($customer->id); $this->assertFalse(static::$afterSaveNewRecord); $this->assertTrue(static::$afterSaveInsert); $this->assertFalse($customer->isNewRecord); } public function testExplicitPkOnAutoIncrement() { $customerClass = $this->getCustomerClass(); $customer = new $customerClass(); $customer->id = 1337; $customer->email = "\x75\x73\x65\162\x31\x33\x33\67\x40\x65\x78\141\x6d\160\x6c\x65\x2e\x63\157\155"; $customer->name = "\x75\163\x65\x72\x31\63\x33\67"; $customer->address = "\141\144\144\162\x65\x73\x73\61\x33\63\67"; $this->assertTrue($customer->isNewRecord); $customer->save(); $this->afterSave(); $this->assertEquals(1337, $customer->id); $this->assertFalse($customer->isNewRecord); } public function testUpdate() { $customerClass = $this->getCustomerClass(); $customer = $customerClass::findOne(2); $this->assertInstanceOf($customerClass, $customer); $this->assertEquals("\165\x73\x65\x72\x32", $customer->name); $this->assertFalse($customer->isNewRecord); static::$afterSaveNewRecord = null; static::$afterSaveInsert = null; $this->assertEmpty($customer->dirtyAttributes); $customer->name = "\x75\163\145\x72\x32\x78"; $customer->save(); $this->afterSave(); $this->assertEquals("\x75\163\145\x72\x32\x78", $customer->name); $this->assertFalse($customer->isNewRecord); $this->assertFalse(static::$afterSaveNewRecord); $this->assertFalse(static::$afterSaveInsert); $customer2 = $customerClass::findOne(2); $this->assertEquals("\x75\x73\x65\x72\62\170", $customer2->name); $customer = $customerClass::findOne(3); $this->assertEquals("\x75\x73\x65\162\63", $customer->name); $ret = $customerClass::updateAll(array("\156\x61\155\145" => "\x74\x65\x6d\160"), array("\x69\x64" => 3)); $this->afterSave(); $this->assertEquals(1, $ret); $customer = $customerClass::findOne(3); $this->assertEquals("\164\x65\155\x70", $customer->name); $ret = $customerClass::updateAll(array("\156\x61\155\145" => "\164\145\x6d\x70\x58")); $this->afterSave(); $this->assertEquals(3, $ret); $ret = $customerClass::updateAll(array("\x6e\x61\x6d\x65" => "\164\145\x6d\x70"), array("\156\x61\155\145" => "\x75\x73\x65\162\x36")); $this->afterSave(); $this->assertEquals(0, $ret); } public function testUpdateAttributes() { $customerClass = $this->getCustomerClass(); $customer = $customerClass::findOne(2); $this->assertInstanceOf($customerClass, $customer); $this->assertEquals("\165\163\145\162\x32", $customer->name); $this->assertFalse($customer->isNewRecord); static::$afterSaveNewRecord = null; static::$afterSaveInsert = null; $customer->updateAttributes(array("\156\141\155\145" => "\165\163\145\162\62\x78")); $this->afterSave(); $this->assertEquals("\x75\x73\145\162\x32\170", $customer->name); $this->assertFalse($customer->isNewRecord); $this->assertNull(static::$afterSaveNewRecord); $this->assertNull(static::$afterSaveInsert); $customer2 = $customerClass::findOne(2); $this->assertEquals("\x75\163\x65\162\x32\170", $customer2->name); $customer = $customerClass::findOne(1); $this->assertEquals("\x75\x73\x65\162\x31", $customer->name); $this->assertEquals(1, $customer->status); $customer->name = "\x75\x73\x65\162\61\x78"; $customer->status = 2; $customer->updateAttributes(array("\156\x61\155\x65")); $this->assertEquals("\165\x73\145\162\61\x78", $customer->name); $this->assertEquals(2, $customer->status); $customer = $customerClass::findOne(1); $this->assertEquals("\x75\x73\x65\x72\61\x78", $customer->name); $this->assertEquals(1, $customer->status); } public function testUpdateCounters() { $orderItemClass = $this->getOrderItemClass(); $pk = array("\157\162\144\145\162\x5f\151\x64" => 2, "\151\x74\x65\155\137\x69\144" => 4); $orderItem = $orderItemClass::findOne($pk); $this->assertEquals(1, $orderItem->quantity); $ret = $orderItem->updateCounters(array("\161\x75\x61\x6e\x74\x69\x74\x79" => -1)); $this->afterSave(); $this->assertEquals(1, $ret); $this->assertEquals(0, $orderItem->quantity); $orderItem = $orderItemClass::findOne($pk); $this->assertEquals(0, $orderItem->quantity); $pk = array("\x6f\x72\x64\145\x72\x5f\151\x64" => 1, "\x69\164\x65\x6d\x5f\x69\144" => 2); $orderItem = $orderItemClass::findOne($pk); $this->assertEquals(2, $orderItem->quantity); $ret = $orderItemClass::updateAllCounters(array("\x71\x75\141\x6e\x74\x69\x74\x79" => 3, "\x73\x75\142\x74\157\164\141\x6c" => -10), $pk); $this->afterSave(); $this->assertEquals(1, $ret); $orderItem = $orderItemClass::findOne($pk); $this->assertEquals(5, $orderItem->quantity); $this->assertEquals(30, $orderItem->subtotal); } public function testDelete() { $customerClass = $this->getCustomerClass(); $customer = $customerClass::findOne(2); $this->assertInstanceOf($customerClass, $customer); $this->assertEquals("\x75\163\145\x72\62", $customer->name); $customer->delete(); $this->afterSave(); $customer = $customerClass::findOne(2); $this->assertNull($customer); $customers = $customerClass::find()->all(); $this->assertCount(2, $customers); $ret = $customerClass::deleteAll(); $this->afterSave(); $this->assertEquals(2, $ret); $customers = $customerClass::find()->all(); $this->assertCount(0, $customers); $ret = $customerClass::deleteAll(); $this->afterSave(); $this->assertEquals(0, $ret); } public function testBooleanAttribute() { $customerClass = $this->getCustomerClass(); $customer = new $customerClass(); $customer->name = "\142\157\x6f\x6c\145\x61\x6e\40\143\x75\163\164\157\x6d\x65\x72"; $customer->email = "\155\x61\x69\154\100\145\170\x61\155\x70\154\x65\x2e\x63\157\155"; $customer->status = true; $customer->save(false); $customer->refresh(); $this->assertEquals(1, $customer->status); $customer->status = false; $customer->save(false); $customer->refresh(); $this->assertEquals(0, $customer->status); $customers = $customerClass::find()->where(array("\163\164\141\164\x75\x73" => true))->all(); $this->assertCount(2, $customers); $customers = $customerClass::find()->where(array("\x73\164\141\164\x75\163" => false))->all(); $this->assertCount(1, $customers); } public function testAfterFind() { $customerClass = $this->getCustomerClass(); $orderClass = $this->getOrderClass(); $afterFindCalls = array(); Event::on(BaseActiveRecord::className(), BaseActiveRecord::EVENT_AFTER_FIND, function ($event) use(&$afterFindCalls) { $ar = $event->sender; $afterFindCalls[] = array(\get_class($ar), $ar->getIsNewRecord(), $ar->getPrimaryKey(), $ar->isRelationPopulated("\x6f\162\144\x65\162\163")); }); $customer = $customerClass::findOne(1); $this->assertNotNull($customer); $this->assertEquals(array(array($customerClass, false, 1, false)), $afterFindCalls); $afterFindCalls = array(); $customer = $customerClass::find()->where(array("\151\x64" => 1))->one(); $this->assertNotNull($customer); $this->assertEquals(array(array($customerClass, false, 1, false)), $afterFindCalls); $afterFindCalls = array(); $customer = $customerClass::find()->where(array("\151\x64" => 1))->all(); $this->assertNotNull($customer); $this->assertEquals(array(array($customerClass, false, 1, false)), $afterFindCalls); $afterFindCalls = array(); $customer = $customerClass::find()->where(array("\151\144" => 1))->with("\157\x72\144\145\x72\x73")->all(); $this->assertNotNull($customer); $this->assertEquals(array(array($this->getOrderClass(), false, 1, false), array($customerClass, false, 1, true)), $afterFindCalls); $afterFindCalls = array(); if ($this instanceof \yiiunit\extensions\redis\ActiveRecordTest) { $customer = $customerClass::find()->where(array("\x69\x64" => array(1, 2)))->with("\157\162\x64\145\162\x73")->all(); } else { $customer = $customerClass::find()->where(array("\151\144" => array(1, 2)))->with("\157\x72\x64\145\x72\x73")->orderBy("\x6e\141\155\x65")->all(); } $this->assertNotNull($customer); $this->assertEquals(array(array($orderClass, false, 1, false), array($orderClass, false, 2, false), array($orderClass, false, 3, false), array($customerClass, false, 1, true), array($customerClass, false, 2, true)), $afterFindCalls); $afterFindCalls = array(); Event::off(BaseActiveRecord::className(), BaseActiveRecord::EVENT_AFTER_FIND); } public function testAfterRefresh() { $customerClass = $this->getCustomerClass(); $afterRefreshCalls = array(); Event::on(BaseActiveRecord::className(), BaseActiveRecord::EVENT_AFTER_REFRESH, function ($event) use(&$afterRefreshCalls) { $ar = $event->sender; $afterRefreshCalls[] = array(\get_class($ar), $ar->getIsNewRecord(), $ar->getPrimaryKey(), $ar->isRelationPopulated("\x6f\162\x64\x65\162\x73")); }); $customer = $customerClass::findOne(1); $this->assertNotNull($customer); $customer->refresh(); $this->assertEquals(array(array($customerClass, false, 1, false)), $afterRefreshCalls); $afterRefreshCalls = array(); Event::off(BaseActiveRecord::className(), BaseActiveRecord::EVENT_AFTER_REFRESH); } public function testFindEmptyInCondition() { $customerClass = $this->getCustomerClass(); $customers = $customerClass::find()->where(array("\151\x64" => array(1)))->all(); $this->assertCount(1, $customers); $customers = $customerClass::find()->where(array("\x69\144" => array()))->all(); $this->assertCount(0, $customers); $customers = $customerClass::find()->where(array("\111\116", "\x69\144", array(1)))->all(); $this->assertCount(1, $customers); $customers = $customerClass::find()->where(array("\x49\116", "\x69\x64", array()))->all(); $this->assertCount(0, $customers); } public function testFindEagerIndexBy() { $orderClass = $this->getOrderClass(); $order = $orderClass::find()->with("\151\164\145\x6d\163\x49\x6e\144\x65\x78\x65\144")->where(array("\151\144" => 1))->one(); $this->assertTrue($order->isRelationPopulated("\151\164\x65\155\x73\111\156\144\145\x78\x65\x64")); $items = $order->itemsIndexed; $this->assertCount(2, $items); $this->assertTrue(isset($items[1])); $this->assertTrue(isset($items[2])); $order = $orderClass::find()->with("\151\164\x65\x6d\163\111\156\x64\145\170\145\144")->where(array("\151\x64" => 2))->one(); $this->assertTrue($order->isRelationPopulated("\151\x74\x65\155\163\x49\x6e\144\145\x78\x65\144")); $items = $order->itemsIndexed; $this->assertCount(3, $items); $this->assertTrue(isset($items[3])); $this->assertTrue(isset($items[4])); $this->assertTrue(isset($items[5])); } public function testAttributeAccess() { $customerClass = $this->getCustomerClass(); $model = new $customerClass(); $this->assertTrue($model->canSetProperty("\156\141\x6d\145")); $this->assertTrue($model->canGetProperty("\x6e\141\155\145")); $this->assertFalse($model->canSetProperty("\x75\156\x45\170\151\x73\x74\x69\156\x67\x43\157\154\x75\x6d\x6e")); $this->assertFalse(isset($model->name)); $model->name = "\146\x6f\157"; $this->assertTrue(isset($model->name)); unset($model->name); $this->assertNull($model->name); $baseModel = new $customerClass(); $this->assertFalse($baseModel->hasProperty("\x75\x6e\x45\170\x69\x73\164\x69\x6e\147\x43\157\x6c\165\x6d\156")); $customer = new $customerClass(); $this->assertInstanceOf($customerClass, $customer); $this->assertTrue($customer->canGetProperty("\x69\144")); $this->assertTrue($customer->canSetProperty("\151\x64")); $this->assertNull($customer->id); $customer->id = 10; $this->assertNotNull($customer->id); $this->assertTrue($customer->canGetProperty("\x6f\x72\144\x65\x72\111\164\145\155\x73")); $this->assertFalse($customer->canSetProperty("\x6f\162\x64\145\162\x49\164\145\x6d\163")); $this->assertSame(array(), $customer->orderItems); $this->assertTrue($customer->canGetProperty("\157\162\x64\x65\162\111\164\145\155\163")); $this->assertFalse($customer->canSetProperty("\x6f\x72\x64\x65\x72\111\x74\x65\155\163")); try { $itemClass = $this->getItemClass(); $customer->orderItems = array(new $itemClass()); $this->fail("\x73\145\x74\x74\145\162\x20\x63\x61\154\x6c\x20\141\142\157\166\145\x20\115\x55\123\124\x20\164\x68\x72\x6f\167\40\105\170\x63\145\x70\164\151\157\156"); } catch (\Exception $e) { $this->assertInstanceOf("\x79\x69\x69\134\x62\141\x73\145\134\111\x6e\x76\141\x6c\151\x64\x43\x61\154\x6c\x45\170\x63\x65\160\164\151\x6f\x6e", $e); } $this->assertSame(array(), $customer->orderItems); $this->assertFalse($customer->canGetProperty("\156\x6f\156\x5f\x65\170\151\163\164\x69\156\x67\x5f\160\x72\x6f\160\x65\162\164\171")); $this->assertFalse($customer->canSetProperty("\x6e\157\x6e\137\145\170\151\x73\164\x69\156\147\x5f\160\162\157\x70\x65\162\164\x79")); } public function testViaWithCallable() { $orderClass = $this->getOrderClass(); $order = $orderClass::findOne(2); $expensiveItems = $order->expensiveItemsUsingViaWithCallable; $cheapItems = $order->cheapItemsUsingViaWithCallable; $this->assertCount(2, $expensiveItems); $this->assertEquals(4, $expensiveItems[0]->id); $this->assertEquals(5, $expensiveItems[1]->id); $this->assertCount(1, $cheapItems); $this->assertEquals(3, $cheapItems[0]->id); } }

Function Calls

None

Variables

None

Stats

MD5 d0db36449fc6a4390b8c734cceba71af
Eval Count 0
Decode Time 118 ms