Spaces:
No application file
No application file
File size: 5,253 Bytes
d2897cd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
<?php
declare(strict_types=1);
namespace Mautic\CoreBundle\Tests\Command;
use GuzzleHttp\Handler\MockHandler;
use GuzzleHttp\Psr7\Response;
use Mautic\CoreBundle\Command\PushTransifexCommand;
use Mautic\CoreBundle\Test\MauticMysqlTestCase;
use PHPUnit\Framework\Assert;
use Psr\Http\Message\RequestInterface;
use Symfony\Component\HttpFoundation\Response as SymfonyResponse;
class PushTransifexCommandFunctionalTest extends MauticMysqlTestCase
{
protected function setUp(): void
{
$this->configParams['transifex_api_token'] = 'some_api_token';
parent::setUp();
}
public function testPullCommand(): void
{
$handlerStack = static::getContainer()->get(MockHandler::class);
// One resource is going to be found in the Transifex project:
$handlerStack->append(
function (RequestInterface $request) {
Assert::assertSame('GET', $request->getMethod());
Assert::assertSame('https://rest.api.transifex.com/resources?filter%5Bproject%5D=o%3Amautic%3Ap%3Amautic', $request->getUri()->__toString());
return new Response(SymfonyResponse::HTTP_OK, [], file_get_contents(__DIR__.'/../Fixtures/Transifex/resources.json'));
}
);
// The first resource does not exist and must be created
$handlerStack->append(
function (RequestInterface $request) {
$body = json_decode($request->getBody()->__toString(), true);
Assert::assertSame('POST', $request->getMethod());
Assert::assertSame('https://rest.api.transifex.com/resources', $request->getUri()->__toString());
Assert::assertSame('WebhookBundle flashes', $body['data']['attributes']['name']);
Assert::assertSame('webhookbundle-flashes', $body['data']['attributes']['slug']);
Assert::assertSame('INI', $body['data']['relationships']['i18n_format']['data']['id']);
Assert::assertSame('o:mautic:p:mautic', $body['data']['relationships']['project']['data']['id']);
return new Response(SymfonyResponse::HTTP_CREATED, [], file_get_contents(__DIR__.'/../Fixtures/Transifex/resources-create.json'));
}
);
// Starting the upload of content for the first resource
$handlerStack->append(
function (RequestInterface $request) {
$body = json_decode($request->getBody()->__toString(), true);
Assert::assertSame('POST', $request->getMethod());
Assert::assertSame('https://rest.api.transifex.com/resource_strings_async_uploads', $request->getUri()->__toString());
Assert::assertNotEmpty($body['data']['attributes']['content']);
return new Response(SymfonyResponse::HTTP_ACCEPTED, [], file_get_contents(__DIR__.'/../Fixtures/Transifex/resources-upload.json'));
}
);
// Starting the upload of content for the second resource
$handlerStack->append(
function (RequestInterface $request) {
$body = json_decode($request->getBody()->__toString(), true);
Assert::assertSame('POST', $request->getMethod());
Assert::assertSame('https://rest.api.transifex.com/resource_strings_async_uploads', $request->getUri()->__toString());
Assert::assertNotEmpty($body['data']['attributes']['content']);
return new Response(SymfonyResponse::HTTP_ACCEPTED, [], file_get_contents(__DIR__.'/../Fixtures/Transifex/resources-upload.json'));
}
);
// The first resource uploaded successfully
$handlerStack->append(
function (RequestInterface $request) {
Assert::assertSame('GET', $request->getMethod());
Assert::assertSame('https://rest.api.transifex.com//resource_strings_async_uploads/4abfc726-6a27-4c33-9d99-e5254c8df748', $request->getUri()->__toString());
return new Response(SymfonyResponse::HTTP_ACCEPTED, [], '');
}
);
// The second resource uploaded successfully
$handlerStack->append(
function (RequestInterface $request) {
Assert::assertSame('GET', $request->getMethod());
Assert::assertSame('https://rest.api.transifex.com//resource_strings_async_uploads/4abfc726-6a27-4c33-9d99-e5254c8df748', $request->getUri()->__toString());
return new Response(SymfonyResponse::HTTP_ACCEPTED, [], '');
}
);
$commandTester = $this->testSymfonyCommand(PushTransifexCommand::NAME, ['--bundle' => 'WebhookBundle']);
$dir = realpath(__DIR__.'/../../..');
$expectedOutput = <<<EOT
Processing Resource 'WebhookBundle flashes'
Resource created successfully
Processing Resource 'WebhookBundle messages'
Resource for {$dir}/WebhookBundle/Translations/en_US/flashes.ini updated successfully
Resource for {$dir}/WebhookBundle/Translations/en_US/messages.ini updated successfully
EOT;
Assert::assertSame(0, $commandTester->getStatusCode(), $commandTester->getDisplay());
Assert::assertSame($expectedOutput, $commandTester->getDisplay());
}
}
|