/** * Renueva el alquiler. * * @param Rental $rental * * @return Rental */ public function renewRental(Rental $rental) { if ($rental->getReturnAt()) { throw new FinishedRentalException(); } if ($rental->getUser()->getIsPenalized()) { throw new PenalizedUserException(); } if ($rental->getUser()->getFaculty()->getIsEnabled() === false) { throw new PenalizedFacultyException(); } if (!$rental->getIsRenewable()) { throw new NotRenewableRentalException(); } if ($rental->getIsExpired()) { throw new ExpiredRentalException(); } if ($rental->getDaysLeft() > $this->days_before_renovation) { throw new TooEarlyRenovationException(); } $left = $rental->getDaysLeft() + $this->days_length_rental; $rental->setEndAt(new \DateTime($left . ' days midnight')); $this->manager->persist($rental); $this->manager->flush(); $event = new RentalEvent($rental); $this->dispatcher->dispatch(RentalEvents::LOCKER_RENEWED, $event); return $rental; }
public function it_can_renew_a_rental(EntityManager $manager, EventDispatcherInterface $dispatcher, Rental $rental) { $newEnd = new \DateTime('9 days midnight'); $rental->setEndAt($newEnd)->shouldBeCalled(); $manager->persist($rental)->shouldBeCalled(); $manager->flush()->shouldBeCalled(); $event = new RentalEvent($rental->getWrappedObject()); $dispatcher->dispatch(RentalEvents::LOCKER_RENEWED, $event)->shouldBeCalled(); $this->renewRental($rental); }