RedUNIT\Base\Finding::testFindMultiDirectArray PHP Method

testFindMultiDirectArray() public method

Test findMuli with self-made arrays.
public testFindMultiDirectArray ( ) : void
return void
    public function testFindMultiDirectArray()
    {
        R::nuke();
        $collection = R::findMulti('shop,product', array(array('shop__id' => 1, 'product__id' => 1, 'product__name' => 'vase', 'product__shop_id' => 1), array('shop__id' => 1, 'product__id' => 2, 'product__name' => 'candle', 'product__shop_id' => 1), array('shop__id' => 1, 'product__id' => 3, 'product__name' => 'plate', 'product__shop_id' => 1)));
        asrt(is_array($collection), TRUE);
        asrt(isset($collection['shop']), TRUE);
        asrt(isset($collection['product']), TRUE);
        asrt((int) $collection['shop'][1]->id, 1);
        asrt((int) $collection['product'][1]->id, 1);
        asrt((int) $collection['product'][2]->id, 2);
        asrt((int) $collection['product'][3]->id, 3);
        asrt((int) $collection['product'][1]->shopID, 1);
        asrt((int) $collection['product'][2]->shopID, 1);
        asrt((int) $collection['product'][3]->shopID, 1);
        asrt($collection['product'][1]->name, 'vase');
        asrt($collection['product'][2]->name, 'candle');
        asrt($collection['product'][3]->name, 'plate');
        R::nuke();
        $shop = R::dispense('shop');
        $shop2 = R::dispense('shop');
        $products = R::dispense('product', 3);
        $price = R::dispense('price');
        $price->tag = 5;
        $products[0]->name = 'vase';
        $products[1]->name = 'candle';
        $products[2]->name = 'plate';
        $products[1]->ownPriceList[] = $price;
        $shop->ownProduct = $products;
        R::store($shop);
        $collection = R::findMulti('shop,product,price', '
			SELECT shop.*, product.*, price.* FROM shop
			LEFT JOIN product ON product.shop_id = shop.id
			LEFT JOIN price ON price.product_id = product.id
		', array(), array('0' => $this->map('shop', 'product'), '1' => $this->map('product', 'price')));
        $collection = R::findMulti('shop,product', array(array('shop__id' => 1, 'product__id' => 1, 'product__name' => 'vase', 'product__shop_id' => 1), array('shop__id' => 1, 'product__id' => 2, 'product__name' => 'candle', 'product__shop_id' => 1), array('shop__id' => 1, 'product__id' => 3, 'product__name' => 'plate', 'product__shop_id' => 1), array('shop__id' => 1, 'product__id' => 2, 'product__name' => 'candle', 'product__shop_id' => 1)), array(), array(array('a' => 'shop', 'b' => 'product', 'matcher' => function ($a, $b) {
            return $b->shopID == $a->id;
        }, 'do' => function ($a, $b) {
            return $a->noLoad()->ownProductList[] = $b;
        })));
        asrt(is_array($collection), TRUE);
        asrt(isset($collection['shop']), TRUE);
        asrt(isset($collection['product']), TRUE);
        asrt((int) $collection['shop'][1]->id, 1);
        asrt((int) $collection['product'][1]->id, 1);
        asrt((int) $collection['product'][2]->id, 2);
        asrt((int) $collection['product'][3]->id, 3);
        asrt((int) $collection['product'][1]->shopID, 1);
        asrt((int) $collection['product'][2]->shopID, 1);
        asrt((int) $collection['product'][3]->shopID, 1);
        asrt($collection['product'][1]->name, 'vase');
        asrt($collection['product'][2]->name, 'candle');
        asrt($collection['product'][3]->name, 'plate');
        asrt(isset($collection['shop'][1]->ownProductList), TRUE);
        asrt(is_array($collection['shop'][1]->ownProductList), TRUE);
        asrt(count($collection['shop'][1]->ownProductList), 3);
        asrt($collection['shop'][1]->ownProductList[0]->name, 'vase');
        asrt($collection['shop'][1]->ownProductList[1]->name, 'candle');
        asrt($collection['shop'][1]->ownProductList[2]->name, 'plate');
    }