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 testRemovesReminders() { $seriesId = 99; $builder = new ExistingReservationSeriesBuilder(); $series = $builder->WithId($seriesId)->Build(); $series->WithStartReminder(new ReservationReminder(100, ReservationReminderInterval::Days)); $series->WithEndReminder(new ReservationReminder(15, ReservationReminderInterval::Minutes)); $series->RemoveStartReminder(); $series->RemoveEndReminder(); $this->repository->Update($series); $command1 = new RemoveReservationReminderCommand($seriesId, ReservationReminderType::Start); $command2 = new RemoveReservationReminderCommand($seriesId, ReservationReminderType::End); $this->assertTrue($this->db->ContainsCommand($command1)); $this->assertTrue($this->db->ContainsCommand($command2)); }
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 testWhenDeletingAnInstanceItDoesNotCount() { $ref1 = 'ref1'; $ref2 = 'ref2'; $ref3 = 'ref3'; $duration = new QuotaDurationDay(); $limit = new QuotaLimitCount(1); $quota = new Quota(1, $duration, $limit); $r1start = Date::Parse('2011-04-03 1:30', $this->tz); $r1End = Date::Parse('2011-04-03 2:30', $this->tz); $r2start = Date::Parse('2011-04-04 1:30', $this->tz); $r2End = Date::Parse('2011-04-04 2:30', $this->tz); $existing1 = new TestReservation($ref1, new DateRange($r1start, $r1End), 1); $deleted = new TestReservation($ref2, new DateRange($r2start, $r2End), 2); $new = new TestReservation($ref3, new DateRange($r2start, $r2End), 3); $builder = new ExistingReservationSeriesBuilder(); $builder->WithCurrentInstance($existing1)->WithInstance($deleted)->WithInstance($new); $series = $builder->BuildTestVersion(); $series->RemoveInstance($deleted); $res1 = new ReservationItemView($ref1, $r1start, $r1End, '', $series->ResourceId(), $existing1->ReservationId()); $res2 = new ReservationItemView($ref2, $r1start, $r1End, '', $series->ResourceId(), $deleted->ReservationId()); $res3 = new ReservationItemView($ref3, $r2start, $r2End, '', $series->ResourceId(), $new->ReservationId()); $reservations = array($res1, $res2, $res3); $this->SearchReturns($reservations); $exceeds = $quota->ExceedsQuota($series, $this->user, $this->schedule, $this->reservationViewRepository); $this->assertFalse($exceeds); }
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)); }