public function testCalendarEntryCreateTest()
 {
     // create Booking
     self::$helper->searchForRoomByAll("I117", "", date('d') + 1, date('m'), date('Y'), "10", "00", "12", "00", array());
     self::$webDriver->findElement(WebDriverBy::linktext('Buchen'))->click();
     self::$helper->doABooking("CalendarTestBooking", date('d') + 1, date('m'), date('Y'), "10", "00", date('d') + 1, date('m'), date('Y'), "12", "00", "true");
     // check calendar entry
     self::$webDriver->findElement(WebDriverBy::linkText(self::$helper->getCurrentMonth() . ' ' . date('Y')))->click();
     $this->assertContains("10:00 CalendarTestBooking", self::$webDriver->findElement(webDriverBy::cssSelector("div.ilTabContentOuter.ilTabsTableCell"))->getText());
     // go back to bookings
     self::$webDriver->findElement(WebDriverBy::linkText('Termine'))->click();
 }
 public static function createTestData()
 {
     self::$webDriver->findElement(WebDriverBy::partialLinkText('Rechte'))->click();
     self::$webDriver->findElement(WebDriverBy::id('select_4_nocreation'))->click();
     self::$webDriver->findElement(WebDriverBy::name('cmd[savePermissions]'))->click();
     self::$helper->createNewUser(self::$new_user_login, self::$new_user_initial_pw, self::$new_user_gender, self::$new_user_first_name, self::$new_user_last_name, self::$new_user_email);
     self::$helper->createNewUser(self::$lazy_user_login, self::$lazy_user_pw, self::$lazy_user_gender, self::$lazy_user_first_name, self::$lazy_user_last_name, self::$lazy_user_email);
     self::$helper->toRSS();
     self::$helper->addAttributeForBooking(self::$attribute_name);
     self::setUpPrivilegeClass();
     //Grant the privileges necessary to book
     self::$helper->createRoom(self::$standard_roomname, '1', '10');
     self::$helper->createRoom(self::$differing_roomname, '1', '10');
     self::$helper->createRoom(self::$unbooked_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::$standard_comment, false, array(), array(self::$attribute_name => self::$standard_attribute));
     self::$helper->searchForRoomByName(self::$differing_roomname);
     self::$webDriver->findElement(WebDriverBy::linktext('Buchen'))->click();
     self::$helper->doABooking(self::$standard_subject, "1", "1", date("Y") + 1, "14", "00", "1", "1", date("Y") + 1, "15", "00", "", self::$standard_comment, false, array(), array(self::$attribute_name => self::$standard_attribute));
     self::$helper->searchForRoomByName(self::$standard_roomname);
     self::$webDriver->findElement(WebDriverBy::linktext('Buchen'))->click();
     self::$helper->doABooking(self::$differing_subject, "1", "1", date("Y") + 1, "16", "00", "1", "1", date("Y") + 1, "17", "00", "", self::$standard_comment, false, array(), array(self::$attribute_name => self::$standard_attribute));
     self::$helper->searchForRoomByName(self::$standard_roomname);
     self::$webDriver->findElement(WebDriverBy::linktext('Buchen'))->click();
     self::$helper->doABooking(self::$standard_subject, "1", "1", date("Y") + 1, "18", "00", "1", "1", date("Y") + 1, "19", "00", "", self::$differing_comment, false, array(), array(self::$attribute_name => self::$standard_attribute));
     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") + 1, "21", "00", "", self::$standard_comment, false, array(), array(self::$attribute_name => self::$differing_attribute));
     self::$helper->logout();
     //new user will be asked to change his password at first login
     self::$helper->loginNewUserForFirstTime(self::$new_user_login, self::$new_user_initial_pw, self::$new_user_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, "8", "00", "1", "1", date("Y") + 1, "9", "00", "", self::$standard_comment, false, array(), array(self::$attribute_name => self::$standard_attribute));
 }
 public function testEditInvalidDate()
 {
     //edit date, date in past
     $row = self::$webDriver->findElement(WebDriverBy::xpath("//tr[contains(text(), " . "TestEditBooking" . ")]/td[8]"));
     $row->findElement(WebDriverBy::linkText('Bearbeiten'))->click();
     self::$webDriver->findElement(WebDriverBy::id('from[date]_d'))->sendKeys("13");
     self::$webDriver->findElement(WebDriverBy::id('from[date]_m'))->sendKeys("12");
     self::$webDriver->findElement(WebDriverBy::id('from[date]_y'))->sendKeys("2013");
     self::$webDriver->findElement(WebDriverBy::id('from[time]_h'))->sendKeys("11");
     self::$webDriver->findElement(WebDriverBy::id('from[time]_m'))->sendKeys("00");
     self::$webDriver->findElement(WebDriverBy::id('to[date]_d'))->sendKeys("13");
     self::$webDriver->findElement(WebDriverBy::id('to[date]_m'))->sendKeys("12");
     self::$webDriver->findElement(WebDriverBy::id('to[date]_y'))->sendKeys("2013");
     self::$webDriver->findElement(WebDriverBy::id('to[time]_h'))->sendKeys("13");
     self::$webDriver->findElement(WebDriverBy::id('to[time]_m'))->sendKeys("13");
     self::$webDriver->findElement(WebDriverBy::name('cmd[saveEditBooking]'))->click();
     $this->assertContains("Vergangenheit", self::$helper->getErrMessage());
     self::$webDriver->findElement(WebDriverBy::linkText('Zurück zu den Buchungen'))->click();
     //edit date, room occupied
     //book second room for occupation
     self::$helper->searchForRoomByAll("I117", "", "12", "12", "2018", "10", "00", "12", "00", array());
     self::$webDriver->findElement(WebDriverBy::linktext('Buchen'))->click();
     self::$helper->doABooking("BlockingBooking", "12", "12", "2018", "10", "00", "12", "12", "2018", "12", "00", "true");
     //edit the date
     $row2 = self::$webDriver->findElement(WebDriverBy::xpath("//tr[contains(text(), " . "TestEditBooking" . ")]/td[8]"));
     $row2->findElement(WebDriverBy::linkText('Bearbeiten'))->click();
     self::$webDriver->findElement(WebDriverBy::id('from[date]_d'))->sendKeys("12");
     self::$webDriver->findElement(WebDriverBy::id('from[date]_m'))->sendKeys("01");
     self::$webDriver->findElement(WebDriverBy::id('from[date]_y'))->sendKeys("2018");
     self::$webDriver->findElement(WebDriverBy::id('from[time]_h'))->sendKeys("10");
     self::$webDriver->findElement(WebDriverBy::id('from[time]_m'))->sendKeys("00");
     self::$webDriver->findElement(WebDriverBy::id('to[date]_d'))->sendKeys("12");
     self::$webDriver->findElement(WebDriverBy::id('to[date]_m'))->sendKeys("01");
     self::$webDriver->findElement(WebDriverBy::id('to[date]_y'))->sendKeys("2018");
     self::$webDriver->findElement(WebDriverBy::id('to[time]_h'))->sendKeys("12");
     self::$webDriver->findElement(WebDriverBy::id('to[time]_m'))->sendKeys("12");
     self::$webDriver->findElement(WebDriverBy::name('cmd[saveEditBooking]'))->click();
     $this->assertContains("Der Raum ist in dem Zeitraum bereits gebucht", self::$helper->getErrMessage());
     self::$webDriver->findElement(WebDriverBy::linkText('Zurück zu den Buchungen'))->click();
 }
 /**
  * Test valid booking: participants
  * @test
  */
 public function testValidBookingWithParticipants()
 {
     self::$webDriver->findElement(WebDriverBy::linktext('Buchen'))->click();
     self::$helper->fillBookingForm("Testbuchung", "12", "2", "2016", "10", "00", "12", "2", "2016", "11", "00", true, "", true, array("aaa", "bbb"));
     self::$webDriver->findElement(WebDriverBy::name('cmd[book]'))->click();
     $this->assertEquals("Buchung hinzugefügt", self::$helper->getSuccMessage());
     $page = self::$webDriver->findElement(WebDriverBy::tagName('body'))->getText();
     $this->assertContains("Alfred", $page);
     $this->assertContains("Bernd", $page);
     self::$helper->deleteFirstBooking();
 }
 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'
 }