createUser(['ROLE_USER', 'ROLE_CLINIC']); $clinic = new Clinic($user); $clinic->setName('کلینیک بی‌قانون'); $this->em->persist($clinic); $this->em->flush(); $section = new ServiceSection('clinic', $clinic->getId(), 'زیبایی'); $this->em->persist($section); $address = DoctorAddress::forClinic($clinic->getId()); $address->setName('شعبهٔ مرکزی'); $this->em->persist($address); $this->em->flush(); $service = new ServiceItem($section, 'لیزر'); $service->setSoloDurationMinutes(20); $service->setPriceRials(1_000_000); $this->em->persist($service); $this->em->flush(); $plan = $this->authJson('POST', '/api/v1/appointment-plan/preview', $user, [ 'service_uuid' => $service->getUuid(), 'branch_uuid' => $address->getUuid(), ]); self::assertSame(200, $this->responseCode(), json_encode($plan, JSON_UNESCAPED_UNICODE)); self::assertSame(20, $plan['data']['total_minutes']); self::assertSame([0], array_column($plan['data']['segments'], 'offset_minutes')); $quote = $this->authJson('POST', '/api/v1/pricing/quote', $user, [ 'service_uuid' => $service->getUuid(), 'branch_uuid' => $address->getUuid(), ]); self::assertSame(1_000_000, $quote['data']['base_rials']); self::assertSame(0, $quote['data']['discount_rials']); self::assertSame(1_000_000, $quote['data']['final_rials']); // نبودِ کلید مهم‌تر از صفر بودن مقدار است: کلیدِ خالی هم یعنی موتور چیزی // اعمال کرده که نباید می‌کرد. self::assertArrayNotHasKey('applied_policies', $quote['data']['breakdown']['sources']); $selection = $this->authJson('POST', '/api/v1/service-selection/validate', $user, [ 'item_uuids' => [$service->getUuid()], 'branch_uuid' => $address->getUuid(), ]); self::assertTrue($selection['data']['valid']); self::assertSame([], $selection['data']['errors']); } }