public function testHandlingReservationCreationDelegatesToServicesForValidationAndPersistenceAndNotification() { $builder = new ExistingReservationSeriesBuilder(); $series = $builder->Build(); $instance = new Reservation($series, NullDateRange::Instance()); $series->WithCurrentInstance($instance); $this->handler->expects($this->once())->method('Handle')->with($this->equalTo($series), $this->equalTo($this->page))->will($this->returnValue(true)); $this->presenter->HandleReservation($series); }
public function testLoadAndApprovesReservationSendingNotifications() { $referenceNumber = 'rn'; $builder = new ExistingReservationSeriesBuilder(); $reservation = $builder->Build(); $this->page->expects($this->once())->method('GetReferenceNumber')->will($this->returnValue($referenceNumber)); $this->persistence->expects($this->once())->method('LoadByReferenceNumber')->with($this->equalTo($referenceNumber))->will($this->returnValue($reservation)); $this->handler->expects($this->once())->method('Handle')->with($this->equalTo($reservation), $this->equalTo($this->page))->will($this->returnValue(true)); $this->auth->expects($this->once())->method('CanApprove')->with($this->equalTo(new ReservationViewAdapter($reservation)), $this->equalTo($this->fakeUser))->will($this->returnValue(true)); $this->presenter->PageLoad(); $this->assertTrue(in_array(new SeriesApprovedEvent($reservation), $reservation->GetEvents())); }
public function testDeletesReservation() { $id = 123; $reservationView = new TestReservationItemView($id, Date::Now(), Date::Now()); $repo = $this->getMock('IReservationRepository'); $handler = new ReservationConflictDelete($repo); $builder = new ExistingReservationSeriesBuilder(); $builder->WithId($id); $reservation = $builder->Build(); $repo->expects($this->once())->method('LoadById')->with($this->equalTo($id))->will($this->returnValue($reservation)); $repo->expects($this->once())->method('Delete')->with($this->equalTo($reservation)); $handled = $handler->Handle($reservationView); $this->assertTrue($handled); $this->assertEquals(SeriesUpdateScope::ThisInstance, $reservation->SeriesUpdateScope()); }
public function testPreventsPersistenceAndNotificationAndShowsFailedMessageWhenValidationFails() { $persistenceService = $this->getMock('IReservationPersistenceService'); $validationService = $this->getMock('IReservationValidationService'); $notificationService = $this->getMock('IReservationNotificationService'); $page = $this->getMock('IReservationSaveResultsView'); $errorMessage1 = 'e1'; $errorMessage2 = 'e2'; $errors = array($errorMessage1, $errorMessage2); $builder = new ExistingReservationSeriesBuilder(); $series = $builder->Build(); $validationResult = new ReservationValidationResult(false, $errors); $validationService->expects($this->once())->method('Validate')->with($this->equalTo($series))->will($this->returnValue($validationResult)); $persistenceService->expects($this->never())->method('Persist'); $notificationService->expects($this->never())->method('Notify'); $page->expects($this->once())->method('SetSaveSuccessfulMessage')->with($this->equalTo(false)); $page->expects($this->once())->method('SetErrors')->with($this->equalTo($errors)); $handler = new ReservationHandler($persistenceService, $validationService, $notificationService); $handler->Handle($series, $page); }
public function testHandlingReservationCreationDelegatesToServicesForValidationAndPersistenceAndNotification() { $builder = new ExistingReservationSeriesBuilder(); $series = $builder->Build(); $series->SetStatusId(ReservationStatus::Pending); $instance = new Reservation($series, NullDateRange::Instance()); $series->WithCurrentInstance($instance); $this->handler->expects($this->once())->method('Handle')->with($this->equalTo($series), $this->isInstanceOf('FakeReservationUpdatePage'))->will($this->returnValue(true)); $this->presenter->HandleReservation($series); $this->assertEquals($instance->ReferenceNumber(), $this->page->referenceNumber); $this->assertEquals($series->RequiresApproval(), $this->page->requiresApproval); }
Booked Scheduler is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Booked Scheduler. If not, see <http://www.gnu.org/licenses/>. */ define('ROOT_DIR', dirname(__FILE__) . '/../'); require_once ROOT_DIR . "lib/Email/namespace.php"; require_once ROOT_DIR . "lib/Email/Messages/ReservationCreatedEmail.php"; require_once ROOT_DIR . "lib/Email/Messages/ReservationUpdatedEmail.php"; require_once ROOT_DIR . "Domain/namespace.php"; require_once ROOT_DIR . "tests/fakes/namespace.php"; $start = Date::Parse('2010-10-05 03:30:00', 'UTC'); $end = Date::Parse('2010-10-06 13:30:00', 'UTC'); $resourceRepo = new ResourceRepository(); $resources = $resourceRepo->GetResourceList(); $builder = new ExistingReservationSeriesBuilder(); $builder->WithPrimaryResource($resources[1]); $reservation = $builder->Build(); //$reservation->WithCurrentInstance(new TestReservation("ref", new TestDateRange())); //$reservation->Update(1, new FakeBookableResource(1, 'name'), 'crazy title', 'super description', new FakeUserSession()); //$reservation->UpdateDuration(new DateRange($start, $end)); $reservation->Repeats(new RepeatDayOfMonth(1, $end->AddDays(100), new DateRange($start, $end))); $user = new FakeUser(); //$user->SetLanguage('en_gb'); $email = new ReservationUpdatedEmail($user, $reservation, 'en_us', new AttributeRepository()); echo $email->Body(); //$emailService = new EmailService(); //$emailService->Send($email);
public function testEventsWhichAreNotNecessaryWhenSeriesIsBranchedAreIgnored() { $oldOwnerId = 100; $newUserId = 200; $resource = new FakeBookableResource(92); $accessory = new ReservationAccessory(9292, 4); $builder = new ExistingReservationSeriesBuilder(); $series = $builder->Build(); $instance = new Reservation($series, new TestDateRange(), 123123); $series->WithCurrentInstance($instance); $series->WithOwner($oldOwnerId); $series->ApplyChangesTo(SeriesUpdateScope::ThisInstance); $series->Update($newUserId, $series->Resource(), '', '', $this->fakeUser); $series->ChangeResources(array($resource)); $series->ChangeAccessories(array($accessory)); $this->repository->Update($series); $addResources = $this->db->GetCommandsOfType('AddReservationResourceCommand'); $addAccessories = $this->db->GetCommandsOfType('AddReservationAccessoryCommand'); $deleteResources = $this->db->GetCommandsOfType('RemoveReservationResourceCommand'); $deleteAccessories = $this->db->GetCommandsOfType('RemoveReservationAccessoryCommand'); $this->assertTrue($this->db->ContainsCommand(new AddReservationUserCommand($instance->ReservationId(), $newUserId, ReservationUserLevel::OWNER))); $this->assertEquals(count($series->AdditionalResources()) + 1, count($addResources), "dont want to double add"); $this->assertEquals(count($series->Accessories()), count($addAccessories)); $this->assertEquals(0, count($deleteResources)); $this->assertEquals(0, count($deleteAccessories)); }
public function testWhenReservationStartConstraintIsViolated() { $this->fakeConfig->SetSectionKey(ConfigSection::RESERVATION, ConfigKeys::RESERVATION_START_TIME_CONSTRAINT, ReservationStartTimeConstraint::FUTURE); $referenceNumber = 'abc'; $currentUserId = 1029; $builder = new ExistingReservationSeriesBuilder(); $instance = new TestReservation($referenceNumber, new DateRange(Date::Now()->AddMinutes(-1), Date::Now()->AddMinutes(30)), null); $builder->WithCurrentInstance($instance); $series = $builder->Build(); $this->page->expects($this->once())->method('GetResponseType')->will($this->returnValue('json')); $this->page->expects($this->once())->method('GetInvitationAction')->will($this->returnValue(InvitationAction::Join)); $this->page->expects($this->once())->method('GetInvitationReferenceNumber')->will($this->returnValue($referenceNumber)); $this->page->expects($this->once())->method('GetUserId')->will($this->returnValue($currentUserId)); $this->reservationRepo->expects($this->once())->method('LoadByReferenceNumber')->with($this->equalTo($referenceNumber))->will($this->returnValue($series)); $this->page->expects($this->once())->method('DisplayResult')->with($this->stringContains('ParticipationNotAllowed')); $this->presenter->PageLoad(); }
public function testShowsErrorFileDoesNotBelongToReservation() { $fileId = 110; $resourceId = 1909; $referenceNumber = 'rn'; $seriesId = 1; $fileSeriesId = 2; $builder = new ExistingReservationSeriesBuilder(); $builder->WithId($seriesId); $builder->WithPrimaryResource(new FakeBookableResource($resourceId)); $reservationSeries = $builder->Build(); $reservationAttachment = new FakeReservationAttachment($fileId); $reservationAttachment->SetSeriesId($fileSeriesId); $this->page->expects($this->once())->method('GetFileId')->will($this->returnValue($fileId)); $this->page->expects($this->once())->method('GetReferenceNumber')->will($this->returnValue($referenceNumber)); $this->reservationRepository->expects($this->once())->method('LoadReservationAttachment')->with($this->equalTo($fileId))->will($this->returnValue($reservationAttachment)); $this->reservationRepository->expects($this->once())->method('LoadByReferenceNumber')->with($this->equalTo($referenceNumber))->will($this->returnValue($reservationSeries)); $this->page->expects($this->once())->method('ShowError'); $this->presenter->PageLoad($this->fakeUser); }
public function testDeletesWholeSeriesWhenAdminRegardlessOfDate() { $r1 = new TestReservation(); $r1->SetReservationDate(TestDateRange::CreateWithDays(-1)); $r2 = new TestReservation(); $r2->SetReservationDate(TestDateRange::CreateWithDays(-2)); $builder = new ExistingReservationSeriesBuilder(); $builder->WithCurrentInstance($r1); $builder->WithInstance($r2); $series = $builder->Build(); $series->ApplyChangesTo(SeriesUpdateScope::FullSeries); $series->Delete($this->admin); $events = $series->GetEvents(); $this->assertEquals(1, count($events)); $this->assertTrue(in_array(new SeriesDeletedEvent($series), $events)); }
public function testRemovesReminders() { $start = new ReservationReminder(1, ReservationReminderInterval::Minutes); $end = new ReservationReminder(1, ReservationReminderInterval::Days); $builder = new ExistingReservationSeriesBuilder(); $series = $builder->Build(); $series->WithStartReminder($start); $series->WithEndReminder($end); $series->RemoveStartReminder(); $series->RemoveEndReminder(); $events = $series->GetEvents(); $this->assertTrue(in_array(new ReminderRemovedEvent($series, ReservationReminderType::Start), $events)); $this->assertTrue(in_array(new ReminderRemovedEvent($series, ReservationReminderType::End), $events)); }