View source
<?php
namespace Drupal\Tests\lingotek\Unit\Remote;
use Drupal\lingotek\Entity\LingotekProfile;
use Drupal\lingotek\Exception\LingotekApiException;
use Drupal\lingotek\Lingotek;
use Drupal\lingotek\Remote\LingotekApi;
use Drupal\lingotek\Remote\LingotekHttp;
use Drupal\lingotek\Remote\LingotekHttpInterface;
use Drupal\Tests\UnitTestCase;
use GuzzleHttp\Exception\ClientException;
use Symfony\Component\HttpFoundation\Response;
class LingotekApiUnitTest extends UnitTestCase {
protected $lingotek_api;
protected $client;
protected function setUp() {
$this->client = $this
->getMockBuilder('\\Drupal\\lingotek\\Remote\\LingotekHttpInterface')
->disableOriginalConstructor()
->getMock();
$logger = $this
->getMockBuilder('\\Psr\\Log\\LoggerInterface')
->getMock();
$this->lingotek_api = new LingotekApi($this->client, $logger);
}
public function testGetDocument() {
$response = $this
->getMockBuilder('\\Psr\\Http\\Message\\ResponseInterface')
->disableOriginalConstructor()
->getMock();
$this->client
->expects($this
->at(0))
->method('get')
->with('/api/document/fancy-document-id/status')
->will($this
->returnValue($response));
$this->lingotek_api
->getDocument('fancy-document-id');
}
public function testAddTranslation() {
$response = $this
->getMockBuilder('\\Psr\\Http\\Message\\ResponseInterface')
->disableOriginalConstructor()
->getMock();
$this->client
->expects($this
->at(0))
->method('post')
->with('/api/document/fancy-document-id/translation', [
'locale_code' => 'es_ES',
'workflow_id' => 'my_workflow',
])
->will($this
->returnValue($response));
$this->client
->expects($this
->at(1))
->method('post')
->with('/api/document/fancy-document-id/translation', [
'locale_code' => 'es_ES',
])
->will($this
->returnValue($response));
$this->lingotek_api
->addTranslation('fancy-document-id', 'es_ES', 'my_workflow');
$this->lingotek_api
->addTranslation('fancy-document-id', 'es_ES', NULL);
}
public function testAddTranslationWithException() {
$request = $this
->getMockBuilder('\\Psr\\Http\\Message\\RequestInterface')
->disableOriginalConstructor()
->getMock();
$response = $this
->getMockBuilder('\\Psr\\Http\\Message\\ResponseInterface')
->disableOriginalConstructor()
->getMock();
$response
->expects($this
->any())
->method('getStatusCode')
->willReturn(Response::HTTP_BAD_REQUEST);
$response
->expects($this
->any())
->method('getBody')
->willReturn(json_encode([
'messages' => [
'Translation (es_ES) already exists.',
],
]));
$this->client
->expects($this
->at(0))
->method('post')
->with('/api/document/fancy-document-id/translation', [
'locale_code' => 'es_ES',
'workflow_id' => 'my_workflow',
])
->will($this
->throwException(new ClientException('Client error: `POST https://cms.lingotek.com/api/document/700e102b-b0ad-4ddf-9da1-73c62d587abc/translation` resulted in a `400 Bad Request` response:
{"messages":["Translation (es_ES) already exists."]}', $request, $response)));
$response = $this->lingotek_api
->addTranslation('fancy-document-id', 'es_ES', 'my_workflow');
$this
->assertEquals($response
->getStatusCode(), REsponse::HTTP_CREATED, 'If the translation existed, we succeed instead of failing.');
}
public function testDeleteDocument() {
$response = $this
->getMockBuilder('\\Psr\\Http\\Message\\ResponseInterface')
->disableOriginalConstructor()
->getMock();
$response
->expects($this
->any())
->method('getStatusCode')
->willReturn(Response::HTTP_ACCEPTED);
$this->client
->expects($this
->at(0))
->method('delete')
->with('/api/document/fancy-document-id')
->will($this
->returnValue($response));
$response = $this->lingotek_api
->deleteDocument('fancy-document-id');
$this
->assertEquals($response
->getStatusCode(), Response::HTTP_ACCEPTED);
}
public function testDeleteDocumentThatDoesntExist() {
$this->client
->expects($this
->at(0))
->method('delete')
->with('/api/document/fancy-document-id')
->will($this
->throwException(new \Exception('', Response::HTTP_NOT_FOUND)));
$response = $this->lingotek_api
->deleteDocument('fancy-document-id');
$this
->assertEquals($response
->getStatusCode(), Response::HTTP_NOT_FOUND);
}
public function testGetCommunities() {
$response = $this
->getMockBuilder('\\Psr\\Http\\Message\\ResponseInterface')
->disableOriginalConstructor()
->getMock();
$this->client
->expects($this
->once())
->method('get')
->with('/api/community', [
'limit' => 100,
])
->will($this
->returnValue($response));
$this->lingotek_api
->getCommunities();
}
public function testGetProjects() {
$response = $this
->getMockBuilder('\\Psr\\Http\\Message\\ResponseInterface')
->disableOriginalConstructor()
->getMock();
$this->client
->expects($this
->once())
->method('get')
->with('/api/project', [
'community_id' => 'my_community_id',
'limit' => 1000,
])
->will($this
->returnValue($response));
$this->lingotek_api
->getProjects('my_community_id');
}
public function testGetVaults() {
$response = $this
->getMockBuilder('\\Psr\\Http\\Message\\ResponseInterface')
->disableOriginalConstructor()
->getMock();
$this->client
->expects($this
->once())
->method('get')
->with('/api/vault', [
'limit' => 100,
'is_owned' => 'TRUE',
])
->will($this
->returnValue($response));
$this->lingotek_api
->getVaults('community_id');
}
public function testGetWorkflows() {
$community_id = 'my_community_id';
$response = $this
->getMockBuilder('\\Psr\\Http\\Message\\ResponseInterface')
->disableOriginalConstructor()
->getMock();
$this->client
->expects($this
->once())
->method('get')
->with('/api/workflow', [
'community_id' => $community_id,
'limit' => 1000,
])
->will($this
->returnValue($response));
$this->lingotek_api
->getWorkflows($community_id);
}
}