/** * {@inheritdoc} */ public function listContents($directory = '', $recursive = false) { $response = $this->client->listChildren($directory); $responseContent = json_decode((string) $response->getBody()); $items = $responseContent->value; $result = []; foreach ($items as $item) { $isFile = property_exists($item, 'file'); $type = $isFile ? FlysystemMetadata::TYPE_FILE : FlysystemMetadata::TYPE_DIRECTORY; $path = $directory . '/' . $item->name; $flysystemMetadata = new FlysystemMetadata($type, $path); $this->updateFlysystemMetadataFromResponseContent($flysystemMetadata, $item); $result[] = $flysystemMetadata->toArray(); if ($recursive && !$isFile) { $result = array_merge($result, $this->listContents($path, true)); } } return $result; }
public function testListChildren() { $client = $this->getMockBuilder('\\GuzzleHttp\\Client')->getMock(); $accessToken = '123456789'; $assertRequest = function ($request) use($accessToken) { return $request instanceof Request && $request->getMethod() == 'GET' && $request->getUri()->getHost() == 'api.onedrive.com' && $request->getUri()->getPath() == '/v1.0/drive/root:/documents/pictures:/children' && $request->getHeader('authorization') == ['bearer ' . $accessToken]; }; $response = new Response(200, [], 'test response'); $client->expects($this->once())->method('send')->with($this->callback($assertRequest))->willReturn($response); $oneDriveClient = new OneDriveClient($accessToken, $client); $result = $oneDriveClient->listChildren('documents/pictures'); $this->assertEquals($response, $result); }