public function testLoadByIdFullyHydratesReservationSeriesObject() { $seriesId = 10; $reservationId = 1; $referenceNumber = 'currentInstanceRefNum'; $ownerId = 10; $resourceId = 100; $scheduleId = 1000; $title = 'title'; $description = 'description'; $resourceId1 = 99; $resourceId2 = 999; $begin = '2010-01-05 12:30:00'; $end = '2010-01-05 18:30:00'; $duration = DateRange::Create($begin, $end, 'UTC'); $interval = 3; $repeatType = RepeatType::Daily; $terminationDateString = '2010-01-20 12:30:00'; $terminationDate = Date::FromDatabase($terminationDateString); $repeatOptions = new RepeatDaily($interval, $terminationDate); $instance1Invitees = array(1, 2, 3); $instance1Participants = array(4, 5); $instance2Invitees = array(6); $instance2Participants = array(7, 8, 9); $resourceName = 'primary resource'; $location = 'l'; $contact = 'c'; $notes = 'notes'; $minLength = '3:00'; $maxLength = null; $autoAssign = true; $requiresApproval = false; $allowMultiDay = true; $maxParticipants = 100; $minNotice = '2:10'; $maxNotice = null; $statusId = ReservationStatus::Pending; $accessoryId1 = 8111; $accessoryId2 = 8222; $quantity1 = 11; $quantity2 = 22; $attributeId1 = 908; $attributeValue1 = 'custom1'; $attributeId2 = 999; $attributeValue2 = 'custom2'; $fileId = 100; $startReminderMinutes = 25; $endReminderMinutes = 120; $allowParticipation = true; $expected = new ExistingReservationSeries(); $expected->WithId($seriesId); $expected->WithOwner($ownerId); $expected->WithPrimaryResource(new BookableResource($resourceId, $resourceName, $location, $contact, $notes, $minLength, $maxLength, $autoAssign, $requiresApproval, $allowMultiDay, $maxParticipants, $minNotice, $maxNotice, null, $scheduleId)); $expected->WithTitle($title); $expected->WithDescription($description); $expected->WithResource(new BookableResource($resourceId1, $resourceName, $location, $contact, $notes, $minLength, $maxLength, $autoAssign, $requiresApproval, $allowMultiDay, $maxParticipants, $minNotice, $maxNotice, null, $scheduleId)); $expected->WithResource(new BookableResource($resourceId2, $resourceName, $location, $contact, $notes, $minLength, $maxLength, $autoAssign, $requiresApproval, $allowMultiDay, $maxParticipants, $minNotice, $maxNotice, null, $scheduleId)); $expected->WithRepeatOptions($repeatOptions); $expected->WithStatus($statusId); $expected->WithAccessory(new ReservationAccessory($accessoryId1, $quantity1)); $expected->WithAccessory(new ReservationAccessory($accessoryId2, $quantity2)); $expected->WithAttribute(new AttributeValue($attributeId1, $attributeValue1)); $expected->WithAttribute(new AttributeValue($attributeId2, $attributeValue2)); $expected->WithAttachment($fileId, 'doc'); $expected->AllowParticipation($allowParticipation); $instance1 = new Reservation($expected, $duration->AddDays(10)); $instance1->SetReferenceNumber('instance1'); $instance1->SetReservationId(909); $instance1->WithInvitees($instance1Invitees); $instance1->WithParticipants($instance1Participants); $instance2 = new Reservation($expected, $duration->AddDays(20)); $instance2->SetReferenceNumber('instance2'); $instance2->SetReservationId(1909); $instance2->WithInvitees($instance2Invitees); $instance2->WithParticipants($instance2Participants); $expected->WithInstance($instance1); $expected->WithInstance($instance2); $expectedInstance = new Reservation($expected, $duration); $expectedInstance->SetReferenceNumber($referenceNumber); $expectedInstance->SetReservationId($reservationId); $expected->WithCurrentInstance($expectedInstance); $expected->WithStartReminder(new ReservationReminder($startReminderMinutes, ReservationReminderInterval::Minutes)); $expected->WithEndReminder(new ReservationReminder($endReminderMinutes / 60, ReservationReminderInterval::Hours)); $reservationRow = new ReservationRow($reservationId, $begin, $end, $title, $description, $repeatType, $repeatOptions->ConfigurationString(), $referenceNumber, $seriesId, $ownerId, $statusId, $allowParticipation); $reservationInstanceRow = new ReservationInstanceRow($seriesId); $reservationInstanceRow->WithInstance($instance1->ReservationId(), $instance1->ReferenceNumber(), $instance1->Duration())->WithInstance($instance2->ReservationId(), $instance2->ReferenceNumber(), $instance2->Duration())->WithInstance($reservationId, $expectedInstance->ReferenceNumber(), $expectedInstance->Duration()); $reservationResourceRow = new ReservationResourceRow($reservationId, $resourceName, $location, $contact, $notes, $minLength, $maxLength, $autoAssign, $requiresApproval, $allowMultiDay, $maxParticipants, $minNotice, $maxNotice, $scheduleId); $reservationResourceRow->WithPrimary($resourceId)->WithAdditional($resourceId1)->WithAdditional($resourceId2); $reservationUserRow = new ReservationUserRow(); $reservationUserRow->WithParticipants($instance1, $instance1Participants)->WithParticipants($instance2, $instance2Participants)->WithInvitees($instance1, $instance1Invitees)->WithInvitees($instance2, $instance2Invitees); $reservationAccessoryRow = new ReservationAccessoryRow(); $reservationAccessoryRow->WithAccessory($accessoryId1, $quantity1)->WithAccessory($accessoryId2, $quantity2); $attributeValueRow = new CustomAttributeValueRow(); $attributeValueRow->With($attributeId1, $attributeValue1)->With($attributeId2, $attributeValue2); $attachmentRow = new ReservationAttachmentItemRow(); $attachmentRow->With($fileId, $seriesId, null, 'doc'); $reminderRow = new ReservationReminderRow(); $reminderRow->With(1, $seriesId, $startReminderMinutes, ReservationReminderType::Start)->With(2, $seriesId, $endReminderMinutes, ReservationReminderType::End); $this->db->SetRow(0, $reservationRow->Rows()); $this->db->SetRow(1, $reservationInstanceRow->Rows()); $this->db->SetRow(2, $reservationResourceRow->Rows()); $this->db->SetRow(3, $reservationUserRow->Rows()); $this->db->SetRow(4, $reservationAccessoryRow->Rows()); $this->db->SetRow(5, $attributeValueRow->Rows()); $this->db->SetRow(6, $attachmentRow->Rows()); $this->db->SetRow(7, $reminderRow->Rows()); $actualReservation = $this->repository->LoadById($reservationId); $this->assertEquals($expected, $actualReservation); $getReservation = new GetReservationByIdCommand($reservationId); $getInstances = new GetReservationSeriesInstances($seriesId); $getResources = new GetReservationResourcesCommand($seriesId); $getParticipants = new GetReservationSeriesParticipantsCommand($seriesId); $getAccessories = new GetReservationAccessoriesCommand($seriesId); $getAttributeValues = new GetAttributeValuesCommand($seriesId, CustomAttributeCategory::RESERVATION); $getAttachments = new GetReservationAttachmentsCommand($seriesId); $getReminders = new GetReservationReminders($seriesId); $this->assertTrue($this->db->ContainsCommand($getReservation)); $this->assertTrue($this->db->ContainsCommand($getInstances)); $this->assertTrue($this->db->ContainsCommand($getResources)); $this->assertTrue($this->db->ContainsCommand($getParticipants)); $this->assertTrue($this->db->ContainsCommand($getAccessories)); $this->assertTrue($this->db->ContainsCommand($getAttributeValues)); $this->assertTrue($this->db->ContainsCommand($getAttachments)); $this->assertTrue($this->db->ContainsCommand($getReminders)); }
public function testBuildsViewObjectFromDatabase() { $referenceNumber = "12345"; $reservationId = 187; $resourceId = 12; $scheduleId = 73; $startDate = new Date('2010-01-01 05:00', 'UTC'); $endDate = new Date('2010-01-01 12:00', 'UTC'); $dateCreated = new Date('2010-01-01', 'UTC'); $ownerId = 92; $title = 'ti'; $description = 'de'; $repeatType = RepeatType::Yearly; $repeatOptions = 'interval=5'; $seriesId = 1000; $ownerFirst = 'f'; $ownerLast = 'l'; $statusId = ReservationStatus::Pending; $resourceName = 'resource'; $resourceId1 = 88; $resourceName1 = 'r1'; $adminGroupId1 = 1239; $scheduleAdminGroupId = 992323; $resourceId2 = 99; $resourceName2 = 'r2'; $userId1 = 87; $fname1 = 'f1'; $lname1 = 'l1'; $email1 = 'e1'; $userId2 = 97; $fname2 = 'f2'; $lname2 = 'l2'; $email2 = 'e2'; $userId3 = 98; $fname3 = 'f3'; $lname3 = 'l3'; $email3 = 'e3'; $email = '*****@*****.**'; $allowParticipation = 1; $ownerLevel = ReservationUserLevel::OWNER; $participantLevel = ReservationUserLevel::PARTICIPANT; $inviteeLevel = ReservationUserLevel::INVITEE; $getReservationForEditingCommand = new GetReservationForEditingCommand($referenceNumber); $getReservationResources = new GetReservationResourcesCommand($seriesId); $getParticipants = new GetReservationParticipantsCommand($reservationId); $getAccessories = new GetReservationAccessoriesCommand($seriesId); $getAttributes = new GetAttributeValuesCommand($seriesId, CustomAttributeCategory::RESERVATION); $getAttachments = new GetReservationAttachmentsCommand($seriesId); $getReminders = new GetReservationReminders($seriesId); $reservationRow = array(ColumnNames::RESERVATION_INSTANCE_ID => $reservationId, ColumnNames::REFERENCE_NUMBER => $referenceNumber, ColumnNames::RESOURCE_ID => $resourceId, ColumnNames::SCHEDULE_ID => $scheduleId, ColumnNames::RESERVATION_START => $startDate->ToDatabase(), ColumnNames::RESERVATION_END => $endDate->ToDatabase(), ColumnNames::USER_ID => $ownerId, ColumnNames::RESERVATION_TITLE => $title, ColumnNames::RESERVATION_DESCRIPTION => $description, ColumnNames::REPEAT_TYPE => $repeatType, ColumnNames::REPEAT_OPTIONS => $repeatOptions, ColumnNames::SERIES_ID => $seriesId, ColumnNames::FIRST_NAME => $ownerFirst, ColumnNames::LAST_NAME => $ownerLast, ColumnNames::RESERVATION_STATUS => $statusId, ColumnNames::RESERVATION_CREATED => $dateCreated->ToDatabase(), ColumnNames::RESOURCE_NAME => $resourceName, ColumnNames::EMAIL => $email, ColumnNames::RESERVATION_MODIFIED => Date::Now()->ToDatabase(), ColumnNames::RESERVATION_ALLOW_PARTICIPATION => $allowParticipation); $resourceRows = array($this->GetResourceRow($reservationId, $resourceId1, $resourceName1, $adminGroupId1, $scheduleId, $scheduleAdminGroupId), $this->GetResourceRow($reservationId, $resourceId2, $resourceName2, null, $scheduleId, $scheduleAdminGroupId)); $participantRows = array($this->GetParticipantRow($reservationId, $userId1, $fname1, $lname1, $email1, $ownerLevel), $this->GetParticipantRow($reservationId, $userId2, $fname2, $lname2, $email2, $participantLevel), $this->GetParticipantRow($reservationId, $userId3, $fname3, $lname3, $email3, $inviteeLevel)); $accessory1 = 123; $accessory2 = 1232; $quantity1 = 123; $quantity2 = 1232; $accessoryName1 = 'a1'; $accessoryName2 = 'a2'; $accessoryQuantity1 = 111; $accessoryQuantity2 = 222; $attributeId1 = 9292; $attributeId2 = 884; $attributeValue1 = 'v1'; $attributeValue2 = 'v1'; $attributeLabel1 = 'al1'; $attributeLabel2 = 'al2'; $startReminderMinutes = 25; $endReminderMinutes = 120; $accessoryRows = new ReservationAccessoryRow(); $accessoryRows->WithAccessory($accessory1, $quantity1, $accessoryName1, $accessoryQuantity1)->WithAccessory($accessory2, $quantity2, $accessoryName2, $accessoryQuantity2); $attributeRows = new CustomAttributeValueRow(); $attributeRows->With($attributeId1, $attributeValue1, $attributeLabel1)->With($attributeId2, $attributeValue2, $attributeLabel2); $reminderRows = new ReservationReminderRow(); $reminderRows->With(1, $seriesId, $startReminderMinutes, ReservationReminderType::Start)->With(2, $seriesId, $endReminderMinutes, ReservationReminderType::End); $fileId1 = 1; $fileName1 = 'fn1'; $fileId2 = 2; $fileName2 = 'fn2'; $attachmentRows = new ReservationAttachmentItemRow(); $attachmentRows->With($fileId1, $seriesId, $fileName1)->With($fileId2, $seriesId, $fileName2); $this->db->SetRow(0, array($reservationRow)); $this->db->SetRow(1, $resourceRows); $this->db->SetRow(2, $participantRows); $this->db->SetRow(3, $accessoryRows->Rows()); $this->db->SetRow(4, $attributeRows->Rows()); $this->db->SetRow(5, $attachmentRows->Rows()); $this->db->SetRow(6, $reminderRows->Rows()); $reservationView = $this->repository->GetReservationForEditing($referenceNumber); $commands = $this->db->_Commands; $this->assertEquals(7, count($commands)); $this->assertEquals($getReservationForEditingCommand, $commands[0]); $this->assertEquals($getReservationResources, $commands[1]); $this->assertEquals($getParticipants, $commands[2]); $this->assertEquals($getAccessories, $commands[3]); $this->assertEquals($getAttributes, $commands[4]); $this->assertEquals($getAttachments, $commands[5]); $this->assertEquals($getReminders, $commands[6]); $expectedView = new ReservationView(); $expectedView->AdditionalResourceIds = array($resourceId1, $resourceId2); $expectedView->Description = $description; $expectedView->EndDate = $endDate; $expectedView->OwnerId = $ownerId; $expectedView->ReferenceNumber = $referenceNumber; $expectedView->ReservationId = $reservationId; $expectedView->ResourceId = $resourceId; $expectedView->ResourceName = $resourceName; $expectedView->DateCreated = $dateCreated; $expectedView->ScheduleId = $scheduleId; $expectedView->StartDate = $startDate; $expectedView->Title = $title; $expectedView->RepeatType = $repeatType; $expectedView->RepeatInterval = '5'; $expectedView->SeriesId = $seriesId; $expectedView->OwnerFirstName = $ownerFirst; $expectedView->OwnerLastName = $ownerLast; $expectedView->StatusId = $statusId; $expectedView->OwnerEmailAddress = $email; $expectedView->DateModified = Date::Now()->ToUtc(); $expectedView->Participants = array(new ReservationUserView($userId2, $fname2, $lname2, $email2, $participantLevel)); $expectedView->Invitees = array(new ReservationUserView($userId3, $fname3, $lname3, $email3, $inviteeLevel)); $expectedView->Resources = array(new ReservationResourceView($resourceId1, $resourceName1, $adminGroupId1, $scheduleId, $scheduleAdminGroupId, ResourceStatus::AVAILABLE), new ReservationResourceView($resourceId2, $resourceName2, null, $scheduleId, $scheduleAdminGroupId, ResourceStatus::AVAILABLE)); $expectedView->Accessories = array(new ReservationAccessoryView($accessory1, $quantity1, $accessoryName1, $accessoryQuantity1), new ReservationAccessoryView($accessory2, $quantity2, $accessoryName2, $accessoryQuantity2)); $expectedView->AddAttribute(new AttributeValue($attributeId1, $attributeValue1, $attributeLabel1)); $expectedView->AddAttribute(new AttributeValue($attributeId2, $attributeValue2, $attributeLabel2)); $expectedView->AddAttachment(new ReservationAttachmentView($fileId1, $seriesId, $fileName1)); $expectedView->AddAttachment(new ReservationAttachmentView($fileId2, $seriesId, $fileName2)); $expectedView->StartReminder = new ReservationReminderView($startReminderMinutes); $expectedView->EndReminder = new ReservationReminderView($endReminderMinutes); $expectedView->AllowParticipation = true; $this->assertEquals($expectedView, $reservationView); }
public function testGetsAccessories() { $ar = new ReservationAccessoryRow(); $ar->WithAccessory(1, 3, "name", 3)->WithAccessory(2, 23, "slkjdf", 3); $this->db->SetRows($ar->Rows()); $getAccessoriesCommand = new GetAllAccessoriesCommand(); /** @var $accessories AccessoryDto[] */ $accessories = $this->repository->GetAccessoryList(); $this->assertEquals($getAccessoriesCommand, $this->db->_LastCommand); $this->assertEquals(2, count($accessories)); $this->assertEquals(1, $accessories[0]->Id); $this->assertEquals("name", $accessories[0]->Name); $this->assertEquals(3, $accessories[0]->QuantityAvailable); }