/** * 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); }
/** * Set up basic quick commands for all combinations * * @throws HarnessException */ @Bugs(ids = "71389") // Hold off on GUI implementation of Quick Commands in 8.X // @BeforeClass( groups = { "always" } ) public void addQuickCommands() throws HarnessException { logger.info("addQuickCommands: start"); // Create a quick command in the user preferences ZimbraAccount.AccountZWC() .soapSend( "<ModifyPrefsRequest xmlns='urn:zimbraAccount'>" + "<pref name='zimbraPrefQuickCommand'>" + this.getQuickCommand01().toString() + "</pref>" + "<pref name='zimbraPrefQuickCommand'>" + this.getQuickCommand02().toString() + "</pref>" + "<pref name='zimbraPrefQuickCommand'>" + this.getQuickCommand03().toString() + "</pref>" + "</ModifyPrefsRequest>"); // Re-login to pick up the new preferences super.startingPage.zRefresh(); // The AjaxCommonTest.commonTestBeforeMethod() method will log into the client logger.info("addQuickCommands: finish"); }
/** * Create an all-day appointment on the server * * @param account The appointment organizer * @param date The appointment start date * @param duration The appointment duration (in days) * @param subject The appointment subject * @param content The appointment text content * @param location The appointment location (null if none) * @param attendees A list of attendees (null for none) * @return * @throws HarnessException */ public static AppointmentItem createAppointmentAllDay( ZimbraAccount account, Calendar date, int duration, String subject, String content, String location, List<ZimbraAccount> attendees) throws HarnessException { // If location is null, don't specify the loc attribute String loc = (location == null ? "" : "loc='" + location + "'"); // Convert the calendar to a ZDate ZDate start = new ZDate( date.get(Calendar.YEAR), date.get(Calendar.MONTH) + 1, date.get(Calendar.DAY_OF_MONTH), 12, 0, 0); account.soapSend( "<CreateAppointmentRequest xmlns='urn:zimbraMail'>" + "<m l='10'>" + "<inv>" + "<comp allDay='1' name='" + subject + "' " + loc + " draft='0' status='CONF' class='PUB' transp='O' fb='F'>" + "<s d='" + start.toYYYYMMDD() + "'/>" + "<e d='" + start.addDays(duration > 0 ? duration - 1 : 0).toYYYYMMDD() + "'/>" + "<or a='" + account.EmailAddress + "'/>" + "</comp>" + "</inv>" + "<su>" + subject + "</su>" + "<mp ct='text/plain'>" + "<content>" + content + "</content>" + "</mp>" + "</m>" + "</CreateAppointmentRequest>"); AppointmentItem result = AppointmentItem.importFromSOAP( account, "subject:(" + subject + ")", start.addDays(-7), start.addDays(7)); return (result); }
/** * Get an AppointmentItem using soap * * @param account * @param query * @param start * @param end * @return * @throws HarnessException */ public static AppointmentItem importFromSOAP( ZimbraAccount account, String query, ZDate start, ZDate end) throws HarnessException { try { account.soapSend( "<SearchRequest xmlns='urn:zimbraMail' types='appointment' calExpandInstStart='" + start.toMillis() + "' calExpandInstEnd='" + end.toMillis() + "'>" + "<query>" + query + "</query>" + "</SearchRequest>"); Element[] results = account.soapSelectNodes("//mail:SearchResponse/mail:appt"); if (results.length != 1) // throw new HarnessException("Query should return 1 result, not "+ results.length); return null; String id = account.soapSelectValue("//mail:appt", "id"); account.soapSend( "<GetAppointmentRequest xmlns='urn:zimbraMail' id='" + id + "' includeContent='1'>" + "</GetAppointmentRequest>"); Element getAppointmentResponse = account.soapSelectNode("//mail:GetAppointmentResponse", 1); // Using the response, create this item return (importFromSOAP(getAppointmentResponse)); } catch (Exception e) { throw new HarnessException( "Unable to import using SOAP query(" + query + ") and account(" + account.EmailAddress + ")", e); } }
public static TaskItem importFromSOAP(ZimbraAccount account, String query) throws HarnessException { try { account.soapSend( "<SearchRequest xmlns='urn:zimbraMail' types='task' >" + "<query>" + query + "</query>" + "</SearchRequest>"); Element[] results = account.soapSelectNodes("//mail:SearchResponse/mail:task"); if (results.length != 1) throw new HarnessException("Query should return 1 result, not " + results.length); String invId = account.soapSelectValue("//mail:SearchResponse/mail:task", "invId"); account.soapSend( "<GetMsgRequest xmlns='urn:zimbraMail'>" + "<m id='" + invId + "' />" + "</GetMsgRequest>"); Element getMsgResponse = account.soapSelectNode("//mail:GetMsgResponse", 1); // Using the response, create this item return (importFromSOAP(getMsgResponse)); } catch (Exception e) { throw new HarnessException( "Unable to import using SOAP query(" + query + ") and account(" + account.EmailAddress + ")", e); } }
/** * Create a single-day appointment on the server * * @param account Appointment Organizer * @param start Start time of the appointment, which will be rounded to the nearest hour * @param duration Duration of the appointment, in minutes * @param timezone Timezone of the appointment (null if default) * @param subject Subject of the appointment * @param content Content of the appointment (text) * @param location Location of the appointment (null if none) * @param attendees List of attendees for the appointment * @return * @throws HarnessException */ public static AppointmentItem createAppointmentSingleDay( ZimbraAccount account, Calendar start, int duration, TimeZone tz, String subject, String content, String location, List<ZimbraAccount> attendees) throws HarnessException { // If location is null, don't specify the loc attribute String loc = (location == null ? "" : "loc='" + location + "'"); // TODO: determine the timezone String timezoneString = ZTimeZone.TimeZoneEST.getID(); // Convert the calendar to a ZDate ZDate beginning = new ZDate( start.get(Calendar.YEAR), start.get(Calendar.MONTH) + 1, start.get(Calendar.DAY_OF_MONTH), start.get(Calendar.HOUR_OF_DAY), 0, 0); ZDate ending = beginning.addMinutes(duration); account.soapSend( "<CreateAppointmentRequest xmlns='urn:zimbraMail'>" + "<m l='10'>" + "<inv>" + "<comp name='" + subject + "' " + loc + " draft='0' status='CONF' class='PUB' transp='O' fb='B'>" + "<s d='" + beginning.toTimeZone(timezoneString).toYYYYMMDDTHHMMSS() + "' tz='" + timezoneString + "'/>" + "<e d='" + ending.toTimeZone(timezoneString).toYYYYMMDDTHHMMSS() + "' tz='" + timezoneString + "'/>" + "<or a='" + account.EmailAddress + "'/>" + "</comp>" + "</inv>" + "<su>" + subject + "</su>" + "<mp ct='text/plain'>" + "<content>" + content + "</content>" + "</mp>" + "</m>" + "</CreateAppointmentRequest>"); AppointmentItem result = AppointmentItem.importFromSOAP( account, "subject:(" + subject + ")", beginning.addDays(-7), beginning.addDays(7)); return (result); }