/** * @param object $entity * @param bool $expected * * @dataProvider entityDataProvider */ public function testPostPersist($entity, $expected) { $event = new LifecycleEventArgs($entity, $this->entityManager); if ($expected) { $this->reminderManager->expects($this->once())->method('saveReminders')->with($entity); } $this->listener->postPersist($event); }
/** * Save reminders for new entities * * @param LifecycleEventArgs $event */ public function postPersist(LifecycleEventArgs $event) { $entity = $event->getEntity(); if (!$entity instanceof RemindableInterface) { return; } $this->reminderManager->saveReminders($entity); }
/** * Set form data * * @param FormEvent $event */ public function postSubmit(FormEvent $event) { $form = $event->getForm(); $entity = $form->getData(); if (!$form->isValid() || !$entity instanceof RemindableInterface || !$form->has('reminders')) { return; } $this->manager->saveReminders($entity); }
/** * @param int $calendarId * @param AbstractQuery $query * * @return array */ public function getTasks($calendarId, AbstractQuery $query) { $result = []; $items = $query->getArrayResult(); foreach ($items as $item) { /** @var \DateTime $start */ $start = $item['dueDate']; $end = clone $start; $end = $end->add(new \DateInterval('PT30M')); $result[] = ['calendar' => $calendarId, 'id' => $item['id'], 'title' => $item['subject'], 'description' => $item['description'], 'start' => $start->format('c'), 'end' => $end->format('c'), 'allDay' => false, 'createdAt' => $item['createdAt']->format('c'), 'updatedAt' => $item['updatedAt']->format('c'), 'editable' => false, 'removable' => false]; } $this->reminderManager->applyReminders($result, 'OroCRM\\Bundle\\TaskBundle\\Entity\\Task'); return $result; }
/** * Converts calendar events returned by the given query to form that can be used in API * * @param int $calendarId The target calendar id * @param AbstractQuery $query The query that should be used to get events * * @return array */ public function getCalendarEvents($calendarId, AbstractQuery $query) { $result = []; $rawData = $query->getArrayResult(); foreach ($rawData as $rawDataItem) { $result[] = $this->transformEntity($rawDataItem); } $this->applyAdditionalData($result, $calendarId); foreach ($result as &$resultItem) { $this->applyPermissions($resultItem, $calendarId); } $this->reminderManager->applyReminders($result, 'Oro\\Bundle\\CalendarBundle\\Entity\\CalendarEvent'); return $result; }
public function testInvalidEntityIdentifier() { $entity = $this->getMockBuilder('Oro\\Bundle\\ReminderBundle\\Entity\\RemindableInterface')->disableOriginalConstructor()->setMockClassName('Reminder_Mock')->getMock(); $metadata = $this->getMockBuilder('Doctrine\\ORM\\Mapping\\ClassMetadata')->disableOriginalConstructor()->getMock(); $this->entityManager->expects($this->once())->method('getClassMetadata')->with(get_class($entity))->will($this->returnValue($metadata)); $metadata->expects($this->once())->method('getIdentifierValues')->with($entity)->will($this->returnValue(array('foo' => 100, 'bar' => 200))); $this->manager->saveReminders($entity); }
/** * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function testApplyReminders() { $entityClassName = 'Oro\\Bundle\\ReminderBundle\\Tests\\Unit\\Fixtures\\RemindableEntity'; $items = [['id' => 1, 'subject' => 'item1'], ['id' => 2, 'subject' => 'item2'], ['id' => 3, 'subject' => 'item3']]; $query = $this->getMockBuilder('Doctrine\\ORM\\AbstractQuery')->disableOriginalConstructor()->setMethods(['getArrayResult'])->getMockForAbstractClass(); $qb = $this->getMockBuilder('Doctrine\\ORM\\QueryBuilder')->disableOriginalConstructor()->getMock(); $reminderRepo = $this->getReminderRepository(); $this->entityManager->expects($this->once())->method('getRepository')->with('OroReminderBundle:Reminder')->will($this->returnValue($reminderRepo)); $reminderRepo->expects($this->once())->method('findRemindersByEntitiesQueryBuilder')->with($entityClassName, [1, 2, 3])->will($this->returnValue($qb)); $qb->expects($this->once())->method('select')->with('reminder.relatedEntityId, reminder.method, reminder.intervalNumber, reminder.intervalUnit')->will($this->returnSelf()); $qb->expects($this->once())->method('getQuery')->will($this->returnValue($query)); $query->expects($this->once())->method('getArrayResult')->will($this->returnValue([['relatedEntityId' => 3, 'method' => 'email', 'intervalNumber' => 1, 'intervalUnit' => ReminderInterval::UNIT_HOUR], ['relatedEntityId' => 2, 'method' => 'email', 'intervalNumber' => 15, 'intervalUnit' => ReminderInterval::UNIT_MINUTE], ['relatedEntityId' => 2, 'method' => 'flash', 'intervalNumber' => 10, 'intervalUnit' => ReminderInterval::UNIT_MINUTE]])); $this->manager->applyReminders($items, $entityClassName); $this->assertEquals([['id' => 1, 'subject' => 'item1'], ['id' => 2, 'subject' => 'item2', 'reminders' => [['method' => 'email', 'interval' => ['number' => 15, 'unit' => ReminderInterval::UNIT_MINUTE]], ['method' => 'flash', 'interval' => ['number' => 10, 'unit' => ReminderInterval::UNIT_MINUTE]]]], ['id' => 3, 'subject' => 'item3', 'reminders' => [['method' => 'email', 'interval' => ['number' => 1, 'unit' => ReminderInterval::UNIT_HOUR]]]]], $items); }