@Test(
      description = "Delete multiple messages (3) by select and toolbar delete",
      groups = {"functional"})
  public void DeleteConversation_05() throws HarnessException {

    // Create the message data to be sent
    ConversationItem c1 = ConversationItem.createConversationItem(app.zGetActiveAccount());
    ConversationItem c2 = ConversationItem.createConversationItem(app.zGetActiveAccount());
    ConversationItem c3 = ConversationItem.createConversationItem(app.zGetActiveAccount());

    // Click Get Mail button
    app.zPageMail.zToolbarPressButton(Button.B_GETMAIL);

    // Select all three items
    app.zPageMail.zListItem(Action.A_MAIL_CHECKBOX, c1.getSubject());
    app.zPageMail.zListItem(Action.A_MAIL_CHECKBOX, c2.getSubject());
    app.zPageMail.zListItem(Action.A_MAIL_CHECKBOX, c3.getSubject());

    // Click toolbar delete button
    app.zPageMail.zToolbarPressButton(Button.B_DELETE);

    // -- Verification

    // Check each message to verify they exist in the trash
    FolderItem trash =
        FolderItem.importFromSOAP(app.zGetActiveAccount(), FolderItem.SystemFolder.Trash);

    ConversationItem actual1 =
        ConversationItem.importFromSOAP(
            app.zGetActiveAccount(), "is:anywhere subject:" + c1.getSubject());
    for (MailItem m : actual1.getMessageList()) {
      ZAssert.assertEquals(
          m.dFolderId, trash.getId(), "Verify the conversation message is in the trash");
    }

    ConversationItem actual2 =
        ConversationItem.importFromSOAP(
            app.zGetActiveAccount(), "is:anywhere subject:" + c2.getSubject());
    for (MailItem m : actual2.getMessageList()) {
      ZAssert.assertEquals(
          m.dFolderId, trash.getId(), "Verify the conversation message is in the trash");
    }

    ConversationItem actual3 =
        ConversationItem.importFromSOAP(
            app.zGetActiveAccount(), "is:anywhere subject:" + c3.getSubject());
    for (MailItem m : actual3.getMessageList()) {
      ZAssert.assertEquals(
          m.dFolderId, trash.getId(), "Verify the conversation message is in the trash");
    }
  }
Example #2
0
  @Test(
      description = "Delete a a top level briefcase folder - Right click, Delete",
      groups = {"smoke"})
  public void DeleteFolder_02() throws HarnessException {
    ZimbraAccount account = app.zGetActiveAccount();

    FolderItem briefcaseRootFolder = FolderItem.importFromSOAP(account, SystemFolder.Briefcase);

    FolderItem userRootFolder = FolderItem.importFromSOAP(account, SystemFolder.UserRoot);

    ZAssert.assertNotNull(userRootFolder, "Verify the user root folder is available");

    FolderItem trash = FolderItem.importFromSOAP(app.zGetActiveAccount(), SystemFolder.Trash);
    ZAssert.assertNotNull(trash, "Verify the trash is available");

    // Create a top level briefcase folder
    String briefcaseTopLevelFolderName = "folder" + ZimbraSeleniumProperties.getUniqueString();

    account.soapSend(
        "<CreateFolderRequest xmlns='urn:zimbraMail'>"
            + "<folder name='"
            + briefcaseTopLevelFolderName
            + "' l='"
            + userRootFolder.getId()
            + "' view='document'/>"
            + "</CreateFolderRequest>");

    FolderItem briefcaseTopLevelFolder =
        FolderItem.importFromSOAP(account, briefcaseTopLevelFolderName);
    ZAssert.assertNotNull(
        briefcaseTopLevelFolder, "Verify the briefcase top level folder is available");

    // refresh the Briefcase tree folder list
    app.zTreeBriefcase.zTreeItem(Action.A_LEFTCLICK, briefcaseRootFolder, false);

    // Delete the folder using context menu
    app.zTreeBriefcase.zTreeItem(
        Action.A_RIGHTCLICK, Button.B_TREE_DELETE, briefcaseTopLevelFolder);

    // Verify the folder is now in the trash
    briefcaseTopLevelFolder =
        FolderItem.importFromSOAP(app.zGetActiveAccount(), briefcaseTopLevelFolderName);
    ZAssert.assertNotNull(
        briefcaseTopLevelFolder, "Verify the briefcase top level folder is again available");
    ZAssert.assertEquals(
        trash.getId(),
        briefcaseTopLevelFolder.getParentId(),
        "Verify the deleted briefcase top level folder's parent is now the trash folder ID");
  }
  @Test(
      description = "Delete a conversation by selecting and typing '.t' shortcut",
      groups = {"functional"})
  public void DeleteConversation_04() 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 delete
    app.zPageMail.zKeyboardShortcut(Shortcut.S_MAIL_MOVETOTRASH);

    // -- Verification

    // Check each message to verify they exist in the trash
    FolderItem trash =
        FolderItem.importFromSOAP(app.zGetActiveAccount(), FolderItem.SystemFolder.Trash);
    ConversationItem actual =
        ConversationItem.importFromSOAP(
            app.zGetActiveAccount(), "is:anywhere subject:" + c.getSubject());

    for (MailItem m : actual.getMessageList()) {
      ZAssert.assertEquals(
          m.dFolderId, trash.getId(), "Verify the conversation message is in the trash");
    }
  }
  @Test(
      description = "Delete a mail using context menu delete button",
      groups = {"functional"})
  public void DeleteConversation_06() 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);

    // Right click the item, select delete
    app.zPageMail.zListItem(Action.A_RIGHTCLICK, Button.B_DELETE, c.getSubject());

    // -- Verification

    // Check each message to verify they exist in the trash
    FolderItem trash =
        FolderItem.importFromSOAP(app.zGetActiveAccount(), FolderItem.SystemFolder.Trash);
    ConversationItem actual =
        ConversationItem.importFromSOAP(
            app.zGetActiveAccount(), "is:anywhere subject:" + c.getSubject());

    for (MailItem m : actual.getMessageList()) {
      ZAssert.assertEquals(
          m.dFolderId, trash.getId(), "Verify the conversation message is in the trash");
    }
  }
  @Test(
      description = "Delete a conversation by selecting and typing 'delete' keyboard",
      groups = {"functional"},
      dataProvider = "DataProviderDeleteKeys")
  public void DeleteConversation_03(String name, int keyEvent) 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 delete
    logger.info("Typing shortcut key " + name + " KeyEvent: " + keyEvent);
    app.zPageMail.zKeyboardKeyEvent(keyEvent);

    // -- Verification

    // Check each message to verify they exist in the trash
    FolderItem trash =
        FolderItem.importFromSOAP(app.zGetActiveAccount(), FolderItem.SystemFolder.Trash);
    ConversationItem actual =
        ConversationItem.importFromSOAP(
            app.zGetActiveAccount(), "is:anywhere subject:" + c.getSubject());

    for (MailItem m : actual.getMessageList()) {
      ZAssert.assertEquals(
          m.dFolderId, trash.getId(), "Verify the conversation message is in the trash");
    }
  }
Example #6
0
  @Test(
      description = "Mark a message as unread by clicking on it, then using 'mu' hotkeys",
      groups = {"smoke"})
  public void MarkUnReadMail_01() throws HarnessException {

    // Create the message data to be sent
    String subject = "subject" + ZimbraSeleniumProperties.getUniqueString();

    FolderItem inboxFolder = FolderItem.importFromSOAP(app.zGetActiveAccount(), SystemFolder.Inbox);
    app.zGetActiveAccount()
        .soapSend(
            "<AddMsgRequest xmlns='urn:zimbraMail'>"
                + "<m l='"
                + inboxFolder.getId()
                + "' f=''>"
                + "<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>");

    // Create a mail item to represent the message
    MailItem mail = MailItem.importFromSOAP(app.zGetActiveAccount(), "subject:(" + subject + ")");
    ZAssert.assertStringDoesNotContain(mail.getFlags(), "u", "Verify message is initially unread");

    // Click Get Mail button
    app.zPageMail.zToolbarPressButton(Button.B_GETMAIL);

    // Select the item
    app.zPageMail.zListItem(Action.A_LEFTCLICK, mail.dSubject);

    // TODO: need to L10N this
    app.zPageMail.zKeyboardShortcut(Shortcut.S_MAIL_MARKUNREAD);

    GeneralUtility.syncDesktopToZcsWithSoap(app.zGetActiveAccount());

    // Verify the message is marked read in the server (flags attribute should not contain (u)nread)
    mail = MailItem.importFromSOAP(app.zGetActiveAccount(), "subject:(" + subject + ")");
    ZAssert.assertStringContains(
        mail.getFlags(), "u", "Verify the message is marked read in the server");

    // TODO: Verify the message is not marked unread in the list

  }
  // expand the folder to show folder's children
  public void zExpand(FolderItem folderItem) throws HarnessException {

    String locator = "css=td#zti__main_Contacts__" + folderItem.getId() + "_nodeCell" + ">div.";
    // already expanded or not have sub folders
    if (!sIsElementPresent(locator + Locators.COLLAPSE_NODE)) {
      return;
    }
    SleepUtil.sleepMedium();
    if (this.sIsElementPresent(locator + Locators.COLLAPSE_NODE)) {
      sMouseDown(locator + Locators.COLLAPSE_NODE);
    }
    zWaitForElementPresent(locator + Locators.EXPAND_NODE);
  }
  @Test(
      description = "Edit a subfolder, change name and color Context menu -> Edit)",
      groups = {"functional"})
  public void ChangeNameColorOfSubFolder() throws HarnessException {

    // -- Data

    FolderItem contacts = FolderItem.importFromSOAP(app.zGetActiveAccount(), SystemFolder.Contacts);

    // Create a folder
    String name = "ab" + ZimbraSeleniumProperties.getUniqueString();
    String newname = "ab" + ZimbraSeleniumProperties.getUniqueString();

    app.zGetActiveAccount()
        .soapSend(
            "<CreateFolderRequest xmlns='urn:zimbraMail'>"
                + "<folder name='"
                + name
                + "' view='contact' l='"
                + contacts.getId()
                + "'/>"
                + "</CreateFolderRequest>");
    FolderItem folderItem = FolderItem.importFromSOAP(app.zGetActiveAccount(), name);

    // -- GUI

    // Refresh
    app.zPageAddressbook.zRefresh();

    // Change the folder's color using context menu
    DialogEditFolder dialog =
        (DialogEditFolder)
            app.zTreeContacts.zTreeItem(Action.A_RIGHTCLICK, Button.B_TREE_EDIT, folderItem);
    ZAssert.assertNotNull(dialog, "Verify the dialog opened");

    dialog.zSetNewColor(FolderColor.Orange);
    dialog.zSetNewName(newname);
    dialog.zClickButton(Button.B_OK);

    // -- Verification

    // Get the folder again
    FolderItem actual = FolderItem.importFromSOAP(app.zGetActiveAccount(), name);
    ZAssert.assertNull(actual, "Verify the old addressbook does not exist");

    actual = FolderItem.importFromSOAP(app.zGetActiveAccount(), newname);
    ZAssert.assertNotNull(actual, "Verify the new addressbook exists");
    ZAssert.assertEquals(
        actual.getColor(), "9", "Verify the color of the folder is set to orange (9)");
  }
Example #9
0
  /**
   * Quick Command: Item Type: Mail Action 1: Tag Action 2: Mark Read Action 3: Mark Flagged Action
   * 4: Move To Subfolder
   *
   * @throws HarnessException
   */
  protected QuickCommand getQuickCommand01() throws HarnessException {

    if (command1 != null) {
      // Command already exists, just return it
      return (command1);
    }

    // Create a tag
    String tagname = "tag" + ZimbraSeleniumProperties.getUniqueString();
    ZimbraAccount.AccountZWC()
        .soapSend(
            "<CreateTagRequest xmlns='urn:zimbraMail'>"
                + "<tag name='"
                + tagname
                + "' color='1' />"
                + "</CreateTagRequest>");

    TagItem tag = TagItem.importFromSOAP(ZimbraAccount.AccountZWC(), tagname);
    ZAssert.assertNotNull(tag, "Verify the tag was created");

    // Create a subfolder
    String foldername = "folder" + ZimbraSeleniumProperties.getUniqueString();
    ZimbraAccount.AccountZWC()
        .soapSend(
            "<CreateFolderRequest xmlns='urn:zimbraMail'>"
                + "<folder name='"
                + foldername
                + "' l='1' view='message'/>"
                + "</CreateFolderRequest>");

    FolderItem folder = FolderItem.importFromSOAP(ZimbraAccount.AccountZWC(), foldername);
    ZAssert.assertNotNull(folder, "Verify the subfolder is available");

    // Create the list of actions
    ArrayList<QuickCommandAction> actions = new ArrayList<QuickCommandAction>();
    actions.add(new QuickCommandAction(QuickCommandAction.TypeId.actionTag, tag.getId(), true));
    actions.add(new QuickCommandAction(QuickCommandAction.TypeId.actionFlag, "read", true));
    actions.add(new QuickCommandAction(QuickCommandAction.TypeId.actionFlag, "flagged", true));
    actions.add(
        new QuickCommandAction(QuickCommandAction.TypeId.actionFileInto, folder.getId(), true));

    String name = "name" + ZimbraSeleniumProperties.getUniqueString();
    String description = "description" + ZimbraSeleniumProperties.getUniqueString();

    command1 = new QuickCommand(name, description, ItemTypeId.MSG, true);
    command1.addActions(actions);

    return (command1);
  }
Example #10
0
  @Test(
      description = "Rename a folder - Context menu -> Rename",
      groups = {"smoke"})
  public void RenameFolder_01() throws HarnessException {

    FolderItem inbox = FolderItem.importFromSOAP(app.zGetActiveAccount(), SystemFolder.Inbox);
    ZAssert.assertNotNull(inbox, "Verify the inbox is available");

    // Create the subfolder
    String name1 = "folder" + ZimbraSeleniumProperties.getUniqueString();

    app.zGetActiveAccount()
        .soapSend(
            "<CreateFolderRequest xmlns='urn:zimbraMail'>"
                + "<folder name='"
                + name1
                + "' l='"
                + inbox.getId()
                + "'/>"
                + "</CreateFolderRequest>");

    FolderItem subfolder1 = FolderItem.importFromSOAP(app.zGetActiveAccount(), name1);
    ZAssert.assertNotNull(subfolder1, "Verify the subfolder is available");

    // Click on Get Mail to refresh the folder list
    app.zPageMail.zToolbarPressButton(Button.B_GETMAIL);

    // Rename the folder using context menu
    DialogRenameFolder dialog =
        (DialogRenameFolder)
            app.zTreeMail.zTreeItem(Action.A_RIGHTCLICK, Button.B_RENAME, subfolder1);
    ZAssert.assertNotNull(dialog, "Verify the dialog opened");

    // Set the name, click OK
    String name2 = "folder" + ZimbraSeleniumProperties.getUniqueString();
    dialog.zSetNewName(name2);
    dialog.zClickButton(Button.B_OK);

    // Get all the folders and verify the new name appears and the old name disappears
    app.zGetActiveAccount().soapSend("<GetFolderRequest xmlns = 'urn:zimbraMail'/>");

    Element[] eFolder1 =
        app.zGetActiveAccount().soapSelectNodes("//mail:folder[@name='" + name1 + "']");
    ZAssert.assertEquals(eFolder1.length, 0, "Verify the old folder name no longer exists");

    Element[] eFolder2 =
        app.zGetActiveAccount().soapSelectNodes("//mail:folder[@name='" + name2 + "']");
    ZAssert.assertEquals(eFolder2.length, 1, "Verify the new folder name exists");
  }
  @Bugs(ids = "66393")
  @Test(
      description = "Auto save a basic draft (subject only)",
      groups = {"smoke"})
  public void AutoSaveDraftMail_01() throws HarnessException {

    // Create the message data to be sent
    String subject = "subject" + ZimbraSeleniumProperties.getUniqueString();
    String body = "body" + ZimbraSeleniumProperties.getUniqueString();

    FormMailNew mailform = null;

    try {

      // Open the new mail form
      mailform = (FormMailNew) app.zPageMail.zToolbarPressButton(Button.B_NEW);
      ZAssert.assertNotNull(mailform, "Verify the new form opened");

      // Fill out the form with the data
      mailform.zFillField(Field.Subject, subject);
      mailform.zFillField(Field.Body, body);

      // Wait for twice the amount
      SleepUtil.sleep(PrefAutoSaveDraftInterval * 2 * 1000);

      // Get the message from the server
      FolderItem draftsFolder =
          FolderItem.importFromSOAP(app.zGetActiveAccount(), SystemFolder.Drafts);
      MailItem draft =
          MailItem.importFromSOAP(app.zGetActiveAccount(), "subject:(" + subject + ")");

      // Verify the draft data matches
      ZAssert.assertEquals(draft.dSubject, subject, "Verify the subject field is correct");
      ZAssert.assertEquals(
          draft.dFolderId, draftsFolder.getId(), "Verify the draft is saved in the drafts folder");

    } finally {

      if ((mailform != null) && (mailform.zIsActive())) {
        // Close out the draft
        mailform.zToolbarPressButton(Button.B_SAVE_DRAFT);
        mailform.zToolbarPressButton(Button.B_CANCEL);
      }
    }
  }
Example #12
0
  @Test(
      description = "Rename a folder - set to an invalid name with ':'",
      groups = {"functional"})
  public void RenameFolder_02() throws HarnessException {

    FolderItem inbox = FolderItem.importFromSOAP(app.zGetActiveAccount(), SystemFolder.Inbox);
    ZAssert.assertNotNull(inbox, "Verify the inbox is available");

    // Create the subfolder
    String name1 = "folder" + ZimbraSeleniumProperties.getUniqueString();

    app.zGetActiveAccount()
        .soapSend(
            "<CreateFolderRequest xmlns='urn:zimbraMail'>"
                + "<folder name='"
                + name1
                + "' l='"
                + inbox.getId()
                + "'/>"
                + "</CreateFolderRequest>");

    FolderItem subfolder1 = FolderItem.importFromSOAP(app.zGetActiveAccount(), name1);
    ZAssert.assertNotNull(subfolder1, "Verify the subfolder is available");

    // Click on Get Mail to refresh the folder list
    app.zPageMail.zToolbarPressButton(Button.B_GETMAIL);

    // Rename the folder using context menu
    DialogRenameFolder dialog =
        (DialogRenameFolder)
            app.zTreeMail.zTreeItem(Action.A_RIGHTCLICK, Button.B_RENAME, subfolder1);
    ZAssert.assertNotNull(dialog, "Verify the dialog opened");

    // Set the name, click OK
    String name2 = "folder:folder" + ZimbraSeleniumProperties.getUniqueString();
    dialog.zSetNewName(name2);
    dialog.zClickButton(Button.B_OK);

    DialogError error = app.zPageMain.zGetErrorDialog(DialogErrorID.InvalidFolderName);
    ZAssert.assertTrue(error.zIsActive(), "Verify the error dialog appears");

    error.zClickButton(Button.B_OK);
  }
  /**
   * Click on the folder in the dialog tree
   *
   * @param folder
   * @throws HarnessException
   */
  public void zClickTreeFolder(FolderItem folder) throws HarnessException {
    logger.info(myPageName() + " zClickTreeFolder(" + folder + ")");

    tracer.trace("Click on tree briefcase with name " + folder.getName());

    if (folder == null) throw new HarnessException("folder must not be null");

    String locator =
        "css=div[id='"
            + Locators.zDialogId
            + "'] td[id='zti__ZmChooseFolderDialog_Mail__"
            + folder.getId()
            + "_textCell']";

    if (!this.sIsElementPresent(locator))
      throw new HarnessException("unable to find folder in tree " + locator);

    this.zClick(locator);

    this.zWaitForBusyOverlay();
  }
  /**
   * Click on the folder in the dialog tree
   *
   * @param folder
   * @throws HarnessException
   */
  public void zClickTreeFolder(FolderItem folder) throws HarnessException {
    logger.info(myPageName() + " zClickTreeFolder(" + folder + ")");

    tracer.trace("Click on tree folder with name " + folder.getName());

    if (folder == null) throw new HarnessException("folder must not be null");

    String locator =
        Locators.zDialogLocator
            + " td[id='zti__ZmChooseFolderDialog_Mail__"
            + folder.getId()
            + "_textCell']";

    if (!this.sIsElementPresent(locator))
      throw new HarnessException("unable to find folder in tree " + locator);

    // For some reason, the text doesn't get entered on the first try
    this.zClick(locator);

    // Is this sleep necessary?
    SleepUtil.sleepSmall();
  }
Example #15
0
  @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");

  }
  @Bugs(ids = "79188")
  @Test(
      description = "Delete a conversation - 1 message in inbox, 1 message in draft",
      groups = {"functional"})
  public void DeleteConversation_11() throws HarnessException {

    // -- DATA
    String subject = "subject" + ZimbraSeleniumProperties.getUniqueString();

    // Create a conversation (1 message in inbox, 1 draft response)
    ZimbraAccount.AccountA()
        .soapSend(
            "<SendMsgRequest xmlns='urn:zimbraMail'>"
                + "<m>"
                + "<e t='t' a='"
                + app.zGetActiveAccount().EmailAddress
                + "'/>"
                + "<su>"
                + subject
                + "</su>"
                + "<mp ct='text/plain'>"
                + "<content>body "
                + ZimbraSeleniumProperties.getUniqueString()
                + "</content>"
                + "</mp>"
                + "</m>"
                + "</SendMsgRequest>");

    MailItem message1 =
        MailItem.importFromSOAP(app.zGetActiveAccount(), "subject:(" + subject + ")");

    app.zGetActiveAccount()
        .soapSend(
            "<SaveDraftRequest xmlns='urn:zimbraMail'>"
                + "<m origid='"
                + message1.getId()
                + "' rt='r'>"
                + "<e t='t' a='"
                + ZimbraAccount.AccountA().EmailAddress
                + "'/>"
                + "<su>RE: "
                + subject
                + "</su>"
                + "<mp ct='text/plain'>"
                + "<content>body "
                + ZimbraSeleniumProperties.getUniqueString()
                + "</content>"
                + "</mp>"
                + "</m>"
                + "</SaveDraftRequest>");

    // Get the system folders
    FolderItem inbox = FolderItem.importFromSOAP(app.zGetActiveAccount(), SystemFolder.Inbox);
    FolderItem drafts = FolderItem.importFromSOAP(app.zGetActiveAccount(), SystemFolder.Drafts);
    FolderItem trash = FolderItem.importFromSOAP(app.zGetActiveAccount(), SystemFolder.Trash);

    // -- GUI

    // Click Get Mail button
    app.zPageMail.zToolbarPressButton(Button.B_GETMAIL);

    // Click in Drafts
    app.zTreeMail.zTreeItem(Action.A_LEFTCLICK, drafts);

    // Select the conversation or message (in 8.X, only messages are shown in drafts, not
    // conversations)
    app.zPageMail.zListItem(Action.A_LEFTCLICK, subject);

    // Click Delete
    app.zPageMail.zToolbarPressButton(Button.B_DELETE);

    // -- Verification

    // Verify inbox message remains (bug 79188)
    MailItem m =
        MailItem.importFromSOAP(
            app.zGetActiveAccount(), "subject:(" + subject + ") inid:" + inbox.getId());
    ZAssert.assertNotNull(m, "Verify original message reamins in the inbox");

    // Verify draft is no longer in drafts folder
    m =
        MailItem.importFromSOAP(
            app.zGetActiveAccount(), "subject:(" + subject + ") inid:" + drafts.getId());
    ZAssert.assertNull(m, "Verify message is deleted from drafts");

    // Verify draft is in trash folder
    m =
        MailItem.importFromSOAP(
            app.zGetActiveAccount(), "subject:(" + subject + ") inid:" + trash.getId());
    ZAssert.assertNotNull(m, "Verify message is moved to trash");
  }
  @Test(
      description =
          "Delete a conversation - 1 message in inbox, 1 message in sent, 1 message in subfolder",
      groups = {"functional"})
  public void DeleteConversation_10() throws HarnessException {

    // -- DATA

    // Create a conversation (3 messages)
    ConversationItem c = ConversationItem.createConversationItem(app.zGetActiveAccount());

    // Put one message in inbox, one in trash, one in subfolder

    // Get the system folders
    FolderItem inbox = FolderItem.importFromSOAP(app.zGetActiveAccount(), SystemFolder.Inbox);
    FolderItem trash = FolderItem.importFromSOAP(app.zGetActiveAccount(), SystemFolder.Trash);
    FolderItem sent = FolderItem.importFromSOAP(app.zGetActiveAccount(), SystemFolder.Sent);

    // Move the conversation to the trash
    app.zGetActiveAccount()
        .soapSend(
            "<ItemActionRequest xmlns='urn:zimbraMail'>"
                + "<action op='move' l='"
                + trash.getId()
                + "' id='"
                + c.getMessageList().get(0).getId()
                + "'/>"
                + "</ItemActionRequest>");

    // Create a message in a subfolder
    String foldername = "folder" + ZimbraSeleniumProperties.getUniqueString();
    app.zGetActiveAccount()
        .soapSend(
            "<CreateFolderRequest xmlns='urn:zimbraMail'>"
                + "<folder name='"
                + foldername
                + "' l='"
                + inbox.getId()
                + "'/>"
                + "</CreateFolderRequest>");
    FolderItem subfolder = FolderItem.importFromSOAP(app.zGetActiveAccount(), foldername);

    // Move the conversation to the subfolder
    app.zGetActiveAccount()
        .soapSend(
            "<ItemActionRequest xmlns='urn:zimbraMail'>"
                + "<action op='move' l='"
                + subfolder.getId()
                + "' id='"
                + c.getMessageList().get(1).getId()
                + "'/>"
                + "</ItemActionRequest>");

    // Reply to one message (putting a message in sent)
    app.zGetActiveAccount()
        .soapSend(
            "<SendMsgRequest xmlns='urn:zimbraMail'>"
                + "<m origid='"
                + c.getMessageList().get(2).getId()
                + "' rt='r'>"
                + "<e t='t' a='"
                + ZimbraAccount.AccountA().EmailAddress
                + "'/>"
                + "<su>RE: "
                + c.getSubject()
                + "</su>"
                + "<mp ct='text/plain'>"
                + "<content>"
                + "body"
                + ZimbraSeleniumProperties.getUniqueString()
                + "</content>"
                + "</mp>"
                + "</m>"
                + "</SendMsgRequest>");
    String idSent = app.zGetActiveAccount().soapSelectValue("//mail:m", "id");

    // -- GUI

    // Click Get Mail button
    app.zPageMail.zToolbarPressButton(Button.B_GETMAIL);

    // Right click the item, select delete
    app.zPageMail.zListItem(Action.A_RIGHTCLICK, Button.B_DELETE, c.getSubject());

    // -- Verification

    // Expected: all messages should be in trash, except for the sent message
    // Check each message to verify they exist in the trash
    ConversationItem actual =
        ConversationItem.importFromSOAP(
            app.zGetActiveAccount(), "is:anywhere subject:" + c.getSubject());

    for (MailItem m : actual.getMessageList()) {
      if (idSent.equals(m.getId())) {
        // Sent message should remain in sent
        ZAssert.assertEquals(
            m.dFolderId, sent.getId(), "Verify the conversation message is in the sent folder");
      } else {
        // All other messages should be moved to trash
        ZAssert.assertEquals(
            m.dFolderId, trash.getId(), "Verify the conversation message is in the trash");
      }
    }
  }
  @Test(
      description = "Undo - Mark a message as spam, using 'Spam' toolbar button",
      groups = {"functional"})
  public void UndoMarkSpamMessage_01() throws HarnessException {

    FolderItem inbox =
        FolderItem.importFromSOAP(app.zGetActiveAccount(), FolderItem.SystemFolder.Inbox);
    FolderItem junk =
        FolderItem.importFromSOAP(app.zGetActiveAccount(), FolderItem.SystemFolder.Junk);
    String subject = "subject" + ZimbraSeleniumProperties.getUniqueString();

    app.zGetActiveAccount()
        .soapSend(
            "<AddMsgRequest xmlns='urn:zimbraMail'>"
                + "<m l='"
                + inbox.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"
                + "content \n"
                + "\n"
                + "\n"
                + "</content>"
                + "</m>"
                + "</AddMsgRequest>");

    MailItem message =
        MailItem.importFromSOAP(app.zGetActiveAccount(), "subject:(" + subject + ") is:anywhere");
    ZAssert.assertNotNull(message, "Verify the message was created");

    // Click Get Mail button
    app.zPageMail.zToolbarPressButton(Button.B_GETMAIL);

    // Select the item
    app.zPageMail.zListItem(Action.A_LEFTCLICK, subject);

    // Click spam
    app.zPageMail.zToolbarPressButton(Button.B_RESPORTSPAM);

    // Get the mail item for the new message
    // Need 'is:anywhere' to include the spam folder
    MailItem spam =
        MailItem.importFromSOAP(app.zGetActiveAccount(), "is:anywhere subject:(" + subject + ")");
    ZAssert.assertEquals(spam.dFolderId, junk.getId(), "Verify the message is in the spam folder");

    // Click undo
    Toaster toaster = app.zPageMain.zGetToaster();
    toaster.zClickUndo();

    // Get the mail item for the new message
    // Need 'is:anywhere' to include the spam folder
    MailItem undone =
        MailItem.importFromSOAP(app.zGetActiveAccount(), "is:anywhere subject:(" + subject + ")");
    ZAssert.assertEquals(
        undone.dFolderId, inbox.getId(), "Verify the message is back in the inbox folder");
  }
Example #19
0
  @Bugs(ids = "80287")
  @Test(
      description =
          "Modify a basic retention (Context menu -> Edit -> Retention) (zimbraFeatureSharingEnabled=FALSE)",
      groups = {"functional"})
  public void Bug80287_01() throws HarnessException {

    // -- Data

    // Create the subfolder
    String foldername = "folder" + ZimbraSeleniumProperties.getUniqueString();

    app.zGetActiveAccount()
        .soapSend(
            "<CreateFolderRequest xmlns='urn:zimbraMail'>"
                + "<folder name='"
                + foldername
                + "' l='"
                + FolderItem.importFromSOAP(app.zGetActiveAccount(), FolderItem.SystemFolder.Inbox)
                    .getId()
                + "'/>"
                + "</CreateFolderRequest>");

    FolderItem folder = FolderItem.importFromSOAP(app.zGetActiveAccount(), foldername);
    ZAssert.assertNotNull(folder, "Verify the subfolder is available");

    // Add a retention policy
    app.zGetActiveAccount()
        .soapSend(
            "<FolderActionRequest xmlns='urn:zimbraMail'>"
                + "<action id='"
                + folder.getId()
                + "' op='retentionpolicy'>"
                + "<retentionPolicy>"
                + "<keep>"
                + "<policy lifetime='5d' type='user'/>"
                + "</keep>"
                + "</retentionPolicy>"
                + "</action>"
                + "</FolderActionRequest>");

    // -- GUI

    // Click on Get Mail to refresh the folder list
    app.zPageMail.zToolbarPressButton(Button.B_GETMAIL);

    // Rename the folder using context menu
    DialogEditFolder dialog =
        (DialogEditFolder) app.zTreeMail.zTreeItem(Action.A_RIGHTCLICK, Button.B_TREE_EDIT, folder);

    // Set to 4 years
    dialog.zNavigateToTab(DialogEditFolder.DialogTab.Retention);
    dialog.zRetentionSetRangeValue(6);

    // Save
    dialog.zClickButton(Button.B_OK);

    // -- Verification

    // Verify the retention policy on the folder
    app.zGetActiveAccount()
        .soapSend(
            "<GetFolderRequest xmlns='urn:zimbraMail'>"
                + "<folder l='"
                + folder.getId()
                + "'/>"
                + "</GetFolderRequest>");
    String lifetime =
        app.zGetActiveAccount().soapSelectValue("//mail:keep//mail:policy", "lifetime");

    ZAssert.assertEquals(lifetime, "6d", "Verify the policy lifetime is set to 6 days");
  }
Example #20
0
  @Test(
      description = "Login to the Ajax Client - with a mountpoint to a deleted share",
      groups = {"functional"})
  public void ShareDeleted01() throws HarnessException {

    // Data setup

    String subject = "subject" + ZimbraSeleniumProperties.getUniqueString();
    String foldername = "folder" + ZimbraSeleniumProperties.getUniqueString();
    String mountpointname = "mountpoint" + ZimbraSeleniumProperties.getUniqueString();

    FolderItem inbox = FolderItem.importFromSOAP(Owner, FolderItem.SystemFolder.Inbox);

    // Create a folder to share
    Owner.soapSend(
        "<CreateFolderRequest xmlns='urn:zimbraMail'>"
            + "<folder name='"
            + foldername
            + "' l='"
            + inbox.getId()
            + "'/>"
            + "</CreateFolderRequest>");

    FolderItem folder = FolderItem.importFromSOAP(Owner, foldername);

    Owner.soapSend(
        "<AddMsgRequest xmlns='urn:zimbraMail'>"
            + "<m l='"
            + folder.getId()
            + "' f='u'>"
            + "<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>");

    // Share it
    Owner.soapSend(
        "<FolderActionRequest xmlns='urn:zimbraMail'>"
            + "<action id='"
            + folder.getId()
            + "' op='grant'>"
            + "<grant d='"
            + app.zGetActiveAccount().EmailAddress
            + "' gt='usr' perm='rwidxa'/>"
            + "</action>"
            + "</FolderActionRequest>");

    // Mount it
    app.zGetActiveAccount()
        .soapSend(
            "<CreateMountpointRequest xmlns='urn:zimbraMail'>"
                + "<link l='1' name='"
                + mountpointname
                + "'  rid='"
                + folder.getId()
                + "' zid='"
                + Owner.ZimbraId
                + "'/>"
                + "</CreateMountpointRequest>");

    FolderMountpointItem mountpoint =
        FolderMountpointItem.importFromSOAP(app.zGetActiveAccount(), mountpointname);
    ZAssert.assertNotNull(mountpoint, "Verify the mountpoint was created");

    // Click Get Mail button
    app.zPageMail.zToolbarPressButton(Button.B_GETMAIL);

    // View the folder
    app.zTreeMail.zTreeItem(Action.A_LEFTCLICK, mountpoint);

    // Logout
    ZimbraAccount account = app.zGetActiveAccount();
    app.zPageMain.zLogout();

    // Share it
    Owner.soapSend(
        "<FolderActionRequest xmlns='urn:zimbraMail'>"
            + "<action id='"
            + folder.getId()
            + "' op='delete'>"
            + "</action>"
            + "</FolderActionRequest>");

    // Login
    app.zPageLogin.zLogin(account);

    // View the folder
    app.zTreeMail.zTreeItem(Action.A_LEFTCLICK, mountpoint);
  }
  @Test(
      description = "Sort a list of messages by subject (A->Z)",
      groups = {"functional"})
  public void SortBySubject_01() throws HarnessException {

    // Create the message data
    FolderItem inbox = FolderItem.importFromSOAP(app.zGetActiveAccount(), SystemFolder.Inbox);
    String subjectA = "subjectA" + ZimbraSeleniumProperties.getUniqueString();
    String subjectB = "subjectB" + ZimbraSeleniumProperties.getUniqueString();

    app.zGetActiveAccount()
        .soapSend(
            "<AddMsgRequest xmlns='urn:zimbraMail'>"
                + "<m l='"
                + inbox.getId()
                + "' f='f'>"
                + "<content>From: [email protected]\n"
                + "To: [email protected] \n"
                + "Subject: "
                + subjectA
                + "\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>");

    app.zGetActiveAccount()
        .soapSend(
            "<AddMsgRequest xmlns='urn:zimbraMail'>"
                + "<m l='"
                + inbox.getId()
                + "' >"
                + "<content>From: [email protected]\n"
                + "To: [email protected] \n"
                + "Subject: "
                + subjectB
                + "\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>");

    // Click Get Mail button
    app.zPageMail.zToolbarPressButton(Button.B_GETMAIL);

    // Click on Inbox
    app.zTreeMail.zTreeItem(Action.A_LEFTCLICK, inbox);

    // First, sort by subject to clear the order
    app.zPageMail.zToolbarPressButton(Button.B_MAIL_LIST_SORTBY_FLAGGED);

    // Now, click on "subject"
    app.zPageMail.zToolbarPressButton(Button.B_MAIL_LIST_SORTBY_SUBJECT);

    // Get all the messages in the inbox
    app.zGetActiveAccount()
        .soapSend(
            "<GetPrefsRequest xmlns='urn:zimbraAccount'>"
                + "<pref name='zimbraPrefSortOrder'/>"
                + "</GetPrefsRequest>");

    List<MailItem> messages = app.zPageMail.zListGetMessages();
    ZAssert.assertNotNull(messages, "Verify the message list exists");

    MailItem itemA = null;
    for (MailItem m : messages) {
      if (subjectA.equals(m.gSubject)) {
        itemA = m;
      }
      if (subjectB.equals(m.gSubject)) {
        ZAssert.assertNotNull(
            itemA, "Item B is in the list.  Verify Item A has already been found.");
      }
    }

    ZAssert.assertNotNull(itemA, "Verify Item A was found.");
  }
  @Test(
      description = "Drag one folder and Drop into other",
      groups = {"smoke"})
  public void DragAndDropFeed_01() throws HarnessException, MalformedURLException {

    FolderItem inbox = FolderItem.importFromSOAP(app.zGetActiveAccount(), SystemFolder.Inbox);
    ZAssert.assertNotNull(inbox, "Verify the inbox is available");

    // Create a subfolder in Inbox
    String feedname = "feed" + ZimbraSeleniumProperties.getUniqueString();
    URL feedurl = new URL("http", "rss.news.yahoo.com", 80, "/rss/topstories");

    app.zGetActiveAccount()
        .soapSend(
            "<CreateFolderRequest xmlns='urn:zimbraMail'>"
                + "<folder name='"
                + feedname
                + "' l='"
                + inbox.getId()
                + "' url='"
                + feedurl.toString()
                + "'/>"
                + "</CreateFolderRequest>");

    FolderItem feed = FolderItem.importFromSOAP(app.zGetActiveAccount(), feedname);
    ZAssert.assertNotNull(feed, "Verify the subfolder is available");

    // Create two subfolders in the inbox
    // One folder to Drag
    // Another folder to drop into
    String name1 = "folder" + ZimbraSeleniumProperties.getUniqueString();

    app.zGetActiveAccount()
        .soapSend(
            "<CreateFolderRequest xmlns='urn:zimbraMail'>"
                + "<folder name='"
                + name1
                + "' l='"
                + inbox.getId()
                + "'/>"
                + "</CreateFolderRequest>");

    FolderItem subfolder1 = FolderItem.importFromSOAP(app.zGetActiveAccount(), name1);
    ZAssert.assertNotNull(subfolder1, "Verify the first subfolder is available");

    // Click on Get Mail to refresh the folder list
    app.zPageMail.zToolbarPressButton(Button.B_GETMAIL);

    // Bug 65234
    // Sometimes the folder tree is rendered slowly.  sleep a bit
    SleepUtil.sleepVerySmall();

    app.zPageMail.zDragAndDrop(
        "css=td[id='zti__main_Mail__" + feed.getId() + "_textCell']",
        "css=td[id='zti__main_Mail__" + subfolder1.getId() + "_textCell']");

    // Verify the folder is now in the other subfolder
    feed = FolderItem.importFromSOAP(app.zGetActiveAccount(), feedname);
    ZAssert.assertNotNull(feed, "Verify the subfolder is again available");
    ZAssert.assertEquals(
        subfolder1.getId(),
        feed.getParentId(),
        "Verify the subfolder's parent is now the other subfolder");
  }
Example #23
0
  /* (non-Javadoc)
   * @see framework.ui.AbsTree#zTreeItem(framework.ui.Action, framework.items.FolderItem)
   */
  public AbsPage zTreeItem(Action action, IItem addressbook) throws HarnessException {
    tracer.trace("Click " + action + " on addressbook " + addressbook);

    // Validate the arguments
    if ((action == null) || (addressbook == null)) {
      throw new HarnessException("Must define an action and addressbook");
    }
    FolderItem folder = null;
    TagItem tag = null;
    if (!(addressbook instanceof FolderItem)) {
      tag = (TagItem) addressbook;
      // throw new HarnessException("Must use FolderItem as argument, but was "+
      // addressbook.getClass());
    } else {

      folder = (FolderItem) addressbook;
    }
    AbsPage page = null;
    String locator = null;

    if (action == Action.A_LEFTCLICK) {

      // choose target addressbook to move contact to (done for TouchPad)
      locator =
          "css=div[id^='ext-tagview'] div[id^='ext-simplelistitem'] div[id^='ext-element']:contains('"
              + tag.getName()
              + "')";
      page = null;
    } else if (action == Action.A_RIGHTCLICK) {

      locator = "id=zti__main_Contacts__" + folder.getId() + "_textCell";
      if (!this.sIsElementPresent(locator)) {
        throw new HarnessException("Unable to locator folder in tree " + locator);
      }

      this.zRightClickAt(locator, "");
      zWaitForBusyOverlay();

      return (null);

    } else {
      throw new HarnessException("Action " + action + " not yet implemented");
    }

    if (locator == null) {
      throw new HarnessException("no locator defined for action: " + action);
    }

    if (!this.sIsElementPresent(locator)) {
      throw new HarnessException("Unable to locator folder in tree " + locator);
    }

    // By default, left click at locator
    zClick(locator);
    zWaitForBusyOverlay();

    if (page != null) {
      page.zWaitForActive();
    }

    return (page);
  }
Example #24
0
  @Test(
      description = "Grantee views show original of the appointment from grantor's calendar",
      groups = {"functional"})
  public void ShowOriginal_01() throws HarnessException {

    String apptSubject = "appointment" + ZimbraSeleniumProperties.getUniqueString();
    String apptContent = ZimbraSeleniumProperties.getUniqueString();
    String foldername = "folder" + ZimbraSeleniumProperties.getUniqueString();
    String mountpointname = "mountpoint" + ZimbraSeleniumProperties.getUniqueString();

    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);

    FolderItem calendarFolder =
        FolderItem.importFromSOAP(ZimbraAccount.AccountA(), FolderItem.SystemFolder.Calendar);

    // Create a folder to share
    ZimbraAccount.AccountA()
        .soapSend(
            "<CreateFolderRequest xmlns='urn:zimbraMail'>"
                + "<folder name='"
                + foldername
                + "' l='"
                + calendarFolder.getId()
                + "'/>"
                + "</CreateFolderRequest>");

    FolderItem folder = FolderItem.importFromSOAP(ZimbraAccount.AccountA(), foldername);

    // Share it
    ZimbraAccount.AccountA()
        .soapSend(
            "<FolderActionRequest xmlns='urn:zimbraMail'>"
                + "<action id='"
                + folder.getId()
                + "' op='grant'>"
                + "<grant d='"
                + app.zGetActiveAccount().EmailAddress
                + "' gt='usr' perm='r' view='appointment'/>"
                + "</action>"
                + "</FolderActionRequest>");

    // Mount it
    app.zGetActiveAccount()
        .soapSend(
            "<CreateMountpointRequest xmlns='urn:zimbraMail'>"
                + "<link l='1' name='"
                + mountpointname
                + "'  rid='"
                + folder.getId()
                + "' zid='"
                + ZimbraAccount.AccountA().ZimbraId
                + "' view='appointment' color='5'/>"
                + "</CreateMountpointRequest>");

    // Create appointment
    ZimbraAccount.AccountA()
        .soapSend(
            "<CreateAppointmentRequest xmlns='urn:zimbraMail'>"
                + "<m l='"
                + folder.getId()
                + "' >"
                + "<inv method='REQUEST' type='event' status='CONF' draft='0' class='PUB' fb='B' transp='O' allDay='0' name='"
                + apptSubject
                + "'>"
                + "<s d='"
                + startUTC.toTimeZone(ZTimeZone.TimeZoneEST.getID()).toYYYYMMDDTHHMMSS()
                + "' tz='"
                + ZTimeZone.TimeZoneEST.getID()
                + "'/>"
                + "<e d='"
                + endUTC.toTimeZone(ZTimeZone.TimeZoneEST.getID()).toYYYYMMDDTHHMMSS()
                + "' tz='"
                + ZTimeZone.TimeZoneEST.getID()
                + "'/>"
                + "<or a='"
                + ZimbraAccount.AccountA().EmailAddress
                + "'/>"
                + "<at role='REQ' ptst='NE' rsvp='1' a='"
                + app.zGetActiveAccount().EmailAddress
                + "'/>"
                + "</inv>"
                + "<e a='"
                + app.zGetActiveAccount().EmailAddress
                + "' t='t'/>"
                + "<su>"
                + apptSubject
                + "</su>"
                + "<mp content-type='text/plain'>"
                + "<content>"
                + apptContent
                + "</content>"
                + "</mp>"
                + "</m>"
                + "</CreateAppointmentRequest>");
    app.zPageCalendar.zToolbarPressButton(Button.B_REFRESH);

    // Mark ON to mounted calendar folder and select the appointment
    app.zTreeCalendar.zDeSelectCalendarFolder("Calendar");
    app.zTreeCalendar.zSelectMountedFolder(mountpointname);

    // Appointment show original
    SeparateWindowShowOriginal window =
        (SeparateWindowShowOriginal)
            app.zPageCalendar.zListItem(
                Action.A_RIGHTCLICK, Button.O_SHOW_ORIGINAL_MENU, apptSubject);
    try {
      window.zWaitForActive();
      SleepUtil.sleepMedium();
      ZAssert.assertTrue(window.zIsActive(), "Verify the window is active");

      String body = window.sGetBodyText();
      ZAssert.assertStringContains(body, apptSubject, "Verify subject in show original");
      ZAssert.assertStringContains(body, apptContent, "Verify content in show original");
      ZAssert.assertStringContains(body, "BEGIN:VCALENDAR", "Verify BEGIN header in show original");
      ZAssert.assertStringContains(body, "END:VCALENDAR", "Verify END header in show original");
      ZAssert.assertStringContains(
          body,
          "ORGANIZER:mailto:" + ZimbraAccount.AccountA().EmailAddress,
          "Verify organizer value in show original");

    } finally {
      if (window != null) window.zCloseWindow();
    }
  }
  @Bugs(ids = "63796")
  @Test(
      description =
          "Verify Permission Denied on Spam (keyboard='ms') a shared mail (read-only share)",
      groups = {"functional"})
  public void MarkSpamMessage_02() throws HarnessException {
    String foldername = "folder" + ZimbraSeleniumProperties.getUniqueString();
    String subject = "subject" + ZimbraSeleniumProperties.getUniqueString();
    String mountpointname = "mountpoint" + ZimbraSeleniumProperties.getUniqueString();

    FolderItem inbox =
        FolderItem.importFromSOAP(ZimbraAccount.AccountA(), FolderItem.SystemFolder.Inbox);

    // Create a folder to share
    ZimbraAccount.AccountA()
        .soapSend(
            "<CreateFolderRequest xmlns='urn:zimbraMail'>"
                + "<folder name='"
                + foldername
                + "' l='"
                + inbox.getId()
                + "'/>"
                + "</CreateFolderRequest>");

    FolderItem folder = FolderItem.importFromSOAP(ZimbraAccount.AccountA(), foldername);

    // Share it
    ZimbraAccount.AccountA()
        .soapSend(
            "<FolderActionRequest xmlns='urn:zimbraMail'>"
                + "<action id='"
                + folder.getId()
                + "' op='grant'>"
                + "<grant d='"
                + app.zGetActiveAccount().EmailAddress
                + "' gt='usr' perm='r'/>"
                + "</action>"
                + "</FolderActionRequest>");

    // Add a message to it
    ZimbraAccount.AccountA()
        .soapSend(
            "<AddMsgRequest xmlns='urn:zimbraMail'>"
                + "<m l='"
                + folder.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(ZimbraAccount.AccountA(), "subject:(" + subject + ")");

    // Mount it
    app.zGetActiveAccount()
        .soapSend(
            "<CreateMountpointRequest xmlns='urn:zimbraMail'>"
                + "<link l='1' name='"
                + mountpointname
                + "'  rid='"
                + folder.getId()
                + "' zid='"
                + ZimbraAccount.AccountA().ZimbraId
                + "'/>"
                + "</CreateMountpointRequest>");

    FolderMountpointItem mountpoint =
        FolderMountpointItem.importFromSOAP(app.zGetActiveAccount(), mountpointname);

    // Click Get Mail button
    app.zPageMail.zToolbarPressButton(Button.B_GETMAIL);

    // For some reason, it takes a bit of time for this share to show up
    SleepUtil.sleepMedium();

    // Click on the mountpoint
    app.zTreeMail.zTreeItem(Action.A_LEFTCLICK, mountpoint);

    // Select the item
    app.zPageMail.zListItem(Action.A_LEFTCLICK, mail.dSubject);

    // Spam the item
    app.zPageMail.zKeyboardShortcut(Shortcut.S_MAIL_MARKSPAM);

    // http://bugzilla.zimbra.com/show_bug.cgi?id=63796
    // A "Permission Denied" error popup should not occur
    DialogError dialog = app.zPageMain.zGetErrorDialog(DialogError.DialogErrorID.Zimbra);
    ZAssert.assertNotNull(dialog, "Verify the PERM DENIED Error Dialog is created");
    ZAssert.assertFalse(dialog.zIsActive(), "Verify the PERM DENIED Error Dialog is not active");

    // Verify the message is still in the owner's folder
    mail = MailItem.importFromSOAP(ZimbraAccount.AccountA(), "subject:(" + subject + ")");
    ZAssert.assertEquals(
        mail.dFolderId, folder.getId(), "Verify the message is still in the owner's folder");
  }
  @Test(
      description = "Mark all messages as read in folder (context menu)",
      groups = {"functional"})
  public void MarkAllAsReadMountpoint_01() throws HarnessException {
    String foldername = "folder" + ZimbraSeleniumProperties.getUniqueString();
    String subject = "subject" + ZimbraSeleniumProperties.getUniqueString();
    String mountpointname = "mountpoint" + ZimbraSeleniumProperties.getUniqueString();

    FolderItem inbox =
        FolderItem.importFromSOAP(ZimbraAccount.AccountA(), FolderItem.SystemFolder.Inbox);

    // Create a folder to share
    ZimbraAccount.AccountA()
        .soapSend(
            "<CreateFolderRequest xmlns='urn:zimbraMail'>"
                + "<folder name='"
                + foldername
                + "' l='"
                + inbox.getId()
                + "'/>"
                + "</CreateFolderRequest>");

    FolderItem folder = FolderItem.importFromSOAP(ZimbraAccount.AccountA(), foldername);

    // Share it
    ZimbraAccount.AccountA()
        .soapSend(
            "<FolderActionRequest xmlns='urn:zimbraMail'>"
                + "<action id='"
                + folder.getId()
                + "' op='grant'>"
                + "<grant d='"
                + app.zGetActiveAccount().EmailAddress
                + "' gt='usr' perm='rwidxa'/>"
                + "</action>"
                + "</FolderActionRequest>");

    // Add a message to it
    ZimbraAccount.AccountA()
        .soapSend(
            "<AddMsgRequest xmlns='urn:zimbraMail'>"
                + "<m l='"
                + folder.getId()
                + "' f='u'>"
                + "<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>");

    // Mount it
    app.zGetActiveAccount()
        .soapSend(
            "<CreateMountpointRequest xmlns='urn:zimbraMail'>"
                + "<link l='1' name='"
                + mountpointname
                + "'  rid='"
                + folder.getId()
                + "' zid='"
                + ZimbraAccount.AccountA().ZimbraId
                + "'/>"
                + "</CreateMountpointRequest>");

    FolderMountpointItem mountpoint =
        FolderMountpointItem.importFromSOAP(app.zGetActiveAccount(), mountpointname);

    // Click Get Mail button
    app.zPageMail.zToolbarPressButton(Button.B_GETMAIL);

    // Right click on folder, select "Mark all as read"
    app.zTreeMail.zTreeItem(Action.A_RIGHTCLICK, Button.B_TREE_FOLDER_MARKASREAD, mountpoint);

    // Make sure the folder was created on the server
    MailItem mail = MailItem.importFromSOAP(ZimbraAccount.AccountA(), "subject:(" + subject + ")");
    ZAssert.assertNotNull(mail, "Verify the message exists");
    ZAssert.assertStringDoesNotContain(
        mail.getFlags(), "u", "Verify the mail flags does not contain (u)nread");
  }
Example #27
0
  @Test(
      description = "Upload file through RestUtil - move & verify through GUI",
      groups = {"smoke"})
  public void MoveFile_01() throws HarnessException {
    ZimbraAccount account = app.zGetActiveAccount();

    FolderItem folderItem = FolderItem.importFromSOAP(account, SystemFolder.Briefcase);

    String name = "folder" + ZimbraSeleniumProperties.getUniqueString();

    // Create a subfolder to move the message into i.e. Briefcase/subfolder
    String briefcaseFolderId = folderItem.getId();

    account.soapSend(
        "<CreateFolderRequest xmlns='urn:zimbraMail'>"
            + "<folder name='"
            + name
            + "' l='"
            + briefcaseFolderId
            + "'/>"
            + "</CreateFolderRequest>");

    FolderItem subFolder = FolderItem.importFromSOAP(account, name);

    // refresh briefcase page
    app.zTreeBriefcase.zTreeItem(Action.A_LEFTCLICK, folderItem, true);

    // Click on created subfolder
    GeneralUtility.syncDesktopToZcsWithSoap(app.zGetActiveAccount());
    app.zPageBriefcase.zWaitForDesktopLoadingSpinner(5000);
    app.zPageBriefcase.zListItem(Action.A_LEFTCLICK, subFolder);

    // Create file item
    String filePath = ZimbraSeleniumProperties.getBaseDirectory() + "/data/public/other/putty.log";

    FileItem fileItem = new FileItem(filePath);

    // Upload file to server through RestUtil
    String attachmentId = account.uploadFile(filePath);

    // Save uploaded file to briefcase through SOAP
    account.soapSend(
        "<SaveDocumentRequest xmlns='urn:zimbraMail'>"
            + "<doc l='"
            + folderItem.getId()
            + "'>"
            + "<upload id='"
            + attachmentId
            + "'/>"
            + "</doc>"
            + "</SaveDocumentRequest>");

    // account.soapSelectNode("//mail:SaveDocumentResponse", 1);

    GeneralUtility.syncDesktopToZcsWithSoap(app.zGetActiveAccount());
    app.zPageBriefcase.zWaitForDesktopLoadingSpinner(5000);

    // refresh briefcase page
    app.zTreeBriefcase.zTreeItem(Action.A_LEFTCLICK, folderItem, true);

    // Click on created document
    app.zPageBriefcase.zListItem(Action.A_LEFTCLICK, fileItem);

    // Click on Move selected item icon in toolbar
    DialogMove chooseFolder =
        (DialogMove) app.zPageBriefcase.zToolbarPressButton(Button.B_MOVE, fileItem);

    // Click OK on Confirmation dialog
    chooseFolder.zClickTreeFolder(subFolder);
    chooseFolder.zClickButton(Button.B_OK);

    // refresh briefcase page
    app.zTreeBriefcase.zTreeItem(Action.A_LEFTCLICK, folderItem, false);

    // Verify document was moved from the folder
    ZAssert.assertFalse(
        app.zPageBriefcase.isPresentInListView(fileItem.getName()),
        "Verify document was moved from the folder");

    // click on subfolder in tree view
    app.zTreeBriefcase.zTreeItem(Action.A_LEFTCLICK, subFolder, true);

    // Verify document was moved to the selected folder
    boolean present = app.zPageBriefcase.isPresentInListView(fileItem.getName());

    ZAssert.assertTrue(present, "Verify document was moved to the selected folder");
  }
Example #28
0
  @Test(
      description = "Delete a file from the search results",
      groups = {"smoke"})
  public void DeleteFile_01() throws HarnessException {

    String filename = "filename" + ZimbraSeleniumProperties.getUniqueString() + ".txt";
    String filePath =
        ZimbraSeleniumProperties.getBaseDirectory() + "/data/public/documents/doc01/plaintext.txt";

    // Upload file to server through RestUtil
    String attachmentId = app.zGetActiveAccount().uploadFile(filePath);

    // Save uploaded file through SOAP
    FolderItem briefcaseRootFolder =
        FolderItem.importFromSOAP(app.zGetActiveAccount(), SystemFolder.Briefcase);
    FolderItem trashFolder = FolderItem.importFromSOAP(app.zGetActiveAccount(), SystemFolder.Trash);

    app.zGetActiveAccount()
        .soapSend(
            "<SaveDocumentRequest xmlns='urn:zimbraMail'>"
                + "<doc name='"
                + filename
                + "' l='"
                + briefcaseRootFolder.getId()
                + "'>"
                + "<upload id='"
                + attachmentId
                + "'/>"
                + "</doc>"
                + "</SaveDocumentRequest>");
    String documentId = app.zGetActiveAccount().soapSelectValue("//mail:doc", "id");

    // Sync up
    //		app.zPageOctopus.zToolbarPressButton(Button.B_GETMAIL);

    // Search for the message
    app.zPageSearch.zExecuteSearchQuery(filename);

    // Get all the messages in the view
    // Verify the uploaded file exists
    IOctListViewItem found = null;
    List<IOctListViewItem> items = app.zPageSearch.zGetListViewItems();
    for (IOctListViewItem item : items) {
      if (item.getListViewName().equalsIgnoreCase(filename)) {
        // found it
        found = item;
        break;
      }
    }

    ZAssert.assertNotNull(found, "Verify the item is found in the list after searching");

    // Delete the file
    app.zPageMyFiles.zToolbarPressPulldown(
        Button.B_MY_FILES_LIST_ITEM, Button.O_DELETE, found.getListViewName());

    // Verify the document is shared
    app.zGetActiveAccount()
        .soapSend(
            "<GetItemRequest xmlns='urn:zimbraMail'>"
                + "<item id='"
                + documentId
                + "'/>"
                + "</GetItemRequest>");

    String id =
        app.zGetActiveAccount().soapSelectValue("//mail:doc[@id='" + documentId + "']", "l");

    ZAssert.assertEquals(id, trashFolder.getId(), "Verify the folder is moved to trash");
  }
  @Test(
      description = "Verify Permission Denied on Spam a shared mail (read-only share)",
      groups = {"functional"})
  public void MarkSpamMessage_01() throws HarnessException {
    String foldername = "folder" + ZimbraSeleniumProperties.getUniqueString();
    String subject = "subject" + ZimbraSeleniumProperties.getUniqueString();
    String mountpointname = "mountpoint" + ZimbraSeleniumProperties.getUniqueString();

    FolderItem inbox =
        FolderItem.importFromSOAP(ZimbraAccount.AccountA(), FolderItem.SystemFolder.Inbox);

    // Create a folder to share
    ZimbraAccount.AccountA()
        .soapSend(
            "<CreateFolderRequest xmlns='urn:zimbraMail'>"
                + "<folder name='"
                + foldername
                + "' l='"
                + inbox.getId()
                + "'/>"
                + "</CreateFolderRequest>");

    FolderItem folder = FolderItem.importFromSOAP(ZimbraAccount.AccountA(), foldername);

    // Share it
    ZimbraAccount.AccountA()
        .soapSend(
            "<FolderActionRequest xmlns='urn:zimbraMail'>"
                + "<action id='"
                + folder.getId()
                + "' op='grant'>"
                + "<grant d='"
                + app.zGetActiveAccount().EmailAddress
                + "' gt='usr' perm='r'/>"
                + "</action>"
                + "</FolderActionRequest>");

    // Add a message to it
    ZimbraAccount.AccountA()
        .soapSend(
            "<AddMsgRequest xmlns='urn:zimbraMail'>"
                + "<m l='"
                + folder.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(ZimbraAccount.AccountA(), "subject:(" + subject + ")");

    // Mount it
    app.zGetActiveAccount()
        .soapSend(
            "<CreateMountpointRequest xmlns='urn:zimbraMail'>"
                + "<link l='1' name='"
                + mountpointname
                + "'  rid='"
                + folder.getId()
                + "' zid='"
                + ZimbraAccount.AccountA().ZimbraId
                + "'/>"
                + "</CreateMountpointRequest>");

    FolderMountpointItem mountpoint =
        FolderMountpointItem.importFromSOAP(app.zGetActiveAccount(), mountpointname);

    // Click Get Mail button
    app.zPageMail.zToolbarPressButton(Button.B_GETMAIL);

    // Click on the mountpoint
    app.zTreeMail.zTreeItem(Action.A_LEFTCLICK, mountpoint);

    // Select the item
    app.zPageMail.zListItem(Action.A_LEFTCLICK, mail.dSubject);

    // Verify that the toolbar button is disabled
    String locator = "css=div[id='ztb__TV-main'] div[id='zb__TV-main__SPAM']";

    ZAssert.assertTrue(
        app.zPageMail.sIsElementPresent(locator), "Verify the spam button is present");

    ZAssert.assertTrue(
        app.zPageMail.sIsElementPresent(locator + "[class*='ZDisabled']"),
        "Verify the spam button is disabled");
  }
Example #30
0
  protected AbsPage zTreeItem(Action action, Button option, FolderItem folderItem)
      throws HarnessException {

    AbsPage page = null;
    String actionLocator = null;
    String optionLocator = null;

    if ((action == null) || (option == null) || (folderItem == null)) {
      throw new HarnessException("Must define an action, option, and addressbook");
    }

    logger.info(
        myPageName() + " zTreeItem(" + action + ", " + option + "," + folderItem.getName() + ")");
    tracer.trace(action + " then " + option + " on Folder Item = " + folderItem.getName());

    if (folderItem.getName().equals("USER_ROOT")) {
      actionLocator = "css=div#ztih__main_Contacts__ADDRBOOK_div";
    } else {
      actionLocator = "css=div#zti__main_Contacts__" + folderItem.getId() + "_div";
    }

    if (action == Action.A_RIGHTCLICK) {

      if (option == Button.B_TREE_NEWFOLDER) {

        optionLocator =
            "css=div[id^='ZmActionMenu_contacts_ADDRBOOK'] div[id^='NEW_ADDRBOOK'] td[id$='_title']";
        page =
            new DialogCreateFolder(MyApplication, ((AppAjaxClient) MyApplication).zPageAddressbook);

      } else if (option == Button.B_DELETE) {

        optionLocator =
            "css=div[id^='ZmActionMenu_contacts_ADDRBOOK'] div[id^='DELETE_WITHOUT_SHORTCUT'] td[id$='_title']";
        page = null;

      } else if (option == Button.B_RENAME) {

        optionLocator =
            "css=div[id^='ZmActionMenu_contacts_ADDRBOOK'] div[id^='RENAME_FOLDER'] td[id$='_title']";
        page =
            new DialogRenameFolder(MyApplication, ((AppAjaxClient) MyApplication).zPageAddressbook);

      } else if (option == Button.B_TREE_EDIT) {

        optionLocator =
            "css=div[id^='ZmActionMenu_contacts_ADDRBOOK'] div[id^='EDIT_PROPS'] td[id$='_title']";
        page =
            new DialogEditFolder(MyApplication, ((AppAjaxClient) MyApplication).zPageAddressbook);

      } else if (option == Button.B_TREE_FOLDER_EMPTY) {

        optionLocator =
            "css=div[id^='ZmActionMenu_contacts_ADDRBOOK'] div[id^='EMPTY_FOLDER'] td[id$='_title']";
        page =
            new DialogWarning(
                DialogWarning.DialogWarningID.EmptyFolderWarningMessage,
                MyApplication,
                ((AppAjaxClient) MyApplication).zPageAddressbook);

      } else if (option == Button.B_SHARE) {

        optionLocator =
            "css=div[id='ZmActionMenu_contacts_ADDRBOOK'] div[id='SHARE_ADDRBOOK'] td[id$='_title']";
        page = new DialogShare(MyApplication, ((AppAjaxClient) MyApplication).zPageAddressbook);

      } else {
        throw new HarnessException("implement action:" + action + " option:" + option);
      }

      if (actionLocator != null) {

        zRightClickAt(actionLocator, "0,0");
        zWaitForBusyOverlay();
      }

      if (optionLocator != null) {

        zClickAt(optionLocator, "0,0");
        zWaitForBusyOverlay();
      }

      if (page != null) {
        page.zWaitForActive();
      }

      return page;

    } else if (action == Action.A_LEFTCLICK) {

      if (option == Button.B_TREE_NEWFOLDER) {

        zClickAt("css=div[class^=ImgNewContactsFolder][class*=ZWidget]", "0,0");
        page =
            new DialogCreateFolder(MyApplication, ((AppAjaxClient) MyApplication).zPageAddressbook);

      } else {
        throw new HarnessException("implement action:" + action + " option:" + option);
      }

    } else {
      throw new HarnessException("implement action:" + action + " option:" + option);
    }

    if (page != null) {
      page.zWaitForActive();
    }

    return page;
  }