public function testListProducts()
 {
     $productCollection = new Collection();
     $product = new Product();
     $product->setId(1)->setName('Test')->setDescription('Test descr')->setPrice(99.95)->setUnit('Kg')->setSubjectToVat(true);
     $productCollection[] = $product;
     $productArray = [['id' => 1, 'name' => 'Test', 'description' => 'Test descr', 'price' => 99.95, 'unit' => 'Kg', 'subjectToVat' => true]];
     $headers = ['X-Total-Count' => 1];
     $client = $this->createMock(Client::class);
     $client->expects($this->once())->method('get')->with($this->equalTo('/products'))->will($this->returnValue($productArray));
     $response = $this->createMock(Response::class);
     $response->expects($this->once())->method('getHeaders')->will($this->returnValue($headers));
     $client->expects($this->once())->method('getResponse')->will($this->returnValue($response));
     $hydrator = $this->getMockBuilder(APIHydrator::class)->disableOriginalConstructor()->getMock();
     $hydrator->expects($this->once())->method('hydrate')->with($this->equalTo($productArray[0]), $this->equalTo(null))->will($this->returnValue($productCollection[0]));
     $service = new ProductService($client, $hydrator, new Collection());
     $this->assertEquals($productCollection, $service->listProducts());
 }
 public function testExtractWithMissingKey()
 {
     $expData = ['name' => 'A product'];
     $product = new Product();
     $product->setName('A product');
     $hydrator = new APIHydrator(['id', 'name'], new Product());
     $data = $hydrator->extract($product);
     $this->assertSame($expData, $data);
 }