public function let(EntityManager $manager, EventDispatcherInterface $dispatcher, TimePenaltyService $penaltyService, Locker $locker, Rental $rental) { $this->beConstructedWith($manager, $dispatcher, $penaltyService); $rental->getIsRenewable()->willReturn(true); $rental->getLocker()->willReturn($locker); $rental->getReturnAt()->willReturn(null); }
/** * 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; }
private function canRent(Rental $rental, User $user) { if ($rental->getUser() != $user) { return false; } if ($rental->getReturnAt()) { return false; } if ($user->getIsPenalized()) { return false; } if ($user->getFaculty()->getIsEnabled() === false) { return false; } if (!$rental->getIsRenewable()) { return false; } if ($rental->getIsExpired()) { return false; } if ($rental->getDaysLeft() > $this->days_before_renovation) { return false; } return true; }
public function let(ContainerInterface $container, Config $config, Locker $locker, Rental $rental, RentalRepository $rentalRepository, TimePenaltyRepository $timePenaltyRepository, User $user) { $container->get('craue_config')->willReturn($config); $container->get('seta.repository.time_penalty')->willReturn($timePenaltyRepository); $container->get('seta.repository.rental')->willReturn($rentalRepository); $rental->getUser()->willReturn($user); $rental->getLocker()->willReturn($locker); $rental->getIsRenewable()->willReturn(true); $locker->getCode()->willReturn('100'); $user->getEmail()->willReturn('*****@*****.**'); $user->getUsername()->willReturn('*****@*****.**'); }
public function it_cannot_renew_blocked_rentals(Rental $rental) { $rental->getIsRenewable()->shouldBeCalled()->willReturn(false); $this->shouldThrow(NotRenewableRentalException::class)->duringRenewRental($rental); }