/** * @test */ public function it_iterates_over_purchases_in_a_collection_and_fetches_new_collections() { $apiClient = $this->createMockApiClient(); $purchase1Page1 = new Purchase(); $purchase2Page1 = new Purchase(); $individualPurchasesPage1 = new IndividualPurchases(); $individualPurchasesPage1->addPurchase($purchase1Page1); $individualPurchasesPage1->addPurchase($purchase2Page1); $apiCall1 = $this->createMockApiCall(); $listAllSalesCallFactory = $this->createMockListAllSalesCallFactory(); // $listAllSalesCallFactory // ->expects($this->any()) // ->method('create') // ->will($this->returnCallback(function() { // var_dump(func_get_args()); exit; // })); $listAllSalesCallFactory->expects($this->at(0))->method('create')->with('book-slug', 1, 'json')->will($this->returnValue($apiCall1)); $apiClient->expects($this->at(0))->method('callApi')->with($this->identicalTo($apiCall1))->will($this->returnValue($individualPurchasesPage1)); $purchase1Page2 = new Purchase(); $purchase2Page2 = new Purchase(); $individualPurchasesPage2 = new IndividualPurchases(); $individualPurchasesPage2->addPurchase($purchase1Page2); $individualPurchasesPage2->addPurchase($purchase2Page2); $apiCall2 = $this->createMockApiCall(); $listAllSalesCallFactory->expects($this->at(1))->method('create')->with('book-slug', 2, 'json')->will($this->returnValue($apiCall2)); $apiClient->expects($this->at(1))->method('callApi')->with($this->identicalTo($apiCall2))->will($this->returnValue($individualPurchasesPage2)); $apiCall3 = $this->createMockApiCall(); $listAllSalesCallFactory->expects($this->at(2))->method('create')->with('book-slug', 3, 'json')->will($this->returnValue($apiCall3)); $apiClient->expects($this->at(2))->method('callApi')->with($this->identicalTo($apiCall3))->will($this->returnValue(new IndividualPurchases())); $iterator = new IndividualPurchasesIterator($apiClient, $listAllSalesCallFactory, 'book-slug'); $actualResult = iterator_to_array(new \RecursiveIteratorIterator($iterator), false); $this->assertSame(array($purchase1Page1, $purchase2Page1, $purchase1Page2, $purchase2Page2), $actualResult); }
public function deserialize($rawData, $format) { Assertion::same('json', $format, 'No other format is supported'); $purchases = json_decode($rawData, true); $dto = new IndividualPurchases(); foreach ($purchases as $purchaseArray) { $dto->addPurchase($this->createPurchaseFromArray($purchaseArray)); } return $dto; }