54 lines
2.1 KiB
PHP
54 lines
2.1 KiB
PHP
<?php
|
|
|
|
namespace Tests\Feature;
|
|
|
|
use Illuminate\Support\Facades\Http;
|
|
use Illuminate\Http\Client\Request as ClientRequest;
|
|
use Tests\TestCase;
|
|
|
|
class TranslationApiTest extends TestCase
|
|
{
|
|
public function test_it_lists_languages_from_the_configured_engine(): void
|
|
{
|
|
config(['services.translation.url' => 'http://translator.test']);
|
|
Http::fake(['translator.test/languages' => Http::response([['code' => 'pt', 'name' => 'Portuguese', 'targets' => ['en']]])]);
|
|
|
|
$this->getJson('/api/translate/languages')->assertOk()->assertJsonPath('0.targets.0', 'en');
|
|
}
|
|
|
|
public function test_it_translates_and_reports_engine_failures(): void
|
|
{
|
|
config(['services.translation.url' => 'http://translator.test']);
|
|
Http::fake(['translator.test/translate' => Http::sequence()->push(['translatedText' => 'Hello'])->push([], 500)]);
|
|
$input = ['text' => 'Olá', 'source_lang' => 'pt', 'target_lang' => 'en'];
|
|
|
|
$this->postJson('/api/translate', $input)->assertOk()->assertJsonPath('translated_text', 'Hello');
|
|
$this->postJson('/api/translate', $input)->assertStatus(503);
|
|
}
|
|
|
|
public function test_it_translates_text_batches_for_full_page_translation(): void
|
|
{
|
|
config(['services.translation.url' => 'http://translator.test']);
|
|
Http::fake(['translator.test/translate' => Http::response(['translatedText' => ['Home', 'About us']])]);
|
|
|
|
$this->postJson('/api/translate', [
|
|
'text' => ['Início', 'Sobre nós'],
|
|
'source_lang' => 'auto',
|
|
'target_lang' => 'en',
|
|
])->assertOk()
|
|
->assertJsonPath('translated_text.0', 'Home')
|
|
->assertJsonPath('translated_text.1', 'About us');
|
|
|
|
Http::assertSent(fn (ClientRequest $request) => $request['q'] === ['Início', 'Sobre nós']);
|
|
}
|
|
|
|
public function test_it_rejects_translation_batches_that_exceed_the_request_limit(): void
|
|
{
|
|
$this->postJson('/api/translate', [
|
|
'text' => array_fill(0, 9, 'Texto'),
|
|
'source_lang' => 'auto',
|
|
'target_lang' => 'en',
|
|
])->assertUnprocessable();
|
|
}
|
|
}
|