@Bugs(ids = "53564") @Test( description = "Hard-delete a mail by selecting and typing 'shift-del' shortcut", groups = {"functional"}) public void HardDeleteConversation_01() throws HarnessException { // Create the message data to be sent ConversationItem c = ConversationItem.createConversationItem(app.zGetActiveAccount()); // Click Get Mail button app.zPageMail.zToolbarPressButton(Button.B_GETMAIL); // Check the item app.zPageMail.zListItem(Action.A_LEFTCLICK, c.getSubject()); // Click shift-delete DialogWarning dialog = (DialogWarning) app.zPageMail.zKeyboardShortcut(Shortcut.S_MAIL_HARDELETE); dialog.zClickButton(Button.B_OK); // Verify the message is no longer in the mailbox app.zGetActiveAccount() .soapSend( "<SearchRequest xmlns='urn:zimbraMail' types='conversation'>" + "<query>subject:(" + c.getSubject() + ") is:anywhere</query>" + "</SearchRequest>"); Element[] nodes = app.zGetActiveAccount().soapSelectNodes("//mail:c"); ZAssert.assertEquals(nodes.length, 0, "Verify the converastion is no longer in the mailbox"); }
@Bugs(ids = "69132") @Test( description = "Cancel meeting using context menu", groups = {"functional"}) public void CancelMeeting_01() throws HarnessException { // -- Data setup // Creating object for meeting data String tz, apptSubject, apptBody, apptAttendee1; tz = ZTimeZone.TimeZoneEST.getID(); apptSubject = ZimbraSeleniumProperties.getUniqueString(); apptBody = ZimbraSeleniumProperties.getUniqueString(); apptAttendee1 = ZimbraAccount.AccountA().EmailAddress; // Absolute dates in UTC zone Calendar now = this.calendarWeekDayUTC; ZDate startUTC = new ZDate( now.get(Calendar.YEAR), now.get(Calendar.MONTH) + 1, now.get(Calendar.DAY_OF_MONTH), 12, 0, 0); ZDate endUTC = new ZDate( now.get(Calendar.YEAR), now.get(Calendar.MONTH) + 1, now.get(Calendar.DAY_OF_MONTH), 14, 0, 0); app.zGetActiveAccount() .soapSend( "<CreateAppointmentRequest xmlns='urn:zimbraMail'>" + "<m>" + "<inv method='REQUEST' type='event' status='CONF' draft='0' class='PUB' fb='B' transp='O' allDay='0' name='" + apptSubject + "'>" + "<s d='" + startUTC.toTimeZone(tz).toYYYYMMDDTHHMMSS() + "' tz='" + tz + "'/>" + "<e d='" + endUTC.toTimeZone(tz).toYYYYMMDDTHHMMSS() + "' tz='" + tz + "'/>" + "<or a='" + app.zGetActiveAccount().EmailAddress + "'/>" + "<at role='REQ' ptst='NE' rsvp='1' a='" + apptAttendee1 + "' d='2'/>" + "</inv>" + "<e a='" + apptAttendee1 + "' t='t'/>" + "<mp content-type='text/plain'>" + "<content>" + apptBody + "</content>" + "</mp>" + "<su>" + apptSubject + "</su>" + "</m>" + "</CreateAppointmentRequest>"); String apptId = app.zGetActiveAccount().soapSelectValue("//mail:CreateAppointmentResponse", "apptId"); // -- GUI actions // Refresh the view app.zPageCalendar.zToolbarPressButton(Button.B_REFRESH); // Select the appointment app.zPageCalendar.zListItem(Action.A_LEFTCLICK, apptSubject); // Right Click -> Delete context menu DialogWarning dialog = (DialogWarning) app.zPageCalendar.zListItem(Action.A_RIGHTCLICK, Button.O_CANCEL_MENU, apptSubject); // Click Send Cancellation dialog.zClickButton(Button.B_SEND_CANCELLATION); // -- Verification // Verify the meeting disappears from the view ZAssert.assertEquals( app.zPageCalendar.sIsElementPresent(app.zPageCalendar.zGetApptLocator(apptSubject)), false, "Verify meeting is deleted from organizer's calendar"); // Verify meeting is deleted from attendee's calendar // AppointmentItem canceledAppt = AppointmentItem.importFromSOAP(ZimbraAccount.AccountA(), // "subject:("+ apptSubject +")", startUTC, endUTC); AppointmentItem canceledAppt = AppointmentItem.importFromSOAP(ZimbraAccount.AccountA(), "subject:(" + apptSubject + ")"); ZAssert.assertNull(canceledAppt, "Verify meeting is deleted from attendee's calendar"); }
@Bugs(ids = "69132") @Test( description = "Delete instance of series appointment (every week) using keyboard shortcuts Del & Backspace", groups = {"functional"}, dataProvider = "DataProviderShortcutKeys") public void DeleteInstance_06(String name, int keyEvent) throws HarnessException { // -- Data Setup // Appointment data String tz, apptSubject, apptBody; tz = ZTimeZone.TimeZoneEST.getID(); apptSubject = "subject" + ZimbraSeleniumProperties.getUniqueString(); apptBody = "body" + ZimbraSeleniumProperties.getUniqueString(); // Absolute dates in UTC zone Calendar now = this.calendarWeekDayUTC; ZDate startTime = new ZDate( now.get(Calendar.YEAR), now.get(Calendar.MONTH) + 1, now.get(Calendar.DAY_OF_MONTH), 12, 0, 0); ZDate endTime = new ZDate( now.get(Calendar.YEAR), now.get(Calendar.MONTH) + 1, now.get(Calendar.DAY_OF_MONTH), 14, 0, 0); app.zGetActiveAccount() .soapSend( "<CreateAppointmentRequest xmlns='urn:zimbraMail'>" + "<m>" + "<inv method='REQUEST' type='event' fb='B' transp='O' allDay='0' name='" + apptSubject + "'>" + "<s d='" + startTime.toTimeZone(tz).toYYYYMMDDTHHMMSS() + "' tz='" + tz + "'/>" + "<e d='" + endTime.toTimeZone(tz).toYYYYMMDDTHHMMSS() + "' tz='" + tz + "'/>" + "<or a='" + app.zGetActiveAccount().EmailAddress + "'/>" + "<recur>" + "<add>" + "<rule freq='MON'>" + "<interval ival='1'/>" + "</rule>" + "</add>" + "</recur>" + "</inv>" + "<mp content-type='text/plain'>" + "<content>" + apptBody + "</content>" + "</mp>" + "<su>" + apptSubject + "</su>" + "</m>" + "</CreateAppointmentRequest>"); // -- GUI actions // Delete instance and verify corresponding UI app.zPageCalendar.zToolbarPressButton(Button.B_REFRESH); app.zPageCalendar.zListItem(Action.A_LEFTCLICK, apptSubject); DialogWarning dialogSeriesOrInstance = (DialogWarning) app.zPageCalendar.zKeyboardKeyEvent(keyEvent); dialogSeriesOrInstance.zClickButton(Button.B_DELETE_THIS_INSTANCE); DialogWarning confirmDelete = (DialogWarning) dialogSeriesOrInstance.zClickButton(Button.B_OK); confirmDelete.zClickButton(Button.B_YES); // -- Verification // On the server, verify the appointment is in the trash app.zGetActiveAccount() .soapSend( "<SearchRequest xmlns='urn:zimbraMail' types='appointment' calExpandInstStart='" + startTime.addDays(-7).toMillis() + "' calExpandInstEnd='" + endTime.addDays(7).toMillis() + "'>" + "<query>is:anywhere " + apptSubject + "</query>" + "</SearchRequest>"); // http://bugzilla.zimbra.com/show_bug.cgi?id=63412 - "Deleting instance from calendar series // does not allow for user restoration from the Trash can" // http://bugzilla.zimbra.com/show_bug.cgi?id=13527#c4 - "Moving an instance from one cal to // other, moves complete series" // For now, nothing should be returned in the SearchResponse // // String folderID = app.zGetActiveAccount().soapSelectValue("//mail:appt", "l"); // ZAssert.assertEquals( // folderID, // FolderItem.importFromSOAP(app.zGetActiveAccount(), SystemFolder.Trash).getId(), // "Verify appointment is in the trash folder"); Element[] appts = app.zGetActiveAccount().soapSelectNodes("//mail:appt"); ZAssert.assertEquals( appts.length, 0, "Verify the appt element does not exist ... See also bug 63412"); // Verify the appointment is not in the GUI view // ZAssert.assertEquals(app.zPageCalendar.sIsElementPresent(app.zPageCalendar.zGetApptLocator(apptSubject)), false, "Verify instance is deleted from the calendar"); boolean deleted = app.zPageCalendar.zWaitForElementDeleted( app.zPageCalendar.zGetApptLocator(apptSubject), "10000"); ZAssert.assertEquals(deleted, true, "Verify instance is deleted from the calendar"); }
@Test( description = "Empty a folder (context menu)", groups = {"smoke"}) public void EmptyFolder_01() throws HarnessException { String foldername = "folder" + ZimbraSeleniumProperties.getUniqueString(); String subject = "subject" + ZimbraSeleniumProperties.getUniqueString(); FolderItem inbox = FolderItem.importFromSOAP(app.zGetActiveAccount(), FolderItem.SystemFolder.Inbox); // Create a subfolder in Inbox app.zGetActiveAccount() .soapSend( "<CreateFolderRequest xmlns='urn:zimbraMail'>" + "<folder name='" + foldername + "' l='" + inbox.getId() + "'/>" + "</CreateFolderRequest>"); // Make sure the folder was created on the server FolderItem subfolder = FolderItem.importFromSOAP(app.zGetActiveAccount(), foldername); ZAssert.assertNotNull(subfolder, "Verify the folder exists on the server"); // Add an message to the new subfolder app.zGetActiveAccount() .soapSend( "<AddMsgRequest xmlns='urn:zimbraMail'>" + "<m l='" + subfolder.getId() + "'>" + "<content>From: [email protected]\n" + "To: [email protected] \n" + "Subject: " + subject + "\n" + "MIME-Version: 1.0 \n" + "Content-Type: text/plain; charset=utf-8 \n" + "Content-Transfer-Encoding: 7bit\n" + "\n" + "simple text string in the body\n" + "</content>" + "</m>" + "</AddMsgRequest>"); MailItem mail = MailItem.importFromSOAP(app.zGetActiveAccount(), "subject:(" + subject + ")"); // Click on Get Mail to refresh the folder list app.zPageMail.zToolbarPressButton(Button.B_GETMAIL); // Right click on folder, select "Mark all as read" DialogWarning dialog = (DialogWarning) app.zTreeMail.zTreeItem(Action.A_RIGHTCLICK, Button.B_TREE_FOLDER_EMPTY, subfolder); ZAssert.assertNotNull( dialog, "Verify the warning dialog pops up - Are you sure you want to delete all items?"); // Dismiss it dialog.zClickButton(Button.B_OK); List<MailItem> messages = app.zPageMail.zListGetMessages(); ZAssert.assertNotNull(messages, "Verify the message list exists"); MailItem found = null; for (MailItem m : messages) { logger.info("Subject: looking for " + mail.dSubject + " found: " + m.gSubject); if (mail.dSubject.equals(m.gSubject)) { found = m; break; } } ZAssert.assertNull(found, "Verify the message is no longer exist"); // Make sure the folder was created on the server // MailItem mail = MailItem.importFromSOAP(app.zGetActiveAccount(), // "subject:("+ subject +")"); // ZAssert.assertNull(mail, "Verify the message no longer exists"); }
@Test( description = "Delete a contact, group, and folder permanently by Empty Trash folder on context menu", groups = {"smoke"}) public void ClickOK() throws HarnessException { // -- Data // The trash folder FolderItem trash = FolderItem.importFromSOAP(app.zGetActiveAccount(), SystemFolder.Trash); // Create a contact group via Soap ContactGroupItem group = ContactGroupItem.createContactGroupItem(app.zGetActiveAccount()); // Move to trash app.zGetActiveAccount() .soapSend( "<ItemActionRequest xmlns='urn:zimbraMail'>" + "<action op='move' id='" + group.getId() + "' l='" + trash.getId() + "'/>" + "</ItemActionRequest>"); // Create a contact via Soap ContactItem contact = ContactItem.createContactItem(app.zGetActiveAccount()); // Move to trash app.zGetActiveAccount() .soapSend( "<ItemActionRequest xmlns='urn:zimbraMail'>" + "<action op='move' id='" + contact.getId() + "' l='" + trash.getId() + "'/>" + "</ItemActionRequest>"); // Create a new folder in trash String name = "ab" + ZimbraSeleniumProperties.getUniqueString(); app.zGetActiveAccount() .soapSend( "<CreateFolderRequest xmlns='urn:zimbraMail'>" + "<folder name='" + name + "' view='contact' l='" + trash.getId() + "'/>" + "</CreateFolderRequest>"); // -- GUI // Refresh app.zPageAddressbook.zRefresh(); // Now open empty trash dialog DialogWarning dialogWarning = (DialogWarning) app.zTreeContacts.zTreeItem(Action.A_RIGHTCLICK, Button.B_TREE_FOLDER_EMPTY, trash); // Click OK dialogWarning.zClickButton(Button.B_OK); // -- Verification // Verify items are permanently deleted // Verify Trash folder is empty ContactItem actualContact = ContactItem.importFromSOAP( app.zGetActiveAccount(), "is:anywhere #firstname:" + contact.firstName); ZAssert.assertNull(actualContact, "Verify the contact is deleted"); ContactGroupItem actualGroup = ContactGroupItem.importFromSOAP(app.zGetActiveAccount(), "is:anywhere " + group.getName()); ZAssert.assertNull(actualGroup, "Verify the contact group is deleted"); FolderItem actualAddressbook = FolderItem.importFromSOAP(app.zGetActiveAccount(), name); ZAssert.assertNull(actualAddressbook, "Verify the addressbook is deleted"); }