public function test_calcSnapshots() { /** === Test Data === */ $CURRENT_STATE = [1 => [Snap::ATTR_CUSTOMER_ID => 1, Snap::ATTR_PARENT_ID => 1, Snap::ATTR_PATH => '/', Snap::ATTR_DEPTH => 0], 2 => [Snap::ATTR_CUSTOMER_ID => 2, Snap::ATTR_PARENT_ID => 1, Snap::ATTR_PATH => '/1/', Snap::ATTR_DEPTH => 1], 3 => [Snap::ATTR_CUSTOMER_ID => 3, Snap::ATTR_PARENT_ID => 1, Snap::ATTR_PATH => '/1/', Snap::ATTR_DEPTH => 1]]; $CHANGES = [[Change::ATTR_CUSTOMER_ID => 99, Change::ATTR_PARENT_ID => 99, Change::ATTR_DATE_CHANGED => '2015-12-07 12:00:00'], [Change::ATTR_CUSTOMER_ID => 4, Change::ATTR_PARENT_ID => 2, Change::ATTR_DATE_CHANGED => '2015-12-07 12:01:00'], [Change::ATTR_CUSTOMER_ID => 3, Change::ATTR_PARENT_ID => 2, Change::ATTR_DATE_CHANGED => '2015-12-07 12:02:00'], [Change::ATTR_CUSTOMER_ID => 3, Change::ATTR_PARENT_ID => 3, Change::ATTR_DATE_CHANGED => '2015-12-07 12:03:00'], [Change::ATTR_CUSTOMER_ID => 1, Change::ATTR_PARENT_ID => 3, Change::ATTR_DATE_CHANGED => '2015-12-07 12:04:00']]; $PERIOD = '20151207'; /** === Setup Mocks === */ $this->mToolPeriod->shouldReceive('getPeriodCurrent')->times(5)->andReturn($PERIOD); /** === Call and asserts === */ $res = $this->obj->calcSnapshots($CURRENT_STATE, $CHANGES); $this->assertTrue(is_array($res)); }
/** * Calculate downline snapshots up to requested date (including). * * @param Request\Calc $request * * @return Response\Calc */ public function calc(Request\Calc $request) { $result = new Response\Calc(); $this->_logger->info("New downline snapshot calculation is requested."); $periodTo = $request->getDatestampTo(); $def = $this->_manTrans->begin(); try { /* get the last date with calculated snapshots */ $reqLast = new Request\GetLastDate(); /** @var $resp Response\GetLastDate */ $respLast = $this->getLastDate($reqLast); $lastDatestamp = $respLast->getLastDate(); /* get the snapshot on the last date */ $snapshot = $this->_repoSnap->getStateOnDate($lastDatestamp); /* get change log for the period */ $tsFrom = $this->_toolPeriod->getTimestampNextFrom($lastDatestamp); $tsTo = $this->_toolPeriod->getTimestampTo($periodTo); $changelog = $this->_repoChange->getChangesForPeriod($tsFrom, $tsTo); /* calculate snapshots for the period */ $updates = $this->_subCalc->calcSnapshots($snapshot, $changelog); /* save new snapshots in DB */ $this->_repoSnap->saveCalculatedUpdates($updates); $this->_manTrans->commit($def); $result->markSucceed(); } finally { $this->_manTrans->end($def); } return $result; }