registry = static::getContainer()->get(TreatmentWorkflowRegistry::class); } public function testBeautyResolvesToTheLaserWorkflow(): void { self::assertInstanceOf(LaserTreatmentWorkflow::class, $this->registry->for('beauty')); } /** حوزه‌ای که هنوز پیاده‌سازی ندارد باید رفتار پیش‌فرض بگیرد، نه خطا. */ public function testUnknownDomainFallsBackToTheDefaultWorkflow(): void { self::assertSame( DefaultTreatmentWorkflow::class, $this->registry->for('physiotherapy')::class, ); } /** نال یعنی «حوزه تنظیم نشده» و همان رفتار امروز، نه خطا. */ public function testNullDomainFallsBackToTheDefaultWorkflow(): void { self::assertSame(DefaultTreatmentWorkflow::class, $this->registry->for(null)::class); } public function testHasDedicatedWorkflowDistinguishesTheTwo(): void { self::assertTrue($this->registry->hasDedicatedWorkflow('beauty')); self::assertFalse($this->registry->hasDedicatedWorkflow('physiotherapy')); self::assertFalse($this->registry->hasDedicatedWorkflow(null)); } /** پنل ادمین باید ببیند کدام حوزه هنوز workflow ندارد. */ public function testListExposesHasWorkflow(): void { $suffix = bin2hex(random_bytes(4)); foreach ([['beauty_' . $suffix, false], ['beauty', true]] as [$code, $expected]) { if ($this->em->getRepository(PracticeDomain::class)->findOneBy(['code' => $code]) === null) { $this->em->persist(new PracticeDomain($code, 'حوزهٔ آزمون')); } } $this->em->flush(); $admin = $this->createUser(['ROLE_USER', 'ROLE_ADMIN']); $body = $this->authJson('GET', '/api/v1/practice-domains', $admin); $byCode = array_column($body['data'], 'has_workflow', 'code'); self::assertTrue($byCode['beauty']); self::assertFalse($byCode['beauty_' . $suffix]); } }