Preserva base local aceite de identidade e acessos
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Unit;
|
||||
|
||||
use App\Modules\Identity\Services\ProtectedProvisioningInput;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use RuntimeException;
|
||||
|
||||
final class ProtectedProvisioningInputTest extends TestCase
|
||||
{
|
||||
private function stream(string $payload)
|
||||
{
|
||||
$stream = fopen('php://memory', 'r+');
|
||||
fwrite($stream, $payload); rewind($stream);
|
||||
return $stream;
|
||||
}
|
||||
|
||||
public function test_protected_input_preserves_unicode_and_spaces_without_echoing(): void
|
||||
{
|
||||
$secret = ' '.bin2hex(random_bytes(12)).'çã! ';
|
||||
$stream = $this->stream(json_encode(['confirmed' => true, 'email' => 'synthetic@example.test', 'password' => $secret, 'confirmation' => $secret]));
|
||||
try { $values = ProtectedProvisioningInput::read($stream, 'synthetic@example.test'); }
|
||||
finally { fclose($stream); }
|
||||
$this->assertTrue($values[0] === $secret && $values[1] === $secret);
|
||||
}
|
||||
|
||||
public function test_unconfirmed_or_wrong_recipient_is_refused_without_revealing_payload(): void
|
||||
{
|
||||
$secret = bin2hex(random_bytes(12));
|
||||
foreach ([['confirmed' => false, 'email' => 'synthetic@example.test'], ['confirmed' => true, 'email' => 'another@example.test']] as $case) {
|
||||
$stream = $this->stream(json_encode($case + ['password' => $secret, 'confirmation' => $secret]));
|
||||
try { ProtectedProvisioningInput::read($stream, 'synthetic@example.test'); $this->fail('Unconfirmed input accepted.'); }
|
||||
catch (RuntimeException $exception) { $this->assertStringNotContainsString($secret, $exception->getMessage()); }
|
||||
finally { fclose($stream); }
|
||||
}
|
||||
}
|
||||
|
||||
public function test_malformed_payload_is_refused_without_including_its_contents(): void
|
||||
{
|
||||
$stream = $this->stream('{private-invalid-payload');
|
||||
try {
|
||||
$this->expectException(RuntimeException::class);
|
||||
$this->expectExceptionMessage('Entrada protegida inválida ou não confirmada. Nada alterado.');
|
||||
ProtectedProvisioningInput::read($stream, 'synthetic@example.test');
|
||||
} finally { fclose($stream); }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user