Root cause of "دکتر دکتر …" (and ellipsis-truncated "…نی") in admin: IRIMC
names already contain the «دکتر» title, while the panel renders «دکتر {name}».
Convention is to store the bare name.
- DoctorImportService: normalize name via PersianText::stripDoctorTitle
(also fixes ي/ی, ك/ک, half-space)
- PersianText::stripDoctorTitle now strips consecutive «دکتر دکتر …» prefixes
- app:doctors:fix-irimc-names: one-off backfill for existing source='irimc'
rows (dry-run supported) — fixed 340 rows
- app:doctors:purge: FK-safe full wipe of doctors + all dependent tables +
orphan surrogate users, for a clean test DB (dry-run default, --force to
apply, prod-guarded)
- tests: PersianTextTest cases for the title stripping; DoctorImportTest
asserts stored name has no «دکتر» prefix
- docs/api/doctor-import.md: name convention + the two new commands
Verified: import "دکتر صفورا حجازی نیا" → stored "صفورا حجازی نیا" → panel
shows single «دکتر صفورا حجازی نیا».
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
42 lines
1.7 KiB
PHP
42 lines
1.7 KiB
PHP
<?php
|
||
|
||
namespace App\Tests\Shared;
|
||
|
||
use App\Shared\Util\PersianText;
|
||
use PHPUnit\Framework\TestCase;
|
||
|
||
class PersianTextTest extends TestCase
|
||
{
|
||
public function testArabicYehAndKafAreUnified(): void
|
||
{
|
||
$this->assertTrue(PersianText::sameName("علي اكبري", 'علی اکبری'));
|
||
}
|
||
|
||
public function testHalfSpaceAndExtraWhitespace(): void
|
||
{
|
||
$this->assertTrue(PersianText::sameName("محمد\u{200C}رضا کریمی ", 'محمد رضا کریمی'));
|
||
}
|
||
|
||
public function testPersianAndArabicDigits(): void
|
||
{
|
||
$this->assertSame('1371/1/1', PersianText::normalize('۱۳۷۱/۱/۱'));
|
||
$this->assertSame('0912', PersianText::normalize('٠٩١٢'));
|
||
}
|
||
|
||
public function testStripDoctorTitle(): void
|
||
{
|
||
$this->assertSame('فرخنده حسینی', PersianText::stripDoctorTitle('دکتر فرخنده حسینی'));
|
||
$this->assertSame('فرخنده حسینی', PersianText::stripDoctorTitle(' دکتر فرخنده حسینی '));
|
||
$this->assertSame('فرخنده حسینی', PersianText::stripDoctorTitle('فرخنده حسینی'));
|
||
$this->assertSame('صفورا حجازی نیا', PersianText::stripDoctorTitle('دکتر صفورا حجازی نیا'));
|
||
// پیشوند متوالی و کافِ عربی
|
||
$this->assertSame('صفورا حجازی نیا', PersianText::stripDoctorTitle('دکتر دکتر صفورا حجازی نیا'));
|
||
$this->assertSame('علی اکبری', PersianText::stripDoctorTitle('دكتر علي اكبري'));
|
||
}
|
||
|
||
public function testDifferentNamesStayDifferent(): void
|
||
{
|
||
$this->assertFalse(PersianText::sameName('علی اکبری', 'ولی اکبری'));
|
||
}
|
||
}
|