Skip to content
Snippets Groups Projects
Commit d2b66434 authored by Grzegorz Rola's avatar Grzegorz Rola
Browse files

Feature/first release

parent 24ca0857
Branches
Tags
No related merge requests found
Showing
with 941 additions and 0 deletions
<?php
namespace WPDesk\ApiClient\Response;
interface ApiResponse extends Response
{
/**
* Get links structure to the other request
*
* @return array
*/
public function getLinks();
/**
* Is it a BAD REQUEST response
*
* @return bool
*/
public function isBadRequest();
/**
* Is it a FATAL ERROR response
*
* @return bool
*/
public function isServerFatalError();
/**
* Is requested resource exists
*
* @return bool
*/
public function isNotExists();
}
\ No newline at end of file
<?php
namespace WPDesk\ApiClient\Response;
use WPDesk\ApiClient\Response\Traits\AuthApiResponseDecorator;
class AuthApiResponse implements ApiResponse
{
const RESPONSE_CODE_BAD_CREDENTIALS = 401;
const RESPONSE_CODE_NOT_EXISTS = 404;
use AuthApiResponseDecorator;
}
\ No newline at end of file
<?php
namespace WPDesk\ApiClient\Response;
use WPDesk\ApiClient\Response\Exception\TriedExtractDataFromErrorResponse;
use WPDesk\ApiClient\Response\Traits\ApiResponseDecorator;
/**
* Response is protected in a way so when you try to get body of the response when an error occured you will get an exception
*
* Class ProtectedResponse
* @package WPDesk\ApiClient\Response
*/
class ProtectedResponse implements Response
{
use ApiResponseDecorator;
public function getResponseBody()
{
if ($this->isError()) {
throw TriedExtractDataFromErrorResponse::createWithClassInfo(get_class($this->rawResponse), $this->getResponseCode());
}
return $this->rawResponse->getResponseBody();
}
}
\ No newline at end of file
<?php
namespace WPDesk\ApiClient\Response;
class RawResponse implements Response
{
const RESPONSE_CODE_SUCCESS = 200;
const RESPONSE_CODE_CREATED = 201;
const RESPONSE_CODE_ERROR_BAD_REQUEST = 400;
const RESPONSE_CODE_DOMAIN_NOT_ALLOWED = 462;
const RESPONSE_CODE_ERROR_FATAL = 500;
const RESPONSE_CODE_MAINTENANCE = 503;
const HEADER_X_PLATFORM_VERSION_HASH = 'X-Platform-Version-Hash';
/** @var array */
private $data;
/** @var int */
private $code;
/** @var array */
private $headers;
/**
* RawResponse constructor.
* @param array $body
* @param int $code
* @param array $headers
*/
public function __construct(array $body, $code, array $headers)
{
$this->data = $body;
$this->code = (int)$code;
$this->headers = $headers;
}
/**
* Returns response http code
*
* @return int
*/
public function getResponseCode()
{
return $this->code;
}
/**
* Returns response body as array
*
* @return array
*/
public function getResponseBody()
{
return $this->data;
}
/**
* Returns response body as array
*
* @return array
*/
public function getResponseErrorBody()
{
return $this->data;
}
/**
* Returns response body as array
*
* @return array
*/
public function getResponseHeaders()
{
return $this->headers;
}
/**
* Is any error occured
*
* @return bool
*/
public function isError()
{
$code = $this->getResponseCode();
return ( $code < 200 || $code >= 300 ) && !$this->isMaintenance();
}
/**
* Is maintenance.
*
* @return bool
*/
public function isMaintenance()
{
$code = $this->getResponseCode();
return self::RESPONSE_CODE_MAINTENANCE === $code;
}
/**
* Get platform version hash string.
*
* @return bool|string
*/
public function getPlatformVersionHash()
{
if (isset($this->headers[self::HEADER_X_PLATFORM_VERSION_HASH])) {
return $this->headers[self::HEADER_X_PLATFORM_VERSION_HASH];
}
return false;
}
}
\ No newline at end of file
<?php
namespace WPDesk\ApiClient\Response;
interface Response
{
/**
* @return int
*/
public function getResponseCode();
/** @return array */
public function getResponseBody();
/** @return array */
public function getResponseHeaders();
/** @return array */
public function getResponseErrorBody();
/**
* Is any error occured
*
* @return bool
*/
public function isError();
/**
* Is maintenance
*
* @return bool
*/
public function isMaintenance();
/**
* Get platform version hash string.
*
* @return bool|string
*/
public function getPlatformVersionHash();
}
\ No newline at end of file
<?php
namespace WPDesk\ApiClient\Response\Traits;
use WPDesk\ApiClient\Response\AuthApiResponse;
use WPDesk\ApiClient\Response\RawResponse;
use WPDesk\ApiClient\Response\Response;
trait ApiResponseDecorator
{
/** @var RawResponse */
private $rawResponse;
/**
* RawResponseDecorator constructor.
* @param Response $rawResponse
*/
public function __construct(Response $rawResponse)
{
$this->rawResponse = $rawResponse;
}
/**
* Returns response http code
*
* @return int
*/
public function getResponseCode()
{
return $this->rawResponse->getResponseCode();
}
/**
* Returns response body as array
*
* @return array
*/
public function getResponseBody()
{
return $this->rawResponse->getResponseBody();
}
/**
* Returns response body as array
*
* @return array
*/
public function getResponseErrorBody()
{
return $this->rawResponse->getResponseErrorBody();
}
/**
* Returns response body as array
*
* @return array
*/
public function getResponseHeaders()
{
return $this->rawResponse->getResponseHeaders();
}
/**
* Get links structure to the other request
*
* @return array
*/
public function getLinks()
{
$body = $this->getResponseBody();
return $body['_links'];
}
/**
* Is it a BAD REQUEST response
*
* @return bool
*/
public function isBadRequest()
{
return $this->getResponseCode() === RawResponse::RESPONSE_CODE_ERROR_BAD_REQUEST;
}
/**
* Is it a DOMAIN NOT ALLOWED response
*
* @return bool
*/
public function isDomainNotAllowed()
{
return $this->getResponseCode() === RawResponse::RESPONSE_CODE_DOMAIN_NOT_ALLOWED;
}
/**
* Is it a FATAL ERROR response
*
* @return bool
*/
public function isServerFatalError()
{
return $this->getResponseCode() === RawResponse::RESPONSE_CODE_ERROR_FATAL;
}
/**
* Is any error occured
*
* @return bool
*/
public function isError()
{
return $this->rawResponse->isError();
}
/**
* Is requested resource exists
*
* @return bool
*/
public function isNotExists()
{
return $this->getResponseCode() === AuthApiResponse::RESPONSE_CODE_NOT_EXISTS;
}
/**
* Is maintenance.
*
* @return bool
*/
public function isMaintenance()
{
return $this->rawResponse->isMaintenance();
}
/**
* Get platform version hash string.
*
* @return bool|string
*/
public function getPlatformVersionHash()
{
return $this->rawResponse->getPlatformVersionHash();
}
}
\ No newline at end of file
<?php
namespace WPDesk\ApiClient\Response\Traits;
use WPDesk\ApiClient\Response\AuthApiResponse;
trait AuthApiResponseDecorator
{
use ApiResponseDecorator;
/**
* @return bool
*/
public function isBadCredentials()
{
return $this->getResponseCode() === AuthApiResponse::RESPONSE_CODE_BAD_CREDENTIALS;
}
/**
* Is bad credential because token expires
*
* @return bool
*/
public function isTokenExpired()
{
return $this->isBadCredentials();
}
/**
* Is bad credential because token is invalid
*
* @return bool
*/
public function isTokenInvalid()
{
return $this->isBadCredentials();
}
}
\ No newline at end of file
<?php
namespace WPDesk\ApiClient\Response\Traits;
trait PagedListImplementation
{
/*
* @return array
*/
public function getRawPage()
{
$body = $this->getResponseBody();
if ($body['_embedded'] !== null && $body['_embedded']['item'] !== null) {
return $body['_embedded']['item'];
}
return [];
}
/**
* @return int
*/
public function getPageCount()
{
return (int)floor($this->getItemCount() / $this->getItemsPerPage());
}
/**
* @return int
*/
public function getItemsPerPage()
{
$body = $this->getResponseBody();
return (int)$body['itemsPerPage'];
}
/**
* @return int
*/
public function getItemCount()
{
$body = $this->getResponseBody();
return (int)$body['totalItems'];
}
}
\ No newline at end of file
<?php
namespace WPDesk\ApiClient\Serializer\Exception;
/**
* Thrown when serializer cannot unserialize string data
*
* @package WPDesk\ApiClient\Serializer\Exception
*/
class CannotUnserializeException extends \RuntimeException
{
}
\ No newline at end of file
<?php
namespace WPDesk\ApiClient\Serializer;
use WPDesk\ApiClient\Serializer\Exception\CannotUnserializeException;
class JsonSerializer implements Serializer
{
/**
* Convert data to string
*
* @param mixed $data
* @return string
*/
public function serialize($data)
{
return json_encode($data, JSON_FORCE_OBJECT);
}
/**
* Convert string to php data
*
* @param string $data
* @return mixed
*/
public function unserialize($data)
{
$unserializedResult = json_decode($data, true);
if ($unserializedResult === null) {
throw new CannotUnserializeException("Cannot unserialize data: {$data}");
}
return $unserializedResult;
}
/**
* @return string
*/
public function getMime()
{
return 'application/json';
}
}
\ No newline at end of file
<?php
namespace WPDesk\ApiClient\Serializer;
interface Serializer
{
/**
* @param mixed $data
* @return string
*/
public function serialize($data);
/**
* @param string $data
* @return mixed
*/
public function unserialize($data);
/**
* @return string
*/
public function getMime();
}
\ No newline at end of file
<?php
namespace WPDesk\ApiClient\Serializer;
class SerializerFactory
{
/**
* @param SerializerOptions $options
* @return Serializer
*/
public function createSerializer(SerializerOptions $options)
{
$className = $options->getSerializerClass();
return new $className;
}
}
\ No newline at end of file
<?php
namespace WPDesk\ApiClient\Serializer;
interface SerializerOptions
{
/**
* @return string
*/
public function getSerializerClass();
}
\ No newline at end of file
version: '2.0'
services:
wordpress:
image: wpdesknet/phpunit-woocommerce:0-0
volumes:
- .././:/opt/project
depends_on:
- mysql0
environment:
WORDPRESS_DB_NAME: wptest
WORDPRESS_DB_USER: mysql
WORDPRESS_DB_PASSWORD: mysql
WORDPRESS_DB_HOST: mysql0
wordpress-0-1:
image: wpdesknet/phpunit-woocommerce:0-1
volumes:
- .././:/opt/project
depends_on:
- mysql1
environment:
WORDPRESS_DB_NAME: wptest
WORDPRESS_DB_USER: mysql
WORDPRESS_DB_PASSWORD: mysql
WORDPRESS_DB_HOST: mysql1
wordpress-0-2:
image: wpdesknet/phpunit-woocommerce:0-2
volumes:
- .././:/opt/project
depends_on:
- mysql2
environment:
WORDPRESS_DB_NAME: wptest
WORDPRESS_DB_USER: mysql
WORDPRESS_DB_PASSWORD: mysql
WORDPRESS_DB_HOST: mysql2
wordpress-0-3:
image: wpdesknet/phpunit-woocommerce:0-3
volumes:
- .././:/opt/project
depends_on:
- mysql3
environment:
WORDPRESS_DB_NAME: wptest
WORDPRESS_DB_USER: mysql
WORDPRESS_DB_PASSWORD: mysql
WORDPRESS_DB_HOST: mysql3
wordpress-0-4:
image: wpdesknet/phpunit-woocommerce:0-4
volumes:
- .././:/opt/project
depends_on:
- mysql4
environment:
WORDPRESS_DB_NAME: wptest
WORDPRESS_DB_USER: mysql
WORDPRESS_DB_PASSWORD: mysql
WORDPRESS_DB_HOST: mysql4
wordpress-0-5:
image: wpdesknet/phpunit-woocommerce:0-5
volumes:
- .././:/opt/project
depends_on:
- mysql5
environment:
WORDPRESS_DB_NAME: wptest
WORDPRESS_DB_USER: mysql
WORDPRESS_DB_PASSWORD: mysql
WORDPRESS_DB_HOST: mysql5
wordpress-1-0:
image: wpdesknet/phpunit-woocommerce:1-0
volumes:
- .././:/opt/project
depends_on:
- mysql0
environment:
WORDPRESS_DB_NAME: wptest
WORDPRESS_DB_USER: mysql
WORDPRESS_DB_PASSWORD: mysql
WORDPRESS_DB_HOST: mysql0
wordpress-2-0:
image: wpdesknet/phpunit-woocommerce:2-0
volumes:
- .././:/opt/project
depends_on:
- mysql0
environment:
WORDPRESS_DB_NAME: wptest
WORDPRESS_DB_USER: mysql
WORDPRESS_DB_PASSWORD: mysql
WORDPRESS_DB_HOST: mysql0
wordpress-3-0:
image: wpdesknet/phpunit-woocommerce:3-0
volumes:
- .././:/opt/project
depends_on:
- mysql0
environment:
WORDPRESS_DB_NAME: wptest
WORDPRESS_DB_USER: mysql
WORDPRESS_DB_PASSWORD: mysql
WORDPRESS_DB_HOST: mysql0
wordpress-4-0:
image: wpdesknet/phpunit-woocommerce:4-0
volumes:
- .././:/opt/project
depends_on:
- mysql0
environment:
WORDPRESS_DB_NAME: wptest
WORDPRESS_DB_USER: mysql
WORDPRESS_DB_PASSWORD: mysql
WORDPRESS_DB_HOST: mysql0
mysql0:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: mysql
MYSQL_DATABASE: wptest
MYSQL_USER: mysql
MYSQL_PASSWORD: mysql
mysql1:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: mysql
MYSQL_DATABASE: wptest
MYSQL_USER: mysql
MYSQL_PASSWORD: mysql
mysql2:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: mysql
MYSQL_DATABASE: wptest
MYSQL_USER: mysql
MYSQL_PASSWORD: mysql
mysql3:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: mysql
MYSQL_DATABASE: wptest
MYSQL_USER: mysql
MYSQL_PASSWORD: mysql
mysql4:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: mysql
MYSQL_DATABASE: wptest
MYSQL_USER: mysql
MYSQL_PASSWORD: mysql
mysql5:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: mysql
MYSQL_DATABASE: wptest
MYSQL_USER: mysql
MYSQL_PASSWORD: mysql
<?php
ini_set('error_reporting', E_ALL); // or error_reporting(E_ALL);
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
require_once __DIR__ . '/../../vendor/autoload.php';
// disable xdebug backtrace
if ( function_exists( 'xdebug_disable' ) ) {
xdebug_disable();
}
if ( getenv( 'PLUGIN_PATH' ) !== false ) {
define( 'PLUGIN_PATH', getenv( 'PLUGIN_PATH' ) );
} else {
define( 'PLUGIN_PATH', __DIR__ . DIRECTORY_SEPARATOR . DIRECTORY_SEPARATOR );
}
require_once( getenv( 'WP_DEVELOP_DIR' ) . '/tests/phpunit/includes/functions.php' );
tests_add_filter( 'muplugins_loaded', function () {
}, 100 );
putenv('WP_TESTS_DIR=' . getenv( 'WP_DEVELOP_DIR' ) . '/tests/phpunit');
require_once( getenv( 'WC_DEVELOP_DIR' ) . '/tests/bootstrap.php' );
do_action('plugins_loaded');
\ No newline at end of file
<?php
use WPDesk\ApiClient\Authentication\JWTSaasToken;
use WPDesk\ApiClient\Authentication\JWTToken;
class TestJWTSaasToken extends \PHPUnit\Framework\TestCase
{
/**
* Provides tokens with info about expected shop id encoded inside
*
* @return array
*/
public function provideTokensWithShopInfo()
{
return [
[
'token' => 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpYXQiOjE1MzQ5NDA2NjQsImV4cCI6MTUzNDk0NDI2NCwicm9sZXMiOlsiUk9MRV9VU0VSIiwiUk9MRV9TSE9QIl0sInVzZXJuYW1lIjozLCJpcCI6IjE3Mi4xOS4wLjEiLCJzaG9wIjoxfQ.rG6_U67zKTinkqR4324wOhS0YP9P9_2DH-OMsfijTPt408wNGwh5YKqkA4kglP5wMQQ80UGo7qyYd9R3fc465JMB9DQTbALATz_UMk8fr_-LWl9Gj8cuzQvEMQL2Saya_nggAn0bmWlVG27k6-6ezfBW7Hhb1d1GtoydbiYMA_ntLVPzrRjicvcIoftroadX6rsuCSHy-lLvHd1pj6E6eOEX2IcZXoa9eqd_3-j4dgszNUoPDag8bYXQzmIDIqyseBQ3eaQr69Tj-npTaMDjSyHwFQqtr57leX9aVVo8xPeF2ulrT4u4VgCv6kQt1Fao5_G6WLJ9FpJE19k_e4uebSwmDwiPoSnqU30tmIoVpcqfzxoNDKxfaK6am4HvfiQ6l_A2Cb7Wi9Wh5Px1A2a1NjFNKq-hxI3bVb30cKvacL29tYcjT-315RKv57onnCjVJWaGfzPJ44ZibB2VaVF9HO8Rjci8PJ35lF0NOw7YYb7rTQB0JOsLhHrwe9cjgKBsxwIAOVx1fFt6fq1RRJzUpcHKAx0f7kwGmHzXNwpNIexneBYg1Btz5UfW3yiztxggBPYvDfFAdLc5hfFURFhLtqaQzCklomRYBkbEkBGSt_5iz7HLYiiWuM51TzXgUMa631KwCuyBA675fwEMnwQ01YM51Et7NQgRcja737kSliM',
'shop' => 1
],
[
'token' => 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpYXQiOjE1MzQ5NDEyMDAsImV4cCI6MTUzNDk0NDgwMCwicm9sZXMiOlsiUk9MRV9VU0VSIiwiUk9MRV9TSE9QIl0sInVzZXJuYW1lIjozLCJpcCI6IjE3Mi4xOS4wLjEiLCJzaG9wIjo1fQ.NAh6p40uSgyhcRkXxLSJhsGSn-mRAIYGsbtuMqSrplHk7LxrOQvvLBKfW0cZpl4y683ECGYqykJYmGb3nnWPKOQv5Pl2GExLItvzWuVju6KvkTi-_RD1xVXv6tCxkI6umcrJaI0bUWQhjLogrjNgIAR81DRbfG81lctIRzhP-CtADD9J7uEFrfWIGIbBgVOMdiw4nsAvqB9ECTDbnv5TRsxmOnyhm42mWxfpbrzd7WaRugIMWbysL2_5HXwqLV7jaaPlBHFpGs3cpgpRF0fsZ1VZeM7LAiiwvNuBwVsZbmD_ZKKdXzwL183RbsuSP4C_7gjH4UXEflRWRR6nzom_AyCFhqGrdu1obSNLiIeIt94p_VavOmwicwQKmuhOHGnYHVguTLYW2FcQIS2nMosswnXoZzTJcL3YwQQsMT6Xg-Da43bWZMIWvcK7d-nSvOGHW0OrHzWQRZOcH3RKANzPUEG5L0-KL55yacMbAPq6ykGc-I-_q1IDBxfxE2rSaxGKa72O60uwjX2Mafdhp9YWuESNm2Gvi09hYo3_dBUAHjaSdXOWqJhb8h1ND8c2IJNxltTIukz1fDdLkFvTttZi4g5rjsJoDN94Y3f-19qokY8lzhx8z3Zc4hgbNQ9p8CYrmjB6FDa59Psuxbd-ODwzNm_uLsn1z4U5uo68QHa5g50',
'shop' => 5
],
[ // case with wpdesk and shop role
'token' => 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpYXQiOjE1MzQ5NDE0MzYsImV4cCI6MTUzNDk0NTAzNiwicm9sZXMiOlsiUk9MRV9XUERFU0siLCJST0xFX1NIT1AiXSwidXNlcm5hbWUiOjEsImlwIjoiMTcyLjE5LjAuMSIsInNob3AiOjJ9.pD9qQQJB_Mn6hSBcK5unEyrQ2n-3BgnzCRtk1V_u7BL0SKqgqILQN5NGJYpG2dO1Rb54pCNgAVzr6axu9f6ijmGetpHX_V1HSy7HOM4xdI8H7BaPHaK-2KUKTrVFM7lEp_sRc4KBkfSW4Ju2EH0e0Oty42EkIWeTb3J3npTHK_RjXI47xX5e_gZW8inRfJx24EhiSnlkMX77lIpXsqqCyRKqW64niLrQzKMNeSOJ_5HgBvzk9OyR9H5O8_s8EAliD24LvynoxgQOp9r0A78EIBRoqdZKJSS7kSgl_8eRFTGgxZBPGmyBKNWvxrd2XnRp19QPgymMi2kR0HJDWRemtSFHxYsjTrVVnpeiHjZ7WTKNawZPB-7ELPIHm_C_-GuJ4I1fnnM_uUna2rh6mr3KeRQF4LJGmDjesdHIpy8FDmepqsIcAAxpmAi6kJRtDr6QAxoh20zi0jCni1pPmLQyoDsau7U7l3Nev_STFbFiHBk-mLYbhNqV_MCcFY1-GeWynfehehWoVeGTShVoxXrDSWklPb58DaQKuwXJ8-kvmvWVhVqWGqF5l7qUj3D2CIxr4tXsQ6FUPkntvFw3S4GrLqAl-P7XoR5alRxSyC6KypYeY7pHRZBDDeoFWgCOJhEymWtKrcTt-Yzd2EL3vQYnwhYOp0hw1n-eXnE1WkaB4Wg',
'shop' => 2
]
];
}
/**
* Provides tokens when can't get info about shop
*
* @return array
*/
public function provideTokensWithInvalidShopInfo()
{
return [
['invalid' => 'siUk9MRV9XUERFU0siLCJST0xFX1NIT1AiXSwidXNlcm5hbWUiOjEsImlwIjoiMTcyLjE5LjAuMSIsInNob3AiOjJ9.qeroBbMHVgQWypDaF6FPmaZadu7D1u1JObCn9rXy44pGL1mWESdVCI6pU_MajeCJsQ-V3emWMOfqHl5AIiH7BZb2iW04ahGJjJTtRGaEfGH5ztyG-00TVzf51V0mtX3i3DuEEJd8F6LDHK8C51oqm6WkHVv__GhsqOlMz_WTDdst-IRUK-kgcUBhbYy-XzVxt4LADQhs4SsJqd-0wYPaobTFRQaHel69oGF_ymwJ4snla4uJxlfIHLtmYRArOIcDNKcPIOH8cMo-UJP9B15IxuOGO0M2hR74LNSmDUpIHmeQ24rEiwp73q2yhXYIHhIBdExDk7GAHFhOILIqa05D48V8fkPLr0TFVVCACvylJHwj3UsYPzI1WvhdrEHcGr1MC8bWB2KAC_RpB5Vvo7kPp0YXcUa7nbszL90v1njKpVrcSrpYG69a4Ym8ZXSdAS7jJmoSH-Xf3JXXi_6vtxtSsm-DG_zwd7VoWupBu1rG1h_ARW-Lambj_Ql2XZEAWAvdR6LqHkL5SyIZ7CnscbNY_VbYoyRHsQIwhzbaQdBSwBa4qu0VsEHtwdV2acbDZhojm-DMb4b7vr3znyw_WnHPSvjOGRXmW2KhD0bwwfrAJcquc0rL5N04FRVYXR7AnJjN-j1j0bfhvDN9a5W-yHidmp9_OZ0HVCqK5c0IIsiv-Ms'],
['no shop id' => 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpYXQiOjE1MzQ5NDE5MjMsImV4cCI6MTUzNDk0NTUyMywicm9sZXMiOlsiUk9MRV9VU0VSIiwiUk9MRV9TSE9QIl0sInVzZXJuYW1lIjozLCJpcCI6IjE3Mi4xOS4wLjEifQ.S8Dkz9C7d0zHRn5_uRzjdBHH437JJZ4CdHTRc-Bwn1bnP9rj0SGn3AbCA53TlZjBl2EX0cigRlEMYsKEr0eQdQK8dellP0EjtPSaX5_5nEuU_H0X_6oJT8wYiS9N2jVm6W3UiKHMJBCR9JQfhjHYmMRx-NKhAi5xUgiGIWC7IWhNvLzHu52sRozkG2jTssnHGid087FdnQ1aG9c4dYY9piSw-5xBf8FruP9sDoWhTvFzESHIlwzgL5MNHQx-9HUH6caWoblpas959YqbD29h49YuCHLbifR1sMjSUWnkw69WLGDAFs8aKPCR5FsfKg3Rac0s957Cl3ES60eL7kWJ2mk1kRjxpFa6me1pWvh7Pt6lpDsJPLvTIbcZ_aDX5taOOiucL8YO-PbCB37Ffi2L4Am0-b4EGrqarBprjUWe2CJA9tCfjjFm0McOotDNVjLDmU7wAdHv8hXEOq4Kr2wd1z7suRqZii3VjMotoWFz9Cq4BTu1cs_Z_OLq5aC_uhnWq-SsKx3pdfL5tDXZ_CPqDCW0_3692FT8Z_puk1UUtMI_I_GkY_gp-npH72D8VcYdI-0j4LJoEtviGk6-0Lk47CiygGw79TaFjcEhwxPoYD_7MwMEw7vJiYYO8PVptlSuQy7j2-cPI0XPHlu19tVzA97ilqOlRAxt_SihXMfSoyo'],
['no shop role' => 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpYXQiOjE1MzQ5NDIwNjEsImV4cCI6MTUzNDk0NTY2MSwicm9sZXMiOlsiUk9MRV9VU0VSIl0sInVzZXJuYW1lIjozLCJpcCI6IjE3Mi4xOS4wLjEiLCJzaG9wIjo1fQ.PS5SQixw9k9_-Waxho4GKJ1QudCSzee6gy9_cFjWnVcBpMGH-PkHf5iDO5rWwqQSsKpBgMi5m-FFCYoelHa5q1-XAn6FkRlj0aXNcQZCY6YGfqIaDeCP-0DEVoSqfaceFXLZbTyPz4aKrurONjWdZwuw9uull6Ho4Nq1B_E5QTpJBYehmebgWnS5OjHDjJVW0UrknwKHiRSohP-vCA5P2HQGZpZXrUCkLFcL2PqCCchORuHUQr3xjn2OleE4Jt1RsD5Lymo3m8s6WkRw9GepWV7-vJ0WDh3Mu_irkstZlCyujfh0PNnRSEyr9jshW2OXnDX_l0dLzsd5n6pPX1OVa58FpkZNb3s7hAsVxQ2Dd9GUg2o-qMZDCP9LbXn_CGUqiyXo4iIdal4balF0DpUGNEfggwqnL4leTsHqUirsN1bhLLhRmkAYooCfFuEMA9F5G66zF8Vwl5AuZSz8Nrj-T0krM54H5ykhzVttpWyRA9TcVywKAC9E2DFDOMfajtJA_LcMv5xg-m0uhhxlGk25HAY8yVWQdPfBp5KIq2jO3vLPzVmBDPFjtDgwiUXvXVakFS7AmtI8DRWh8dq92F2dGDV67uZ_WK5kqBQEtO1abfM5EF0zcQ9r_E4KqjLJfXyCyLMucw8CUdsE8MEcCfjpE06_mSuRMW1dpoSPJWGXE5Y'],
['no whole shop info' => 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpYXQiOjE1MzQ5NDIwMjksImV4cCI6MTUzNDk0NTYyOSwicm9sZXMiOlsiUk9MRV9VU0VSIl0sInVzZXJuYW1lIjozLCJpcCI6IjE3Mi4xOS4wLjEifQ.XTvcWiKWLda4TnHhWnqrOKCBseiHmjnDYgmPCKhX6NrEYMu4mN0puKgnoeOWJVZHBjFQ5X--khMFKNKU4e7Zgc6MWgnSc5niKyZpr73D-PVfUkOG81we2-DSteik2i3F2R2cTSIUbYMJKeqe7fQ0qTZ3-7s6kNgKAkIhGraQrbbxi-FTp4uNbUrDwcDEyBZ_T9zmcR9jXsKLVJszHdmc8K_eVYwj2jOR8bouGOqpCHwlGz0bEpcSPqXJ_DsotVeM91QIBls4JzImTFbYr06N1GdG4oFzMNWqVhO9iJ4-ElN_COPLp1ou0i1Ha0ZedYajI2CJrhailbF5ybZd5x08tiDoMa26aVpH09wOe_P4zYno0ksMnZ66WpPcnBgnPA_dlgcqUUkc93igicD8XCKEBokEyF16IzI3A8Y85FEuwkIj-JadM8ZTJqHErxNbhZyuEGqWvQfwhawade-3CxOUz3krbG8LxhNPBYrm2t8NQpRwwFoQPa0lvEdMiGo4JL0J7hW02shT2iGPOUwJ0_KfpXCU5ensd60Mou0GQhnUPhKvnA0CtvQn5JgX_TM5OKKCSvtcIEaW2pqq96--S8atnQp2GwZU0Ccs8R6HAfH61d8cwL8abwKvr6A5wQoskn28YPwWu8g9Tvt556i2oIvFWEjrFOnfQyhmQj1GCVMafFc'],
];
}
/**
* @dataProvider provideTokensWithShopInfo
*/
public function testValidShopInfoFromToken($token, $shop)
{
$saasToken = new JWTSaasToken(new JWTToken($token));
$this->assertTrue($saasToken->hasShopId(), 'Token should have shop id info');
$this->assertEquals($shop, $saasToken->getShopId(), 'Invalid shop id provided in token');
}
/**
* @dataProvider provideTokensWithInvalidShopInfo
*/
public function testTokensWithInvalidShopInfo($token)
{
$saasToken = new JWTSaasToken(new JWTToken($token));
$this->assertFalse($saasToken->hasShopId(), 'Token should NOT have shop id info');
}
}
\ No newline at end of file
<?php
use WPDesk\ApiClient\Authentication\JWTToken;
class TestJWToken extends \PHPUnit\Framework\TestCase
{
public function testExpiredToken()
{
$expiredToken = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpYXQiOjE1MzQ4NTc2OTEsImV4cCI6MTUzNDg2MTI5MSwicm9sZXMiOlsiUk9MRV9VU0VSIiwiUk9MRV9TSE9QIl0sInVzZXJuYW1lIjozLCJpcCI6IjE3Mi4xOS4wLjEiLCJzaG9wIjoxfQ.iB9u8f3uBdq1KhkkYPAVpPFSwvkK4CQypfFQIiM8N5acQSFxv-jyzD2guGs4HtLOdMvu4Dt5zkd4ZfQFJNT2b6k7i33FyU4AsEDAVtwHL-TcqsnomXn70CjB5Rhgd2LteFl6wPp3XonE4SZ6Oo3vtBZzSoNNkR6-7T3OseJMwoJ7qzlEFBixNXG6UTlXPJky_b-rbfhFORlInxVzvs4GJgkJM3F3Ugy4bLSSPtBYxWcwKnKkFE8L4Z87Pezp4v35aXqJFpvJ3zll0gJ1F32Z2vx1oCmu0jOHkzzmu3wA2u6gK0iNgp591M7MKH2_3HaLfFY06cLoLDN6TR6wmzSvZYmzSw8C68MUH7uGWyGRU9j4YtdL8Bom3v8D1J-IC4Jx6-QPE665nd1VgzHZb1TFkHseUx3kLF5Jhgq7095NJ79QTC-6XTW2bN-T-dbbFkvjCU-B-9Ti09uMUEn4Rtlt_lThbr_lA9Wyc4qXAecqCz6dAC2UTy-_KxLwvfNrQ4sSS4y3B8bPh8qJrI0EsIbi5nY20sgBT71abUG9DHmIzj4rA5YW_DOu7Cez0WhNoCHjhMEymATrD2cWYxFCPWQfTTBuoD1HZgVfwYI9B-aZPw669orNRGkBtP8Bm5ghmCZoRHpISiY7UoIzgOnVKhB-Qv43g1uRprk7nYnfVEglqXg';
$jwtToken = new JWTToken($expiredToken);
$this->assertTrue($jwtToken->isSignatureValid(), 'Signature should be valid');
$this->assertTrue($jwtToken->isExpired(), 'Token should be expired long ago');
}
public function testImmortalToken()
{
$tokenWithExpiredDateInFuture = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpYXQiOjE1MzQ5NDIyODgsImV4cCI6MzI1MDM2ODAwMDAsInJvbGVzIjpbIlJPTEVfVVNFUiIsIlJPTEVfU0hPUCJdLCJ1c2VybmFtZSI6MywiaXAiOiIxNzIuMTkuMC4xIiwic2hvcCI6NX0.gWsHsCGm8iUc13lGc9PgUtwv-qIYWAl98-jdzOdzuQ_PwreLuEFonP-hutp0_IXZtHeE6e1XLID-Cgn0YaahLrxybVGBTbcVgTJVOMB9Fv-gP9lHYNqvBdfQRcdXiO6PYCBbfpezunhcmiML_ebFfprdoMn8kG3K-XbEkyRB7MOQg0-dZ35tncVCZDfzLh5fucFzteQmCcddIosKpqr-rjYjRRCAB-aTE1vbAulZa1_VmP17l6m64__QBjHW9r07OTq7QviayXpOB_4mBdxI26XjgDXANCzlejcka5Uh7AS03cP3zDP8Mc0VaVZxqUhwotQ93s0VtyMNyUn_nkMebAuwXkDOmgsQzJHhlPD8hs9vzmNbN6ymKwsSZ-E3q1yPTQwXzu-rERdCaNifAIKlUyTETlvE3aoN7M0JjdCIVHBkf81ygppMITYJ0eytjyqBg0wjdRlMCpHEtGVosqLe8sNZo7NeZ9tPexhZxWXQNRA6VyE1NwDYd9yPsKBSPrulFcvkgoGOuL98rfE9iizMDYD60G0eTgafnR_99-IH4yoBMIjf4UNVzAcw8revbSE-3bgmxpdjVTJtVXw9LH13BHdB6GN7KJDwH4NRoz_MQJMSBELU18zY2yjmkNLXYI3YArTE3OQ-qBzD7rgPrcJBmoWTswbNVnTl2csFVHdQZOo';
$jwtToken = new JWTToken($tokenWithExpiredDateInFuture);
$this->assertTrue($jwtToken->isSignatureValid(), 'Signature should be valid');
$this->assertFalse($jwtToken->isExpired(), 'Token should NOT be expired. Have 3000 years of live');
}
public function testStringValueAndBearer() {
$someToken = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpYXQiOjE1MzQ5NDIyODgsImV4cCI6MzI1MDM2ODAwMDAsInJvbGVzIjpbIlJPTEVfVVNFUiIsIlJPTEVfU0hPUCJdLCJ1c2VybmFtZSI6MywiaXAiOiIxNzIuMTkuMC4xIiwic2hvcCI6NX0.gWsHsCGm8iUc13lGc9PgUtwv-qIYWAl98-jdzOdzuQ_PwreLuEFonP-hutp0_IXZtHeE6e1XLID-Cgn0YaahLrxybVGBTbcVgTJVOMB9Fv-gP9lHYNqvBdfQRcdXiO6PYCBbfpezunhcmiML_ebFfprdoMn8kG3K-XbEkyRB7MOQg0-dZ35tncVCZDfzLh5fucFzteQmCcddIosKpqr-rjYjRRCAB-aTE1vbAulZa1_VmP17l6m64__QBjHW9r07OTq7QviayXpOB_4mBdxI26XjgDXANCzlejcka5Uh7AS03cP3zDP8Mc0VaVZxqUhwotQ93s0VtyMNyUn_nkMebAuwXkDOmgsQzJHhlPD8hs9vzmNbN6ymKwsSZ-E3q1yPTQwXzu-rERdCaNifAIKlUyTETlvE3aoN7M0JjdCIVHBkf81ygppMITYJ0eytjyqBg0wjdRlMCpHEtGVosqLe8sNZo7NeZ9tPexhZxWXQNRA6VyE1NwDYd9yPsKBSPrulFcvkgoGOuL98rfE9iizMDYD60G0eTgafnR_99-IH4yoBMIjf4UNVzAcw8revbSE-3bgmxpdjVTJtVXw9LH13BHdB6GN7KJDwH4NRoz_MQJMSBELU18zY2yjmkNLXYI3YArTE3OQ-qBzD7rgPrcJBmoWTswbNVnTl2csFVHdQZOo';
$jwtToken = new JWTToken($someToken);
$this->assertEquals($jwtToken->__toString(), $someToken);
$this->assertEquals($jwtToken->getAuthString(), 'Bearer ' . $someToken);
}
}
\ No newline at end of file
<?php
use WPDesk\ApiClient\Client\ClientFactory;
class TestClientFactory extends \PHPUnit\Framework\TestCase
{
/**
* Prepare client options.
*
* @param bool $isCachedClient
*
* @return \Mockery\MockInterface|\WPDesk\ApiClient\Client\ApiClientOptions
*/
private function prepareOptions($isCachedClient = false)
{
$options = Mockery::mock(\WPDesk\ApiClient\Client\ApiClientOptions::class);
$options->shouldReceive('getHttpClientClass')
->withAnyArgs()
->andReturn(\WPDesk\HttpClient\Curl\CurlClient::class);
$options->shouldReceive('getSerializerClass')
->withAnyArgs()
->andReturn(\WPDesk\ApiClient\Serializer\JsonSerializer::class);
$options->shouldReceive('getLogger')
->withAnyArgs()
->andReturn(new \Psr\Log\NullLogger());
$options->shouldReceive('getApiUrl')
->withAnyArgs()
->andReturn('https://app.flexibleshipping.com/api/v1');
$options->shouldReceive('getDefaultRequestHeaders')
->withAnyArgs()
->andReturn(array());
$options->shouldReceive('isCachedClient')
->withAnyArgs()
->andReturn($isCachedClient);
return $options;
}
/**
* Test createClient method.
*/
public function testCreateClient()
{
$clientFactory = new ClientFactory();
$client = $clientFactory->createClient($this->prepareOptions());
$this->assertInstanceOf(\WPDesk\ApiClient\Client\ClientImplementation::class, $client);
}
/**
* Test createClient method.
*/
public function testCreateClientCached()
{
$clientFactory = new ClientFactory();
$client = $clientFactory->createClient($this->prepareOptions(true));
$this->assertInstanceOf(\WPDesk\ApiClient\Client\CachedClient::class, $client);
}
}
\ No newline at end of file
<?php
/**
* PHPUnit bootstrap file
*/
require_once __DIR__ . '/../../vendor/autoload.php';
WP_Mock::setUsePatchwork( true );
WP_Mock::bootstrap();
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment