acquia_commercemanager-8.x-1.122/modules/acm/tests/src/Unit/Connector/APIWrapperTest.php
modules/acm/tests/src/Unit/Connector/APIWrapperTest.php
<?php
namespace Drupal\Tests\acm\Unit\Connector;
use Drupal\acm\Connector\APIWrapper;
use Drupal\acm\APIHelper;
use Drupal\acm\I18nHelper;
use Drupal\Core\Logger\LoggerChannelFactory;
use Drupal\Core\Logger\LoggerChannel;
use Drupal\acm\Connector\ClientFactory;
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Response;
use Drupal\Tests\UnitTestCase;
/**
* @coversDefaultClass \Drupal\acm\Access\VersionAccessCheck
* @group acm
*/
class APIWrapperTest extends UnitTestCase {
public $guzzleHttpResponseMock;
public $clientMock;
public $clientFactoryMock;
public $configMock;
public $configFactoryMock;
public $loggerChannelMock;
public $loggerChannelFactoryMock;
public $i18nHelperMock;
public $helperMock;
public $storeId;
public $apiVersion;
/**
* The system under test.
*
* @var \Drupal\acm\Connector\APIWrapper|\PHPUnit_Framework_MockObject_MockObject
*/
public $model;
/**
* {@inheritdoc}
*/
public function setUp() {
parent::setUp();
// Define some things.
// Arbitrary.
$this->storeId = '3';
// The current version.
$this->apiVersion = 'v2';
// Mock a response so we can stub response->getBody() and
// response->getStatusCode() in each test.
$this->guzzleHttpResponseMock = $this->getMockBuilder(Response::class)
->disableOriginalConstructor()
->setMethods(['getBody', 'getStatusCode'])
->getMock();
// Mock the constructor-injected classes
// a) clientFactory
// Mock the client so we can stub $client->post() and $client->get()
$this->clientMock = $this->getMockBuilder(Client::class)
->disableOriginalConstructor()
->setMethods(['post', 'get'])
->getMock();
// Mock the client factory.
$this->clientFactoryMock = $this->getMockBuilder(ClientFactory::class)
->disableOriginalConstructor()
->setMethods(['createClient'])
->getMock();
// Make the factory return the mocked client.
$this->clientFactoryMock->expects($this->once())
->method("createClient")
->withAnyParameters()
->willReturn($this->clientMock);
// b) Drupal\Core\Config\ConfigFactoryInterface
// Make a mock config factory.
$this->configMock = [
'acm.connector' => ['api_version' => $this->apiVersion],
];
$this->configFactoryMock = $this->getConfigFactoryStub($this->configMock);
// c) Drupal\Core\Logger\LoggerChannelFactory
// Make a mock logger channel.
$this->loggerChannelMock = $this->getMockBuilder(LoggerChannel::class)
->disableOriginalConstructor()
->setMethods([])
->getMock();
// Make a factory to return it.
$this->loggerChannelFactoryMock = $this->getMockBuilder(LoggerChannelFactory::class)
->disableOriginalConstructor()
->setMethods(['get'])
->getMock();
$this->loggerChannelFactoryMock->expects($this->any())
->method('get')
->with('acm_sku')
->willReturn($this->loggerChannelMock);
// d) Drupal\acm\I18nHelper.
$this->i18nHelperMock = $this->getMockBuilder(I18nHelper::class)
->disableOriginalConstructor()
->setMethods(['getStoreIdFromLangcode'])
->getMock();
$this->i18nHelperMock->expects($this->any())
->method('getStoreIdFromLangcode')
->withAnyParameters()
->willReturn($this->storeId);
// e) Drupal\acm\APIHelper.
$this->helperMock = $this->getMockBuilder(APIHelper::class)
->disableOriginalConstructor()
->setMethods([])
->getMock();
// Generate the class under test
// We use a mock so that we can stub the trait $this->tryAgentRequest()
// We inject the mocked constructor classes.
$this->createThisModel();
}
/**
* Call this function if you change one fo the constructors.
*/
public function createThisModel() {
// Generate the class under test
// We use a mock so that we can stub the trait $this->tryAgentRequest()
// We inject the mocked constructor classes.
$this->model = $this->getMockBuilder(APIWrapper::class)
->enableOriginalConstructor()
->setConstructorArgs(
[
$this->clientFactoryMock,
$this->configFactoryMock,
$this->loggerChannelFactoryMock,
$this->i18nHelperMock,
$this->helperMock,
]
)
->setMethods(NULL)
->getMock();
}
/**
* An example of how to test an endpoint for v1.
*/
public function testCreateCartV1() {
// Set the version. But now we need a new configFactoryMock too.
$this->apiVersion = 'v1';
// Make the new mock config factory.
$this->configMock = [
'acm.connector' => ['api_version' => $this->apiVersion],
];
$this->configFactoryMock = $this->getConfigFactoryStub($this->configMock);
// And now we need to make a new class to test.
$this->createThisModel();
$customer_id = 17;
$expectedEndpoint = $this->apiVersion . "/agent/cart/create";
// V1 options format.
$expectedOptions = [];
$expectedOptions['form_params'] = ['customer_id' => (string) $customer_id];
$expectedOptions['query'] = ['store_id' => $this->storeId];
// A V1 throw-back:
$expectedResultKey = 'cart';
$mockedResponseBody = json_encode([
$expectedResultKey => [
"dummy" => "Any valid JSON string",
"cart_id" => "For example, being specific to this test",
],
"success" => TRUE,
]);
// Set up the response mock to return some things to test
// The expectations will change if you test failed routes.
// Currently, failure can't be tested because *at least* the
// class new RouteException needs a Drupal container
// but we aren't testing failed responses here (yet).
// So valid (mocked) responses only call these once.
$this->guzzleHttpResponseMock->expects($this->exactly(1))
->method('getBody')
->willReturn($mockedResponseBody);
$this->guzzleHttpResponseMock->expects($this->exactly(1))
->method('getStatusCode')
->willReturn(200);
// This *is* the test. Set expectations on $client->post().
$this->clientMock->expects($this->once())
->method('post')
->with($expectedEndpoint, $expectedOptions)
->willReturn($this->guzzleHttpResponseMock);
// Do it.
$dummyResult = $this->model->createCart($customer_id);
// Check it (this is not really the test).
// Trivially check that tryAgentRequest() returns the dummy JSON body as
// an array.
$this->assertEquals("Any valid JSON string", $dummyResult['dummy']);
}
/**
* Tests cart creation interface.
*/
public function testCreateCart() {
$customer_id = 17;
$expectedEndpoint = $this->apiVersion . "/agent/cart/create";
$expectedOptions = [];
$expectedOptions['json'] = ['customer_id' => (string) $customer_id];
$expectedOptions['query'] = ['store_id' => $this->storeId];
$mockedResponseBody = json_encode([
"dummy" => "Any valid JSON string",
]);
// Set up the response mock to return some things to test.
// The expectations will change if you test failed routes.
// Currently, failure can't be tested because *at least* the
// class new RouteException needs a Drupal container
// but we aren't testing failed responses here (yet).
// So valid (mocked) responses only call these functions once.
$this->guzzleHttpResponseMock->expects($this->exactly(1))
->method('getBody')
->willReturn($mockedResponseBody);
$this->guzzleHttpResponseMock->expects($this->exactly(1))
->method('getStatusCode')
->willReturn(200);
// This *is* the test. Set expectations on $client->post().
$this->clientMock->expects($this->once())
->method('post')
->with($expectedEndpoint, $expectedOptions)
->willReturn($this->guzzleHttpResponseMock);
// Do it.
$dummyResult = $this->model->createCart($customer_id);
// Check it (this is not really the test).
// Trivially check that tryAgentRequest() returns the dummy JSON body as
// an array.
$this->assertEquals("Any valid JSON string", $dummyResult['dummy']);
}
/**
* Tests stock check for sku.
*/
public function testSkuStockCheck() {
$sku = "MB01-24W";
$expectedEndpoint = $this->apiVersion . "/agent/stock/" . $sku;
$expectedOptions = [];
$expectedOptions['query'] = ['store_id' => $this->storeId];
$mockedResponseBody = json_encode([
"dummy" => "Any valid JSON string",
]);
// Set up the response mock to return some things to test.
$this->guzzleHttpResponseMock->expects($this->exactly(1))
->method('getBody')
->willReturn($mockedResponseBody);
$this->guzzleHttpResponseMock->expects($this->exactly(1))
->method('getStatusCode')
->willReturn(200);
// This *is* the test. Set expectations on $client->get().
$this->clientMock->expects($this->once())
->method('get')
->with($expectedEndpoint, $expectedOptions)
->willReturn($this->guzzleHttpResponseMock);
// Do it.
$dummyResult = $this->model->skuStockCheck($sku);
// Check it (this is not really the test).
// Trivially check that tryAgentRequest() returns the dummy JSON body as
// an array.
$this->assertEquals("Any valid JSON string", $dummyResult['dummy']);
}
/**
* Tests getting cart.
*/
public function testGetCart() {
$cart_id = "4";
$customer_id = "17";
$expectedEndpoint = $this->apiVersion . "/agent/cart/" . $cart_id;
$expectedOptions = [];
$expectedOptions['query'] = [
'customer_id' => (string) $customer_id,
'store_id' => $this->storeId,
];
$mockedResponseBody = json_encode([
"dummy" => "Any valid JSON string",
]);
// Set up the response mock to return some things to test.
$this->guzzleHttpResponseMock->expects($this->exactly(1))
->method('getBody')
->willReturn($mockedResponseBody);
$this->guzzleHttpResponseMock->expects($this->exactly(1))
->method('getStatusCode')
->willReturn(200);
// This *is* the test. Set expectations on $client->get().
$this->clientMock->expects($this->once())
->method('get')
->with($expectedEndpoint, $expectedOptions)
->willReturn($this->guzzleHttpResponseMock);
// Do it.
$dummyResult = $this->model->getCart($cart_id, $customer_id);
// Check it (this is not really the test).
// Trivially check that tryAgentRequest() returns the dummy JSON body as
// an array.
$this->assertEquals("Any valid JSON string", $dummyResult['dummy']);
}
/**
* Tests deleting customer address.
*/
public function testDeleteCustomerAddress() {
$customer_id = "17";
$address_id = "4";
$expectedEndpoint = $this->apiVersion . "/agent/customer/address/delete";
$expectedOptions = [];
$expectedOptions['json'] = [
'customer_id' => (string) $customer_id,
'address_id' => $address_id,
];
$expectedOptions['query'] = [
'store_id' => $this->storeId,
];
$mockedResponseBody = json_encode([
"dummy" => "Any valid JSON string",
"deleted" => TRUE,
]);
// Set up the response mock to return some things to test.
$this->guzzleHttpResponseMock->expects($this->exactly(1))
->method('getBody')
->willReturn($mockedResponseBody);
$this->guzzleHttpResponseMock->expects($this->exactly(1))
->method('getStatusCode')
->willReturn(200);
// This *is* the test. Set expectations on $client->get().
$this->clientMock->expects($this->once())
->method('post')
->with($expectedEndpoint, $expectedOptions)
->willReturn($this->guzzleHttpResponseMock);
// Do it.
$dummyResult = $this->model->deleteCustomerAddress($customer_id, $address_id);
// Check it (this is not really the test).
// Trivially check that tryAgentRequest() returns the dummy JSON body as
// an array.
$this->assertEquals(TRUE, $dummyResult);
}
/**
* Tests resetting customer password.
*
* Please note this is not a V2 endpoint.
*/
public function testResetCustomerPassword() {
$email = "mickey@mouse.com";
$expectedEndpoint = $this->apiVersion . "/agent/customer/resetpass/get";
$expectedOptions = [];
$expectedOptions['json'] = [
'email' => $email,
];
$expectedOptions['query'] = [
'store_id' => $this->storeId,
];
$mockedResponseBody = json_encode([
"dummy" => "Any valid JSON string",
"success" => TRUE,
]);
// Set up the response mock to return some things to test.
$this->guzzleHttpResponseMock->expects($this->exactly(1))
->method('getBody')
->willReturn($mockedResponseBody);
$this->guzzleHttpResponseMock->expects($this->exactly(1))
->method('getStatusCode')
->willReturn(200);
// This *is* the test. Set expectations on $client->get().
$this->clientMock->expects($this->once())
->method('post')
->with($expectedEndpoint, $expectedOptions)
->willReturn($this->guzzleHttpResponseMock);
// Do it.
$dummyResult = $this->model->resetCustomerPassword($email);
// Check it (this is not really the test).
// Trivially check that tryAgentRequest() returns the dummy JSON body as
// an array.
$this->assertEquals(TRUE, $dummyResult);
}
/**
* Tests authenticating customer.
*/
public function testAuthenticateCustomer() {
$email = "mickey@mouse.com";
$password = "pluto";
$expectedEndpoint = $this->apiVersion . "/agent/customer/$email";
$expectedOptions = [];
$expectedOptions['json'] = [
'password' => $password,
];
$expectedOptions['query'] = [
'store_id' => $this->storeId,
];
$mockedResponseBody = json_encode([
"dummy" => "Any valid JSON string",
]);
// Set up the response mock to return some things to test.
$this->guzzleHttpResponseMock->expects($this->exactly(1))
->method('getBody')
->willReturn($mockedResponseBody);
$this->guzzleHttpResponseMock->expects($this->exactly(1))
->method('getStatusCode')
->willReturn(200);
// This *is* the test. Set expectations on $client->get().
$this->clientMock->expects($this->once())
->method('post')
->with($expectedEndpoint, $expectedOptions)
->willReturn($this->guzzleHttpResponseMock);
// Do it.
$dummyResult = $this->model->authenticateCustomer($email, $password);
// Check it (this is not really the test).
// Trivially check that tryAgentRequest() returns the dummy JSON body as
// an array.
$this->assertEquals("Any valid JSON string", $dummyResult['dummy']);
}
/**
* Tests getting customer token.
*/
public function testGetCustomerToken() {
$email = "mickey@mouse.com";
$password = "pluto";
$expectedEndpoint = $this->apiVersion . "/agent/customer/token/get";
$expectedOptions = [];
$expectedOptions['json'] = [
'email' => $email,
'password' => $password,
];
$expectedOptions['query'] = [
'store_id' => $this->storeId,
];
$mockedResponseBody = json_encode([
"dummy" => "Any valid JSON string",
]);
// Set up the response mock to return some things to test.
$this->guzzleHttpResponseMock->expects($this->exactly(1))
->method('getBody')
->willReturn($mockedResponseBody);
$this->guzzleHttpResponseMock->expects($this->exactly(1))
->method('getStatusCode')
->willReturn(200);
// This *is* the test. Set expectations on $client->get().
$this->clientMock->expects($this->once())
->method('post')
->with($expectedEndpoint, $expectedOptions)
->willReturn($this->guzzleHttpResponseMock);
// Do it.
$dummyResult = $this->model->getCustomerToken($email, $password);
// Check it (this is not really the test).
// Trivially check that tryAgentRequest() returns the dummy JSON body as
// an array.
$this->assertEquals("Any valid JSON string", $dummyResult['dummy']);
}
/**
* Tests getting current customer.
*/
public function testGetCurrentCustomer() {
$token = "some_token";
$expectedEndpoint = $this->apiVersion . "/agent/customer-by-token";
$expectedOptions = [];
$expectedOptions['json'] = [
'token' => $token,
];
$expectedOptions['query'] = [
'store_id' => $this->storeId,
];
$mockedResponseBody = json_encode([
"dummy" => "Any valid JSON string",
]);
// Set up the response mock to return some things to test.
$this->guzzleHttpResponseMock->expects($this->exactly(1))
->method('getBody')
->willReturn($mockedResponseBody);
$this->guzzleHttpResponseMock->expects($this->exactly(1))
->method('getStatusCode')
->willReturn(200);
// This *is* the test. Set expectations on $client->get().
$this->clientMock->expects($this->once())
->method('post')
->with($expectedEndpoint, $expectedOptions)
->willReturn($this->guzzleHttpResponseMock);
// Do it.
$dummyResult = $this->model->getCurrentCustomer($token);
// Check it (this is not really the test).
// Trivially check that tryAgentRequest() returns the dummy JSON body as
// an array.
$this->assertEquals("Any valid JSON string", $dummyResult['dummy']);
}
/**
* Tests getting list of categories.
*/
public function testGetCategories() {
$expectedEndpoint = $this->apiVersion . "/agent/categories";
$expectedOptions = [];
$expectedOptions['query'] = [
'store_id' => $this->storeId,
];
$mockedResponseBody = json_encode([
"dummy" => "Any valid JSON string",
]);
// Set up the response mock to return some things to test.
$this->guzzleHttpResponseMock->expects($this->exactly(1))
->method('getBody')
->willReturn($mockedResponseBody);
$this->guzzleHttpResponseMock->expects($this->exactly(1))
->method('getStatusCode')
->willReturn(200);
// This *is* the test. Set expectations on $client->get().
$this->clientMock->expects($this->once())
->method('get')
->with($expectedEndpoint, $expectedOptions)
->willReturn($this->guzzleHttpResponseMock);
// Do it.
$dummyResult = $this->model->getCategories();
// Check it (this is not really the test).
// Trivially check that tryAgentRequest() returns the dummy JSON body as
// an array.
$this->assertEquals("Any valid JSON string", $dummyResult['dummy']);
}
/**
* Tests getting product options.
*/
public function testGetProductOptions() {
$expectedEndpoint = $this->apiVersion . "/agent/product/options";
$expectedOptions = [];
$expectedOptions['query'] = [
'store_id' => $this->storeId,
];
$mockedResponseBody = json_encode([
"dummy" => "Any valid JSON string",
]);
// Set up the response mock to return some things to test.
$this->guzzleHttpResponseMock->expects($this->exactly(1))
->method('getBody')
->willReturn($mockedResponseBody);
$this->guzzleHttpResponseMock->expects($this->exactly(1))
->method('getStatusCode')
->willReturn(200);
// This *is* the test. Set expectations on $client->get().
$this->clientMock->expects($this->once())
->method('get')
->with($expectedEndpoint, $expectedOptions)
->willReturn($this->guzzleHttpResponseMock);
// Do it.
$dummyResult = $this->model->getProductOptions();
// Check it (this is not really the test).
// Trivially check that tryAgentRequest() returns the dummy JSON body as
// an array.
$this->assertEquals("Any valid JSON string", $dummyResult['dummy']);
}
/**
* Off.
*/
public function offTestGetPromotionsReturnsEmptyArrayIfTypeIsNotRecognized() {
$incorrectType = "incorrect";
// WHY DOES THIS NOT WORK????
// Reset the expects-count on the client factory mock (just for this test)
$this->clientFactoryMock->expects($this->never())
->method("createClient")
->withAnyParameters()
->willReturn($this->clientMock);
// And inject it into a new model...
$this->createThisModel();
// Set up the response mock to return some things to test.
$this->guzzleHttpResponseMock->expects($this->never())
->method('getBody');
$this->guzzleHttpResponseMock->expects($this->never())
->method('getStatusCode');
// This *is* the test. Set expectations on $client->get().
$this->clientMock->expects($this->never())
->method('get');
// It should return an empty array if the type is not cart nor category.
$dummyResult = $this->model->getPromotions($incorrectType);
// Check it (this is not really the test).
// Trivially check that tryAgentRequest() returns the dummy JSON body as
// an array.
$this->assertEquals([], $dummyResult);
}
/**
* Tests getting promotions without valid type.
*/
public function testGetPromotionsGivenNoType() {
$defaultType = "category";
$expectedEndpoint = $this->apiVersion . "/agent/promotions/$defaultType";
$expectedOptions = [];
$expectedOptions['query'] = [
'store_id' => $this->storeId,
];
$mockedResponseBody = json_encode([
"dummy" => "Any valid JSON string",
]);
// Set up the response mock to return some things to test.
$this->guzzleHttpResponseMock->expects($this->exactly(1))
->method('getBody')
->willReturn($mockedResponseBody);
$this->guzzleHttpResponseMock->expects($this->exactly(1))
->method('getStatusCode')
->willReturn(200);
// This *is* the test. Set expectations on $client->get().
$this->clientMock->expects($this->once())
->method('get')
->with($expectedEndpoint, $expectedOptions)
->willReturn($this->guzzleHttpResponseMock);
// Do it.
$dummyResult = $this->model->getPromotions($defaultType);
// Check it (this is not really the test).
// Trivially check that tryAgentRequest() returns the dummy JSON body as
// an array.
$this->assertEquals("Any valid JSON string", $dummyResult['dummy']);
}
/**
* Tests getting promotions with valid type.
*/
public function testGetPromotionsGivenValidType() {
$validType = "cart";
$expectedEndpoint = $this->apiVersion . "/agent/promotions/$validType";
$expectedOptions = [];
$expectedOptions['query'] = [
'store_id' => $this->storeId,
];
$mockedResponseBody = json_encode([
"dummy" => "Any valid JSON string",
]);
// Set up the response mock to return some things to test.
$this->guzzleHttpResponseMock->expects($this->exactly(1))
->method('getBody')
->willReturn($mockedResponseBody);
$this->guzzleHttpResponseMock->expects($this->exactly(1))
->method('getStatusCode')
->willReturn(200);
// This *is* the test. Set expectations on $client->get().
$this->clientMock->expects($this->once())
->method('get')
->with($expectedEndpoint, $expectedOptions)
->willReturn($this->guzzleHttpResponseMock);
// Do it.
$dummyResult = $this->model->getPromotions($validType);
// Check it (this is not really the test).
// Trivially check that tryAgentRequest() returns the dummy JSON body as
// an array.
$this->assertEquals("Any valid JSON string", $dummyResult['dummy']);
}
/**
* Tests getting products changed since provided updated date.
*/
public function testGetProductsByUpdatedDate() {
$date_time = new \DateTime();
$expectedEndpoint = $this->apiVersion . "/agent/products";
$expectedOptions = [];
$expectedOptions['query']['updated'] = $date_time->format('Y-m-d H:i:s');
$expectedOptions['query']['store_id'] = $this->storeId;
$mockedResponseBody = json_encode([
"dummy" => "Any valid JSON string",
]);
// Set up the response mock to return some things to test.
$this->guzzleHttpResponseMock->expects($this->exactly(1))
->method('getBody')
->willReturn($mockedResponseBody);
$this->guzzleHttpResponseMock->expects($this->exactly(1))
->method('getStatusCode')
->willReturn(200);
// This *is* the test. Set expectations on $client->get().
$this->clientMock->expects($this->once())
->method('get')
->with($expectedEndpoint, $expectedOptions)
->willReturn($this->guzzleHttpResponseMock);
// Do it.
$dummyResult = $this->model->GetProductsByUpdatedDate($date_time);
// Check it (this is not really the test).
// Trivially check that tryAgentRequest() returns the dummy JSON body as
// an array.
$this->assertEquals("Any valid JSON string", $dummyResult['dummy']);
}
/**
* Tests getting products with default page size.
*/
public function testGetProductsDefaultPageSize() {
$defaultCount = 100;
$expectedEndpoint = $this->apiVersion . "/agent/products";
$expectedOptions = [];
$expectedOptions['query'] = [
'page_size' => $defaultCount,
'store_id' => $this->storeId,
];
$mockedResponseBody = json_encode([
"dummy" => "Any valid JSON string",
]);
// Set up the response mock to return some things to test.
$this->guzzleHttpResponseMock->expects($this->exactly(1))
->method('getBody')
->willReturn($mockedResponseBody);
$this->guzzleHttpResponseMock->expects($this->exactly(1))
->method('getStatusCode')
->willReturn(200);
// This *is* the test. Set expectations on $client->get().
$this->clientMock->expects($this->once())
->method('get')
->with($expectedEndpoint, $expectedOptions)
->willReturn($this->guzzleHttpResponseMock);
// Do it.
$dummyResult = $this->model->getProducts();
// Check it (this is not really the test).
// Trivially check that tryAgentRequest() returns the dummy JSON body as
// an array.
$this->assertEquals("Any valid JSON string", $dummyResult['dummy']);
}
/**
* Tests getting specific amount of products.
*/
public function testGetProductsGivenCount() {
$count = 50;
$expectedEndpoint = $this->apiVersion . "/agent/products";
$expectedOptions = [];
$expectedOptions['query'] = [
'page_size' => $count,
'store_id' => $this->storeId,
];
$mockedResponseBody = json_encode([
"dummy" => "Any valid JSON string",
]);
// Set up the response mock to return some things to test.
$this->guzzleHttpResponseMock->expects($this->exactly(1))
->method('getBody')
->willReturn($mockedResponseBody);
$this->guzzleHttpResponseMock->expects($this->exactly(1))
->method('getStatusCode')
->willReturn(200);
// This *is* the test. Set expectations on $client->get().
$this->clientMock->expects($this->once())
->method('get')
->with($expectedEndpoint, $expectedOptions)
->willReturn($this->guzzleHttpResponseMock);
// Do it.
$dummyResult = $this->model->getProducts($count);
// Check it (this is not really the test).
// Trivially check that tryAgentRequest() returns the dummy JSON body as
// an array.
$this->assertEquals("Any valid JSON string", $dummyResult['dummy']);
}
/**
* Tests product full sync request.
*/
public function testProductFullSync() {
$skus = '1,2,3,4,5';
// page_size is unused. What is the specification for it?
$page_size = 0;
$categoryId = "27";
$expectedEndpoint = $this->apiVersion . "/agent/products";
$expectedOptions = [];
// $expectedOptions['query']['category_id'] = $category_id;.
$expectedOptions['query'] = [
// 'category_id' => $category_id,.
'skus' => $skus,
'store_id' => $this->storeId,
];
ksort($expectedOptions['query']);
$mockedResponseBody = json_encode([
"dummy" => "Any valid JSON string",
]);
// Set up the response mock to return some things to test.
$this->guzzleHttpResponseMock->expects($this->exactly(1))
->method('getBody')
->willReturn($mockedResponseBody);
$this->guzzleHttpResponseMock->expects($this->exactly(1))
->method('getStatusCode')
->willReturn(200);
// This *is* the test. Set expectations on $client->get().
$this->clientMock->expects($this->once())
->method('get')
->with($expectedEndpoint, $expectedOptions)
->willReturn($this->guzzleHttpResponseMock);
// Do it.
$dummyResult = $this->model->productFullSync($skus);
// Check it (this is not really the test).
// Trivially check that tryAgentRequest() returns the dummy JSON body as
// an array.
$this->assertEquals("Any valid JSON string", $dummyResult['dummy']);
}
}
