Giving ability to define the Client add abitliy to easliy test the import.
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
- "hash": "7f1939f54201ee0e068eddde41454261",
- "content-hash": "9b7801951c4ea69565ee8f4914071c25",
+ "hash": "fdba142656b2089b0e4cbddb45e2ad1f",
+ "content-hash": "a233f851c52683783b6a42be707c52b1",
"packages": [
{
"name": "behat/transliterator",
},
{
"name": "hoa/stream",
- "version": "0.15.08.28",
+ "version": "0.15.10.26",
"source": {
"type": "git",
"url": "https://github.com/hoaproject/Stream.git",
- "reference": "cbd0f4749e447f4d31001e7c898f5e794c5861cb"
+ "reference": "011ab91d942f1d7096deade4c8a10fe57d51c5b3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/hoaproject/Stream/zipball/cbd0f4749e447f4d31001e7c898f5e794c5861cb",
- "reference": "cbd0f4749e447f4d31001e7c898f5e794c5861cb",
+ "url": "https://api.github.com/repos/hoaproject/Stream/zipball/011ab91d942f1d7096deade4c8a10fe57d51c5b3",
+ "reference": "011ab91d942f1d7096deade4c8a10fe57d51c5b3",
"shasum": ""
},
"require": {
"stream",
"wrapper"
],
- "time": "2015-08-28 07:31:43"
+ "time": "2015-10-22 06:30:43"
},
{
"name": "hoa/ustring",
}
/**
- * Create a new Client.
+ * {@inheritdoc}
+ */
+ public function oAuthRequest($redirectUri, $callbackUri)
+ {
+ $request = $this->client->createRequest('POST', 'https://getpocket.com/v3/oauth/request',
+ [
+ 'body' => json_encode([
+ 'consumer_key' => $this->consumerKey,
+ 'redirect_uri' => $redirectUri,
+ ]),
+ ]
+ );
+
+ $response = $this->client->send($request);
+ $values = $response->json();
+
+ // store code in session for callback method
+ $this->session->set('pocketCode', $values['code']);
+
+ return 'https://getpocket.com/auth/authorize?request_token='.$values['code'].'&redirect_uri='.$callbackUri;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function oAuthAuthorize()
+ {
+ $request = $this->client->createRequest('POST', 'https://getpocket.com/v3/oauth/authorize',
+ [
+ 'body' => json_encode([
+ 'consumer_key' => $this->consumerKey,
+ 'code' => $this->session->get('pocketCode'),
+ ]),
+ ]
+ );
+
+ $response = $this->client->send($request);
+
+ return $response->json()['access_token'];
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function import($accessToken)
+ {
+ $request = $this->client->createRequest('POST', 'https://getpocket.com/v3/get',
+ [
+ 'body' => json_encode([
+ 'consumer_key' => $this->consumerKey,
+ 'access_token' => $accessToken,
+ 'detailType' => 'complete',
+ 'state' => 'all',
+ 'sort' => 'oldest',
+ ]),
+ ]
+ );
+
+ $response = $this->client->send($request);
+ $entries = $response->json();
+
+ $this->parsePocketEntries($entries['list']);
+
+ $this->session->getFlashBag()->add(
+ 'notice',
+ $this->importedEntries.' entries imported, '.$this->skippedEntries.' already saved.'
+ );
+ }
+
+ /**
+ * Set the Guzzle client.
*
- * @return Client
+ * @param Client $client
*/
- private function createClient()
+ public function setClient(Client $client)
{
- return new Client([
- 'defaults' => [
- 'headers' => [
- 'content-type' => 'application/json',
- 'X-Accept' => 'application/json',
- ],
- ],
- ]);
+ $this->client = $client;
}
/**
$this->em->flush();
}
-
- public function oAuthRequest($redirectUri, $callbackUri)
- {
- $client = $this->createClient();
- $request = $client->createRequest('POST', 'https://getpocket.com/v3/oauth/request',
- [
- 'body' => json_encode([
- 'consumer_key' => $this->consumerKey,
- 'redirect_uri' => $redirectUri,
- ]),
- ]
- );
-
- $response = $client->send($request);
- $values = $response->json();
-
- // store code in session for callback method
- $this->session->set('pocketCode', $values['code']);
-
- return 'https://getpocket.com/auth/authorize?request_token='.$values['code'].'&redirect_uri='.$callbackUri;
- }
-
- public function oAuthAuthorize()
- {
- $client = $this->createClient();
-
- $request = $client->createRequest('POST', 'https://getpocket.com/v3/oauth/authorize',
- [
- 'body' => json_encode([
- 'consumer_key' => $this->consumerKey,
- 'code' => $this->session->get('pocketCode'),
- ]),
- ]
- );
-
- $response = $client->send($request);
-
- return $response->json()['access_token'];
- }
-
- public function import($accessToken)
- {
- $client = $this->createClient();
-
- $request = $client->createRequest('POST', 'https://getpocket.com/v3/get',
- [
- 'body' => json_encode([
- 'consumer_key' => $this->consumerKey,
- 'access_token' => $accessToken,
- 'detailType' => 'complete',
- 'state' => 'all',
- 'sort' => 'oldest',
- ]),
- ]
- );
-
- $response = $client->send($request);
- $entries = $response->json();
-
- $this->parsePocketEntries($entries['list']);
-
- $this->session->getFlashBag()->add(
- 'notice',
- $this->importedEntries.' entries imported, '.$this->skippedEntries.' already saved.'
- );
- }
}
- "@session"
- "@doctrine.orm.entity_manager"
- %pocket_consumer_key%
+ calls:
+ - [ setClient, [ "@wallabag_import.pocket.client" ] ]
+
+ wallabag_import.pocket.client:
+ class: GuzzleHttp\Client
+ arguments:
+ -
+ defaults:
+ headers:
+ content-type: "application/json"
+ X-Accept: "application/json"
--- /dev/null
+<?php
+
+namespace Wallabag\ImportBundle\Tests\Import;
+
+use Wallabag\UserBundle\Entity\User;
+use Wallabag\ImportBundle\Import\PocketImport;
+use Symfony\Component\HttpFoundation\Session\Session;
+use Symfony\Component\HttpFoundation\Session\Storage\MockArraySessionStorage;
+use GuzzleHttp\Client;
+use GuzzleHttp\Subscriber\Mock;
+use GuzzleHttp\Message\Response;
+use GuzzleHttp\Stream\Stream;
+
+class PocketImportTest extends \PHPUnit_Framework_TestCase
+{
+ protected $token;
+ protected $user;
+ protected $session;
+ protected $em;
+
+ private function getPocketImport($consumerKey = 'ConsumerKey')
+ {
+ $this->user = new User();
+
+ $this->tokenStorage = $this->getMockBuilder('Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $token = $this->getMockBuilder('Symfony\Component\Security\Core\Authentication\Token\TokenInterface')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $token->expects($this->once())
+ ->method('getUser')
+ ->willReturn($this->user);
+
+ $this->tokenStorage->expects($this->once())
+ ->method('getToken')
+ ->willReturn($token);
+
+ $this->session = new Session(new MockArraySessionStorage());
+
+ $this->em = $this->getMockBuilder('Doctrine\ORM\EntityManager')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ return new PocketImport(
+ $this->tokenStorage,
+ $this->session,
+ $this->em,
+ $consumerKey
+ );
+ }
+
+ public function testInit()
+ {
+ $pocketImport = $this->getPocketImport();
+
+ $this->assertEquals('Pocket', $pocketImport->getName());
+ $this->assertEquals('This importer will import all your <a href="https://getpocket.com">Pocket</a> data.', $pocketImport->getDescription());
+ }
+
+ public function testOAuthRequest()
+ {
+ $client = new Client();
+
+ $mock = new Mock([
+ new Response(200, ['Content-Type' => 'application/json'], Stream::factory(json_encode(['code' => 'wunderbar']))),
+ ]);
+
+ $client->getEmitter()->attach($mock);
+
+ $pocketImport = $this->getPocketImport();
+ $pocketImport->setClient($client);
+
+ $url = $pocketImport->oAuthRequest('http://0.0.0.0./redirect', 'http://0.0.0.0./callback');
+
+ $this->assertEquals('https://getpocket.com/auth/authorize?request_token=wunderbar&redirect_uri=http://0.0.0.0./callback', $url);
+ $this->assertEquals('wunderbar', $this->session->get('pocketCode'));
+ }
+
+ public function testOAuthAuthorize()
+ {
+ $client = new Client();
+
+ $mock = new Mock([
+ new Response(200, ['Content-Type' => 'application/json'], Stream::factory(json_encode(['access_token' => 'wunderbar']))),
+ ]);
+
+ $client->getEmitter()->attach($mock);
+
+ $pocketImport = $this->getPocketImport();
+ $pocketImport->setClient($client);
+
+ $accessToken = $pocketImport->oAuthAuthorize();
+
+ $this->assertEquals('wunderbar', $accessToken);
+ }
+
+ public function testImport()
+ {
+ $client = new Client();
+
+ $mock = new Mock([
+ new Response(200, ['Content-Type' => 'application/json'], Stream::factory(json_encode(['list' => []]))),
+ ]);
+
+ $client->getEmitter()->attach($mock);
+
+ $pocketImport = $this->getPocketImport();
+ $pocketImport->setClient($client);
+
+ $pocketImport->import('wunderbar');
+
+ $this->assertEquals('0 entries imported, 0 already saved.', $this->session->getFlashBag()->get('notice')[0]);
+ }
+}