/**
  * Adds a participant to booking form
  */
 private function addParticipantsToBooking($logins = array())
 {
     $number = count($logins);
     if ($number <= 0) {
         return;
     }
     for ($i = 0; $i < $number; $i++) {
         if ($i == 0) {
             $this->webDriver->findElement(WebDriverBy::id('participants'))->sendKeys($logins[0]);
         } else {
             $this->webDriver->findElement(WebDriverBy::id('participants~' . strval($i)))->sendKeys($logins[$i]);
         }
         $this->webDriver->findElement(webDriverBy::id('ilMultiAdd~participants~' . strval($i)))->click();
     }
 }
 public function testCalendarDeleteTest()
 {
     // delete the booking
     self::$helper->deleteBooking("CalendarTestBooking");
     // check calendar, no entry should be present
     self::$webDriver->findElement(WebDriverBy::linkText(self::$helper->getCurrentMonth() . ' ' . date('Y')))->click();
     $isNotPresent = self::$webDriver->findElements(webDriverBy::xpath("//a[contains(text(),'CalendarTestBooking')]")) === array();
     if ($isNotPresent == false) {
         $this->fail('Calendar entry still present');
     }
 }
 public function testAppointmentPrivileges()
 {
     #1 check without any privilege
     self::$helper->logout();
     self::$helper->login(self::$new_user_1_login, self::$new_user_1_pw);
     self::$helper->toRSS();
     try {
         $webDriver->findElement(webDriverBy::linkText('Termine'));
         $this->fail("#1 Appointments are displayed even if there's no privilege");
     } catch (Exception $ex) {
         //Nothing to do here - the Element musn't be found!
     }
     #2 check with the privilege to see appointments and administrate booking attributes
     self::$helper->logout();
     self::$helper->login(self::$login_root, self::$pass_root);
     self::$helper->toRSS();
     self::$webDriver->findElement(webDriverBy::linkText('Privilegien'))->click();
     $class_1_id = self::$helper->getPrivilegeClassIDByNamePartial(self::$classname_1);
     self::$helper->grantPrivilege('accessAppointments', $class_1_id);
     self::$helper->grantPrivilege('adminBookingAttributes', $class_1_id);
     self::$helper->logout();
     self::$helper->login(self::$new_user_1_login, self::$new_user_1_pw);
     self::$helper->toRSS();
     $this->assertEquals(true, self::$webDriver->findElement(webDriverBy::linkText('Termine'))->isDisplayed(), '#2 - 1 Appointments are not displayed even the privilege is granted');
     $this->assertEquals(true, self::$webDriver->findElement(webDriverBy::linkText('Termine'))->isDisplayed(), '#2 - 2 Attributes are not displayed even the privilege is granted');
     # Check if non_public bookings are not displayed
     self::$helper->logout();
     self::$helper->login(self::$login_root, self::$pass_root);
     self::$helper->toRSS();
     //Create a non-public booking
     self::$helper->createRoom(self::$standard_roomname, '1', '10');
     self::$helper->searchForRoomByName(self::$standard_roomname);
     self::$webDriver->findElement(WebDriverBy::linktext('Buchen'))->click();
     self::$helper->doABooking(self::$standard_subject, "1", "1", date("Y") + 1, "12", "00", "1", "1", date("Y") + 1, "13", "00", '');
     self::$helper->logout();
     self::$helper->login(self::$new_user_1_login, self::$new_user_1_pw);
     self::$helper->toRSS();
     $this->assertEquals(0, self::$helper->getNoOfResults(), "#3 A non-public booking is visible to an user without the privilege");
     #4 Check the privilege to see non-public bookings
     self::$helper->logout();
     self::$helper->login(self::$login_root, self::$pass_root);
     self::$helper->toRSS();
     self::$webDriver->findElement(webDriverBy::linkText('Privilegien'))->click();
     self::$helper->grantPrivilege('seeNonPublicBookingInformation', $class_1_id);
     self::$helper->logout();
     self::$helper->login(self::$new_user_1_login, self::$new_user_1_pw);
     self::$helper->toRSS();
     $this->assertEquals(1, self::$helper->getNoOfResults(), "#4 A non-public booking is not visible to an user with the privilege");
     #5 Check if the search is accessible
     self::$helper->logout();
     self::$helper->login(self::$login_root, self::$pass_root);
     self::$helper->toRSS();
     self::$webDriver->findElement(webDriverBy::linkText('Privilegien'))->click();
     self::$helper->grantPrivilege('accessSearch', $class_1_id);
     self::$helper->logout();
     self::$helper->login(self::$new_user_1_login, self::$new_user_1_pw);
     self::$helper->toRSS();
     $this->assertEquals(true, self::$webDriver->findElement(webDriverBy::linkText('Suche'))->isDisplayed(), '#5 Search is not displayed even the privilege is granted');
     #6 Check if the "add booking"-link is not showed, if the privilege isn't given
     try {
         $webDriver->findElement(webDriverBy::partialLinkText('Buchung hinzufügen'))->click();
         $this->fail('#6 Add Booking is acceptible without the privilege');
     } catch (Exception $ex) {
         //Nothing to do - the exception should come
     }
     #7 Check if the "add booking"-link is showed if the privilege is given
     self::$helper->logout();
     self::$helper->login(self::$login_root, self::$pass_root);
     self::$helper->toRSS();
     self::$webDriver->findElement(webDriverBy::linkText('Privilegien'))->click();
     self::$helper->grantPrivilege('addOwnBookings', $class_1_id);
     self::$helper->logout();
     self::$helper->login(self::$new_user_1_login, self::$new_user_1_pw);
     self::$helper->toRSS();
     $this->assertEquals(true, self::$webDriver->findElement(webDriverBy::partialLinkText('Buchung hinzufügen'))->isDisplayed(), '#7 Add Booking is not displayed even the privilege is granted');
     #8 Check if a user with a higher Priority can oust another booking
     self::$helper->searchForRoomByName(self::$standard_roomname);
     self::$webDriver->findElement(WebDriverBy::linktext('Buchen'))->click();
     self::$helper->doABooking(self::$standard_subject, "1", "1", date("Y") + 1, "15", "00", "1", "1", date("Y") + 1, "16", "00", '');
     self::$helper->searchForRoomByName(self::$standard_roomname);
     self::$webDriver->findElement(WebDriverBy::linktext('Buchen'))->click();
     self::$helper->doABooking(self::$standard_subject, "1", "1", date("Y") + 1, "17", "00", "1", "1", date("Y") + 1, "18", "00", '');
     self::$helper->logout();
     self::$helper->login(self::$login_root, self::$pass_root);
     self::$helper->toRSS();
     self::$webDriver->findElement(webDriverBy::linkText('Privilegien'))->click();
     $class_2_id = self::$helper->getPrivilegeClassIDByNamePartial(self::$classname_2);
     self::$helper->grantPrivilege('cancelBookingLowerPriority', $class_2_id);
     self::$helper->grantPrivilege('accessSearch', $class_2_id);
     self::$helper->grantPrivilege('seeNonPublicBookingInformation', $class_2_id);
     self::$helper->grantPrivilege('accessAppointments', $class_2_id);
     self::$helper->grantPrivilege('addOwnBookings', $class_2_id);
     self::$helper->logout();
     self::$helper->login(self::$new_user_2_login, self::$new_user_2_pw);
     self::$helper->toRSS();
     self::$helper->searchForRoomByName(self::$standard_roomname);
     self::$webDriver->findElement(WebDriverBy::linktext('Buchen'))->click();
     self::$helper->doABooking(self::$standard_subject, "1", "1", date("Y") + 1, "15", "00", "1", "1", date("Y") + 1, "16", "00", '');
     try {
         self::$webDriver->findElement(WebDriverBy::className("ilFailureMessage"));
         $this->fail("#8 Booking with ousting a lower-priority booking does not succeed");
     } catch (Exception $ex) {
     }
     #9 Check if user with higher priority can cancel bookings with lower priority
     self::$helper->toRSS();
     self::$webDriver->findElement(webDriverBy::id('chb_select_all_'))->click();
     self::$webDriver->findElement(webDriverBy::cssSelector('div.ilTableCommandRow > div > input[name="cmd[confirmMultipleCancels]"]'))->click();
     self::$webDriver->findElement(webDriverBy::name('cmd[cancelMultipleBookings]'))->click();
     try {
         self::$webDriver->findElement(WebDriverBy::className("ilFailureMessage"));
         $this->fail('#9 Cancelling a booking with a lower priority is impossible');
     } catch (Exception $ex) {
     }
     #10 Check if serial bookings can be made and if unlimited bookings are possible
     self::$helper->logout();
     self::$helper->login(self::$login_root, self::$pass_root);
     self::$helper->toRSS();
     self::$webDriver->findElement(webDriverBy::linkText('Privilegien'))->click();
     self::$helper->grantPrivilege('addSequenceBookings', $class_1_id);
     self::$helper->grantPrivilege('addUnlimitedBookings', $class_1_id);
     self::$helper->logout();
     self::$helper->login(self::$new_user_1_login, self::$new_user_1_pw);
     self::$helper->toRSS();
     self::$helper->searchForRoomByName(self::$standard_roomname);
     self::$webDriver->findElement(WebDriverBy::linktext('Buchen'))->click();
     try {
         $this->assertEquals(true, self::$webDriver->findElement(webDriverBy::id('il_recurrence_1'))->isDisplayed(), "#10 Sequence Bookings are impossible");
     } catch (Exception $ex) {
         $this->fail("#10 Sequence Bookings are impossible");
     }
     self::$helper->toRSS();
     self::$helper->searchForRoomByName(self::$standard_roomname);
     self::$webDriver->findElement(WebDriverBy::linktext('Buchen'))->click();
     self::$helper->doABooking(self::$standard_subject, "1", "1", date("Y") + 1, "20", "00", "1", "1", date("Y") + 2, "11", "00", '');
     try {
         self::$webDriver->findElement(WebDriverBy::className("ilFailureMessage"));
         $this->fail('#10 Unlimited Bookings are impossible');
     } catch (Exception $ex) {
     }
     #11 Import Bookings
     self::$helper->logout();
     self::$helper->login(self::$login_root, self::$pass_root);
     self::$helper->toRSS();
     self::$webDriver->findElement(webDriverBy::linkText('Privilegien'))->click();
     self::$helper->grantPrivilege('accessImport', $class_1_id);
     self::$helper->logout();
     self::$helper->login(self::$new_user_1_login, self::$new_user_1_pw);
     self::$helper->toRSS();
     try {
         $this->assertEquals(true, self::$webDriver->findElement(webDriverBy::partialLinkText('Import'))->isDisplayed(), "#11 Import is not accessible");
     } catch (Exception $ex) {
         $this->fail("#11 Import is not accessible");
     }
     //Not implemented: Preferences for notifications. The ID for this privilege
     // (to be used in grantPrivilege() is 'notificationSettings'
 }