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(); $dump = function (string $label, mixed $body): void { fwrite( STDERR, sprintf("\n===%s %d===\n%s\n", $label, $this->responseCode(), json_encode($body, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)), ); }; $dump('SCHEMA', $this->authJson('GET', '/api/v1/policy-schema', $user)); $created = $this->authJson('POST', '/api/v1/policy', $user, [ 'category' => 'timing', 'name' => 'حداقل یک ساعت برای لیزر', 'priority' => 10, 'condition' => ['match' => 'all', 'conditions' => [ ['field' => 'item_count', 'operator' => 'greater_than', 'value' => 1], ]], 'effects' => [['type' => 'min_duration_minutes', 'value' => 60]], ]); $dump('CREATE', $created); $uuid = $created['data']['uuid']; $dump('ACTIVATE', $this->authJson('POST', "/api/v1/policy/$uuid/activate", $user)); $dump('VERSION', $this->authJson('POST', "/api/v1/policy/$uuid/version", $user, [ 'effects' => [['type' => 'min_duration_minutes', 'value' => 90]], ])); $dump('SHOW', $this->authJson('GET', "/api/v1/policy/$uuid", $user)); $dump('INDEX', $this->authJson('GET', '/api/v1/policies?category=timing', $user)); $dump('BAD_FIELD', $this->authJson('POST', '/api/v1/policy', $user, [ 'category' => 'timing', 'name' => 'قانون نامعتبر', 'condition' => ['match' => 'all', 'conditions' => [ ['field' => 'subtotal_rials', 'operator' => 'greater_than', 'value' => 10], ]], 'effects' => [['type' => 'min_duration_minutes', 'value' => 30]], ])); $dump('BAD_EFFECT', $this->authJson('POST', '/api/v1/policy', $user, [ 'category' => 'timing', 'name' => 'اثر نامعتبر', 'effects' => [['type' => 'discount_percent', 'value' => 10]], ])); $dump('DEACTIVATE', $this->authJson('POST', "/api/v1/policy/$uuid/deactivate", $user)); self::assertTrue(true); } }