Files
Investidor-V2/tests/Feature/TranslationApiTest.php
T

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();
}
}