public function test_extendMinimal() { $obm = \Magento\Framework\App\ObjectManager::getInstance(); /** @var $call \Praxigento\Downline\Service\Snap\Call */ $call = $obm->get('Praxigento\\Downline\\Service\\Snap\\Call'); $req = new Request\ExpandMinimal(); $req->setTree([2 => 1, 3 => 1, 4 => 2, 5 => 2, 6 => 3, 7 => 3, 20 => 20, 10 => 7, 11 => 7, 1 => 1, 12 => 10]); /** @var $resp Response\Calc */ $resp = $call->expandMinimal($req); $this->assertTrue($resp->isSucceed()); }
public function test_expandMinimal() { /** === Test Data === */ $tree = [2 => 1, 3 => 1, 4 => 2, 5 => 2, 6 => 3, 7 => 3, 20 => 20, 10 => 7, 11 => 7, 1 => 1, 12 => 10, 12 => 121]; /** === Setup Mocks === */ /** === Call and asserts === */ $req = new Request\ExpandMinimal(); $req->setTree($tree); $resp = $this->obj->expandMinimal($req); $this->assertTrue($resp->isSucceed()); $snapData = $resp->getSnapData(); $this->assertTrue(is_array($snapData)); }
/** * Extend minimal Downline Tree Data (customer & parent) with depth and path. * * @param Request\ExpandMinimal $request * * @return Response\ExpandMinimal * * @deprecated use \Praxigento\Downline\Tool\ITree::expandMinimal instead */ public function expandMinimal(Request\ExpandMinimal $request) { $result = new Response\ExpandMinimal(); $keyCustomerId = $request->getKeyCustomerId(); $keyParentId = $request->getKeyParentId(); $treeIn = $request->getTree(); /** * Validate tree consistency: all parents should be customers too, create map for customers with invalid * parents to set this entries as orphans. */ $mapCusts = []; // registry for all customers. foreach ($treeIn as $ndx => $item) { $custId = is_null($keyCustomerId) ? $ndx : $item[$keyCustomerId]; $mapCusts[] = $custId; } $mapOrphans = []; // registry for orphan customers. foreach ($treeIn as $ndx => $item) { $custId = is_null($keyCustomerId) ? $ndx : $item[$keyCustomerId]; $parentId = !is_array($item) ? $item : $item[$keyParentId]; if (!in_array($parentId, $mapCusts)) { $msg = "Parent #{$parentId} for customer #{$custId} is not present in the minimal tree."; $msg .= " Customer #{$custId} is set as orphan."; $this->_logger->warning($msg); $mapOrphans[] = $custId; } } /* create tree (see http://stackoverflow.com/questions/2915748/how-can-i-convert-a-series-of-parent-child-relationships-into-a-hierarchical-tre) */ $flat = []; $tree = []; foreach ($treeIn as $ndx => $item) { $custId = is_null($keyCustomerId) ? $ndx : $item[$keyCustomerId]; $parentId = !is_array($item) ? $item : $item[$keyParentId]; /* filter orphans */ if (in_array($custId, $mapOrphans)) { $parentId = $custId; } /* map customers into tree */ if (!isset($flat[$custId])) { $flat[$custId] = []; } if ($custId != $parentId) { $flat[$parentId][$custId] =& $flat[$custId]; } else { /* root node */ $tree[$custId] =& $flat[$custId]; } } /* populate tree with depth/path/... and compose array to insert into DB */ $snapData = []; $this->_composeSnapData($snapData, $tree); $result->setSnapData($snapData); $result->markSucceed(); return $result; }