Map Shahkar mismatch, token, unreachable, and duplicate cases to clear Persian messages instead of a generic wait-for-admin toast. Co-authored-by: Cursor <cursoragent@cursor.com>
72 lines
2.8 KiB
PHP
72 lines
2.8 KiB
PHP
<?php
|
|
|
|
namespace Tests\Unit;
|
|
|
|
use App\Services\JibitIdentityService;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
class JibitIdentityServiceTest extends TestCase
|
|
{
|
|
public function test_matched_true_is_ok(): void
|
|
{
|
|
$result = JibitIdentityService::interpretNationalMobileMatch(['matched' => true]);
|
|
|
|
$this->assertTrue($result['ok']);
|
|
$this->assertSame('jibit_matched', $result['code']);
|
|
}
|
|
|
|
public function test_matched_false_explains_shahkar_mismatch(): void
|
|
{
|
|
$result = JibitIdentityService::interpretNationalMobileMatch(['matched' => false]);
|
|
|
|
$this->assertFalse($result['ok']);
|
|
$this->assertSame('jibit_mismatch', $result['code']);
|
|
$this->assertStringContainsString('شاهکار', $result['message']);
|
|
$this->assertStringContainsString('سیمکارت', $result['message']);
|
|
}
|
|
|
|
public function test_forbidden_mentions_token(): void
|
|
{
|
|
$result = JibitIdentityService::interpretNationalMobileMatch([
|
|
'code' => 'forbidden',
|
|
'message' => 'no access',
|
|
]);
|
|
|
|
$this->assertFalse($result['ok']);
|
|
$this->assertSame('jibit_forbidden', $result['code']);
|
|
$this->assertStringContainsString('توکن', $result['message']);
|
|
}
|
|
|
|
public function test_unknown_payload_includes_jibit_code_and_message(): void
|
|
{
|
|
$result = JibitIdentityService::interpretNationalMobileMatch([
|
|
'code' => 'some.service.error',
|
|
'message' => 'provider down',
|
|
'http_status' => 503,
|
|
]);
|
|
|
|
$this->assertFalse($result['ok']);
|
|
$this->assertSame('jibit_some.service.error', $result['code']);
|
|
$this->assertStringContainsString('some.service.error', $result['message']);
|
|
$this->assertStringContainsString('provider down', $result['message']);
|
|
$this->assertStringContainsString('503', $result['message']);
|
|
}
|
|
|
|
public function test_empty_response_is_not_generic_wait_for_admin(): void
|
|
{
|
|
$result = JibitIdentityService::interpretNationalMobileMatch(null);
|
|
|
|
$this->assertFalse($result['ok']);
|
|
$this->assertSame('jibit_no_response', $result['code']);
|
|
$this->assertStringNotContainsString('منتظر بررسی', $result['message']);
|
|
}
|
|
|
|
public function test_national_code_checksum(): void
|
|
{
|
|
$this->assertNull(JibitIdentityService::nationalCodeError('0452262615'));
|
|
$this->assertSame('کد ملی وارد نشده است.', JibitIdentityService::nationalCodeError(''));
|
|
$this->assertSame('کد ملی باید ۱۰ رقم باشد.', JibitIdentityService::nationalCodeError('123'));
|
|
$this->assertSame('کد ملی از نظر رقم کنترل نامعتبر است.', JibitIdentityService::nationalCodeError('0000000000'));
|
|
}
|
|
}
|