From 912a6c0fd9d518ca802aca370b6c78ee9933295a Mon Sep 17 00:00:00 2001
From: Grzegorz Rola <grola@seostudio.pl>
Date: Thu, 30 May 2019 19:39:10 +0000
Subject: [PATCH] Added timeout to options.

---
 CHANGELOG.md                            |  3 +++
 src/Client/ApiClientOptions.php         |  1 -
 src/Client/ApiClientOptionsTimeout.php  | 13 +++++++++++++
 src/Client/ClientFactory.php            |  3 ++-
 src/Client/ClientImplementation.php     | 21 +++++++++++++--------
 tests/unit/Client/TestClientFactory.php |  4 ++++
 6 files changed, 35 insertions(+), 10 deletions(-)
 create mode 100644 CHANGELOG.md
 create mode 100644 src/Client/ApiClientOptionsTimeout.php

diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..9c0ca1f
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,3 @@
+## [1.1.0] - 2019-05-30
+### Added
+- Timeout in api client options interface
diff --git a/src/Client/ApiClientOptions.php b/src/Client/ApiClientOptions.php
index 34d1683..6decfa7 100644
--- a/src/Client/ApiClientOptions.php
+++ b/src/Client/ApiClientOptions.php
@@ -33,5 +33,4 @@ interface ApiClientOptions extends HttpClientOptions, SerializerOptions
      * @return string
      */
     public function getApiClientClass();
-
 }
\ No newline at end of file
diff --git a/src/Client/ApiClientOptionsTimeout.php b/src/Client/ApiClientOptionsTimeout.php
new file mode 100644
index 0000000..281c0d3
--- /dev/null
+++ b/src/Client/ApiClientOptionsTimeout.php
@@ -0,0 +1,13 @@
+<?php
+
+namespace WPDesk\ApiClient\Client;
+
+
+interface ApiClientOptionsTimeout extends ApiClientOptions
+{
+    /**
+     * @return int
+     */
+    public function getTimeout();
+
+}
\ No newline at end of file
diff --git a/src/Client/ClientFactory.php b/src/Client/ClientFactory.php
index 0cc058e..6d84b7e 100644
--- a/src/Client/ClientFactory.php
+++ b/src/Client/ClientFactory.php
@@ -24,7 +24,8 @@ class ClientFactory
             $serializerFactory->createSerializer($options),
             $options->getLogger(),
             $options->getApiUrl(),
-            $options->getDefaultRequestHeaders()
+            $options->getDefaultRequestHeaders(),
+            ($options instanceof ApiClientOptionsTimeout)? $options->getTimeout(): null
         );
 
         if ($options->isCachedClient()) {
diff --git a/src/Client/ClientImplementation.php b/src/Client/ClientImplementation.php
index f948bec..3777c5a 100644
--- a/src/Client/ClientImplementation.php
+++ b/src/Client/ClientImplementation.php
@@ -16,8 +16,6 @@ class ClientImplementation implements Client, LoggerAwareInterface
 {
     const CLIENT_VERSION = '1.6.5';
 
-    const DEFAULT_TIMEOUT = 10;
-
     const LIBRARY_LOGIN_CONTEXT = 'wp-api-client';
 
     /** @var HttpClient */
@@ -35,6 +33,9 @@ class ClientImplementation implements Client, LoggerAwareInterface
     /** @var array */
     private $defaultRequestHeaders;
 
+	/** @var int */
+    private $timeout;
+
     /**
      * Client constructor.
      * @param HttpClient $client
@@ -42,19 +43,22 @@ class ClientImplementation implements Client, LoggerAwareInterface
      * @param LoggerInterface $logger
      * @param string $apiUri
      * @param array $defaultRequestHeaders
+     * @param int $timeout
      */
     public function __construct(
         HttpClient $client,
         Serializer $serializer,
         LoggerInterface $logger,
         $apiUri,
-        array $defaultRequestHeaders
+        array $defaultRequestHeaders,
+        $timeout = 10
     ) {
-        $this->client = $client;
-        $this->serializer = $serializer;
-        $this->logger = $logger;
-        $this->apiUrl = $apiUri;
+        $this->client                = $client;
+        $this->serializer            = $serializer;
+        $this->logger                = $logger;
+        $this->apiUrl                = $apiUri;
         $this->defaultRequestHeaders = $defaultRequestHeaders;
+        $this->timeout               = $timeout;
     }
 
     /**
@@ -73,7 +77,8 @@ class ClientImplementation implements Client, LoggerAwareInterface
                 $fullUrl = $this->prepareFullUrl($request),
                 $method = $request->getMethod(),
                 $body = $this->prepareRequestBody($request),
-                $headers = $this->prepareRequestHeaders($request), self::DEFAULT_TIMEOUT
+                $headers = $this->prepareRequestHeaders($request),
+                $this->timeout
             );
 
             $this->logger->debug(
diff --git a/tests/unit/Client/TestClientFactory.php b/tests/unit/Client/TestClientFactory.php
index 553524d..6c57654 100644
--- a/tests/unit/Client/TestClientFactory.php
+++ b/tests/unit/Client/TestClientFactory.php
@@ -43,6 +43,10 @@ class TestClientFactory extends \PHPUnit\Framework\TestCase
                 ->withAnyArgs()
                 ->andReturn($isCachedClient);
 
+        $options->shouldReceive('getTimeout')
+                ->withAnyArgs()
+                ->andReturn(30);
+
         return $options;
     }
 
-- 
GitLab