Surface specific Jibit identity errors on profile update.
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>
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
<?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'));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user