com.atlassian.jira.webtests
Class EmailFuncTestCase

java.lang.Object
  extended by junit.framework.Assert
      extended by junit.framework.TestCase
          extended by com.atlassian.jira.functest.framework.FuncTestCase
              extended by com.atlassian.jira.webtests.EmailFuncTestCase
All Implemented Interfaces:
FunctTestConstants, com.atlassian.jira.testkit.client.log.FuncTestLogger, EnvironmentAware, junit.framework.Test
Direct Known Subclasses:
AbstractSubscriptionEmailTest, TestAddUser, TestBulkDeleteIssuesNotifications, TestBulkHeaders, TestBulkWorkflowTransitionNotification, TestCurrentAssigneeNotifications, TestCustomFieldNotifications, TestForgotLoginDetails, TestHandlers, TestIssueDeleteNotifications, TestIssueEmailSubject, TestIssueNotifications, TestIssueResourceNotify, TestMailImageAttachments, TestMentions, TestMoveSubTaskEnterprise, TestNonEnglishNotifications, TestNotificationEmails, TestOutgoingMailSettings, TestShareEmails, TestShareResource, TestUserSignup, TestXsrfOptionsAndSettings

public class EmailFuncTestCase
extends FuncTestCase
implements FunctTestConstants

This class extends FuncTestCase by adding methods to test emails being sent from JIRA.


Nested Class Summary
protected static class EmailFuncTestCase.MailBox
           
 
Field Summary
static String DEFAULT_FROM_ADDRESS
           
static String DEFAULT_SUBJECT_PREFIX
           
static String HTML_FORMAT_REGEX
           
protected  MailService mailService
           
static String newline
           
 
Fields inherited from class com.atlassian.jira.functest.framework.FuncTestCase
administration, assertions, backdoor, environmentData, form, funcTestHelperFactory, issueTableAssertions, locator, log, navigation, oldway_consider_porting, page, parse, tester, text
 
Fields inherited from interface com.atlassian.jira.functest.framework.FunctTestConstants
ADMIN_EMAIL, ADMIN_FULLNAME, ADMIN_PASSWORD, ADMIN_USERNAME, ADMINISTER, AFFECTS_VERSIONS_FIELD_ID, ANYONE, ASSIGN_FIELD_SCREEN, ASSIGN_FIELD_SCREEN_NAME, ASSIGN_ISSUE, ASSIGNABLE_USER, ASSIGNEE_FIELD_ID, ATTACHMENT_FIELD_ID, BOB_EMAIL, BOB_FULLNAME, BOB_PASSWORD, BOB_USERNAME, BROWSE, BUILT_IN_CUSTOM_FIELD_KEY, BULK_CHANGE, BUTTON_CANCEL, BUTTON_CONFIRM, BUTTON_NAME_NEXT, BUTTON_NEXT, CHANGE_HISTORY, CLONERS_INWARD_LINK_NAME, CLONERS_LINK_TYPE_NAME, CLONERS_OUTWARD_LINK_NAME, CLOSE_ISSUE, COMMENT_DELETE_ALL, COMMENT_DELETE_OWN, COMMENT_EDIT_ALL, COMMENT_EDIT_OWN, COMMENT_ISSUE, COMPONENT_NAME_FOUR, COMPONENT_NAME_ONE, COMPONENT_NAME_THREE, COMPONENT_NAME_TWO, COMPONENTS_FIELD_ID, CREATE_ATTACHMENT, CREATE_ISSUE, CREATE_ISSUE_OPERATION_SCREEN, CREATE_SHARED_OBJECTS, CURRENT_USER, CUSTOM_FIELD_CASCADING_SELECT_SEARCHER, CUSTOM_FIELD_CHECKBOX_SEARCHER, CUSTOM_FIELD_CONFIGURATION, CUSTOM_FIELD_DATE_RANGE, CUSTOM_FIELD_EXACT_NUMBER, CUSTOM_FIELD_EXACT_TEXT_SEARCHER, CUSTOM_FIELD_GROUP_PICKER_SEARCHER, CUSTOM_FIELD_LABEL_SEARCHER, CUSTOM_FIELD_MULTI_SELECT_SEARCHER, CUSTOM_FIELD_NUMBER_RANGE, CUSTOM_FIELD_PREFIX, CUSTOM_FIELD_PROJECT_SEARCHER, CUSTOM_FIELD_RADIO_SEARCHER, CUSTOM_FIELD_SELECT_SEARCHER, CUSTOM_FIELD_TEXT_SEARCHER, CUSTOM_FIELD_TYPE_CASCADINGSELECT, CUSTOM_FIELD_TYPE_CHECKBOX, CUSTOM_FIELD_TYPE_DATEPICKER, CUSTOM_FIELD_TYPE_DATETIME, CUSTOM_FIELD_TYPE_FLOAT, CUSTOM_FIELD_TYPE_GROUPPICKER, CUSTOM_FIELD_TYPE_LABELS, CUSTOM_FIELD_TYPE_MULTICHECKBOXES, CUSTOM_FIELD_TYPE_MULTIGROUPPICKER, CUSTOM_FIELD_TYPE_MULTISELECT, CUSTOM_FIELD_TYPE_MULTIUSERPICKER, CUSTOM_FIELD_TYPE_PROJECT, CUSTOM_FIELD_TYPE_RADIO, CUSTOM_FIELD_TYPE_SELECT, CUSTOM_FIELD_TYPE_TEXTFIELD, CUSTOM_FIELD_TYPE_URL, CUSTOM_FIELD_TYPE_USERPICKER, CUSTOM_FIELD_TYPE_VERSION, CUSTOM_FIELD_USER_PICKER_GROUP_SEARCHER, CUSTOM_FIELD_USER_PICKER_SEARCHER, CUSTOM_FIELD_VERSION_SEARCHER, CUSTOM_SUB_TASK_SUMMARY, CUSTOM_SUB_TASK_TYPE_DESCRIPTION, CUSTOM_SUB_TASK_TYPE_NAME, DEFAULT_ASSIGNEE_ERROR_MESSAGE, DEFAULT_FIELD_CONFIGURATION, DEFAULT_FIELD_SCREEN_NAME, DEFAULT_ISSUE_TYPE_SCREEN_SCHEME, DEFAULT_OPERATION_SCREEN, DEFAULT_PERM_SCHEME, DEFAULT_PERM_SCHEME_ID, DEFAULT_SCREEN_SCHEME, DEFAULT_TEXT_RENDERER, DELETE_ISSUE, DUE_DATE_FIELD_ID, EDIT_ISSUE, EDIT_ISSUE_OPERATION_SCREEN, EVENT_TYPE_ACTIVE_STATUS, EVENT_TYPE_INACTIVE_STATUS, FIELD_ASSIGNEE, FIELD_COMMENT, FIELD_COMPONENTS, FIELD_FIX_VERSIONS, FIELD_OPERATION, FIELD_PRIORITY, FIELD_SCHEME_DESC, FIELD_SCHEME_NAME, FIELD_TABLE_ID, FIELD_VERSIONS, FIELD_WORKFLOW, FIX_VERSIONS_FIELD_ID, FORMAT_DAYS, FORMAT_HOURS, FORMAT_PRETTY, FRED_EMAIL, FRED_FULLNAME, FRED_PASSWORD, FRED_USERNAME, FS, FUNC_TEST_PLUGIN_REST_PATH, GLOBAL_ADMIN, HTM, ISSUE_ALL, ISSUE_BUG, ISSUE_IMAGE_BUG, ISSUE_IMAGE_GENERIC, ISSUE_IMAGE_IMPROVEMENT, ISSUE_IMAGE_NEWFEATURE, ISSUE_IMAGE_SUB_TASK, ISSUE_IMAGE_TASK, ISSUE_IMPROVEMENT, ISSUE_NEWFEATURE, ISSUE_TAB_ALL, ISSUE_TAB_CHANGE_HISTORY, ISSUE_TAB_COMMENTS, ISSUE_TAB_WORK_LOG, ISSUE_TASK, ISSUE_TYPE_ALL, ISSUE_TYPE_ALL_SUB_TASK, ISSUE_TYPE_ANY, ISSUE_TYPE_BUG, ISSUE_TYPE_IMPROVEMENT, ISSUE_TYPE_NEWFEATURE, ISSUE_TYPE_SUB_TASK, ISSUE_TYPE_TASK, ISSUETABLE_EDIT_ROW, ISSUETABLE_HEADER_ROW, ISSUETABLE_ID, JIRA_ADMIN_GROUP, JIRA_ADMIN_ROLE, JIRA_ADMIN_ROLE_ID, JIRA_DEV_GROUP, JIRA_DEV_ROLE, JIRA_DEV_ROLE_ID, JIRA_FORM_NAME, JIRA_USERS_GROUP, JIRA_USERS_ROLE, JIRA_USERS_ROLE_ID, LABEL_ISSUE_NAVIGATOR, LINK_ASSIGN_ISSUE, LINK_BULK_CHANGE_ALL, LINK_BULK_CHANGE_CURR_PG, LINK_CLONE_ISSUE, LINK_DELETE_ISSUE, LINK_EDIT_ISSUE, LINK_ISSUE, LINK_NEXT_PG, MANAGE_GROUP_FILTER_SUBSCRIPTIONS, MANAGE_WATCHER_LIST, minorPriority, MODIFY_REPORTER, MOVE_DOWN, MOVE_ISSUE, MOVE_TO_FIRST, MOVE_TO_LAST, MOVE_UP, PERM_SCHEME_DESC, PERM_SCHEME_NAME, PRIORITY_BLOCKER, PRIORITY_CRITICAL, PRIORITY_FIELD_ID, PRIORITY_IMAGE_BLOCKER, PRIORITY_IMAGE_CRITICAL, PRIORITY_IMAGE_MAJOR, PRIORITY_IMAGE_MINOR, PRIORITY_IMAGE_TRIVIAL, PRIORITY_MAJOR, PRIORITY_MINOR, PRIORITY_TRIVIAL, PROJECT_ADMIN, PROJECT_HOMOSAP, PROJECT_HOMOSAP_KEY, PROJECT_MONKEY, PROJECT_MONKEY_KEY, PROJECT_NEO, PROJECT_NEO_KEY, PROJECT_TAB_CHANGE_LOG, PROJECT_TAB_COMPONENTS, PROJECT_TAB_OPEN_ISSUES, PROJECT_TAB_ROAD_MAP, PROJECT_TAB_VERSIONS, RADIO_OPERATION_DELETE, RADIO_OPERATION_EDIT, RADIO_OPERATION_MOVE, RADIO_OPERATION_WORKFLOW, REPORTER_FIELD_ID, RESOLUTION_FIELD_ID, RESOLVE_FIELD_SCREEN_NAME, RESOLVE_ISSUE, SCHEDULE_ISSUE, SCREEN_TABLE_NAME_COLUMN_INDEX, SECURITY_LEVEL_FIELD_ID, SECURITY_LEVEL_ONE_DESC, SECURITY_LEVEL_ONE_NAME, SECURITY_LEVEL_THREE_DESC, SECURITY_LEVEL_THREE_NAME, SECURITY_LEVEL_TWO_DESC, SECURITY_LEVEL_TWO_NAME, SECURITY_SCHEME_DESC, SECURITY_SCHEME_NAME, SET_ISSUE_SECURITY, STATUS_IN_PROGRESS, STATUS_NAME, STATUS_OPEN, STATUS_RESOLVED, STEP_CHOOSE_ISSUES, STEP_CHOOSE_OPERATION, STEP_CONFIRMATION, STEP_NAME, STEP_OPERATION_DETAILS, STEP_PREFIX, SUB_TASK_DEFAULT_TYPE, SUB_TASK_SUMMARY, Summary, SYS_ADMIN_PASSWORD, SYS_ADMIN_USERNAME, SYSTEM_ADMINISTER, TEST_FIELD_SCREEN, TRANSIION_NAME_APPROVE, TRANSIION_NAME_CLOSE, TRANSIION_NAME_REOPEN, TRANSIION_NAME_RESOLVE, TRANSIION_NAME_START_PROGRESS, TRANSIION_NAME_STOP_PROGRESS, UNKNOWN, UNKNOWN_ID, USE, USER_PICKER, VERSION_NAME_FIVE, VERSION_NAME_FOUR, VERSION_NAME_ONE, VERSION_NAME_THREE, VERSION_NAME_TWO, VERSIONS_FIELD_ID, VIEW_ISSUE_OPERATION_SCREEN, VIEW_VERSION_CONTROL, VIEW_VOTERS_AND_WATCHERS, WIKI_STYLE_RENDERER, WORK_ISSUE, WORKFLOW_ADDED, WORKFLOW_COPIED, WORKFLOW_SCHEME
 
Constructor Summary
EmailFuncTestCase()
           
 
Method Summary
protected  void assertCorrectNumberEmailsSent(int numOfMessages)
           
protected  void assertEmailBodyContains(javax.mail.internet.MimeMessage email, String bodySubString)
          Asserts that the given email's body contains the bodySubString using indexOf.
protected  void assertEmailBodyContains(String emailBody, String bodySubString)
          Assert that the String emailBody contains bodySubString
protected  void assertEmailBodyContainsLine(javax.mail.internet.MimeMessage email, String linePattern)
          Asserts that the given email's body contains a line which matches the given string or pattern.
protected  void assertEmailBodyDoesntContain(javax.mail.internet.MimeMessage email, String bodySubString)
          Asserts that the given email's body does not contain the bodySubString using indexOf.
protected  void assertEmailCcEquals(javax.mail.internet.MimeMessage email, Collection expectedCcAddresses)
           
protected  void assertEmailFromEquals(javax.mail.internet.MimeMessage email, String expectedTo)
           
protected  void assertEmailHasNumberOfParts(javax.mail.internet.MimeMessage email, int expectedNumOfParts)
           
protected  void assertEmailSent(String recipient, String subject, String issueComment)
           
protected  void assertEmailSubjectEquals(javax.mail.internet.MimeMessage email, String subject)
           
protected  void assertEmailToEquals(javax.mail.internet.MimeMessage email, Collection expectedToAddresses)
          Assert that the email was addressed to each and everyone of the expectedAddresses
protected  void assertEmailToEquals(javax.mail.internet.MimeMessage email, String expectedTo)
          Assert that the email was addressed to the expectedTo
protected  void assertMessageAndType(javax.mail.internet.MimeMessage message, String expectedComment, boolean html)
           
protected  void assertNotMessageAndType(javax.mail.internet.MimeMessage message, String expectedComment, boolean html)
           
protected  void assertRecipientsHaveMessages(Collection<String> recipients)
           
protected  void configureAndStartMailServers(String from, String prefix, JIRAServerSetup... jiraServerSetups)
           
protected  void configureAndStartSmtpServer()
          Use this method to start a SmtpServer.
protected  void configureAndStartSmtpServer(String from, String prefix)
           
protected  void configureAndStartSmtpServerWithNotify()
           
protected  void flushMailQueueAndWait(int emailCount)
          This is useful for writing func tests that test that the correct notifications are being sent.
protected  void flushMailQueueAndWait(int emailCount, int waitPeriodMillis)
          Does the same as flushMailQueueAndWait(int) but allows the user to specify the wait period in case a lot of e-mails are being sent.
protected  EmailFuncTestCase.MailBox getMailBox(String email)
           
protected  List<javax.mail.internet.MimeMessage> getMessagesForRecipient(String recipient)
           
protected  Collection<String> parseEmailAddresses(String emails)
          Given a comma seperated list of email addresses, returns a collection of the email addresses.
protected  void setupImapService()
           
protected  void setupImapService(String handlerParameters)
           
protected  void setupPopService()
           
protected  void setupPopService(String handlerParameters)
           
protected  void setUpTest()
          Setup for an actual test
protected  void startMailService(JIRAServerSetup... jiraServerSetups)
           
 void tearDownTest()
          individual test tear down
protected  void waitForMail(int emailCount)
           
 
Methods inherited from class com.atlassian.jira.functest.framework.FuncTestCase
builtInCustomFieldKey, getAssertions, getEnvironmentData, getTester, getWebClientListener, isDumpHTML, log, log, runBare, runTest, setEnvironmentData, setUp, setUpHttpUnitOptions, shouldSkipSetup, tearDown, xpath
 
Methods inherited from class junit.framework.TestCase
countTestCases, createResult, getName, run, run, setName, toString
 
Methods inherited from class junit.framework.Assert
assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, fail, fail, failNotEquals, failNotSame, failSame, format
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

DEFAULT_FROM_ADDRESS

public static final String DEFAULT_FROM_ADDRESS
See Also:
Constant Field Values

DEFAULT_SUBJECT_PREFIX

public static final String DEFAULT_SUBJECT_PREFIX
See Also:
Constant Field Values

newline

public static final String newline
See Also:
Constant Field Values

HTML_FORMAT_REGEX

public static final String HTML_FORMAT_REGEX
See Also:
Constant Field Values

mailService

protected MailService mailService
Constructor Detail

EmailFuncTestCase

public EmailFuncTestCase()
Method Detail

setUpTest

protected void setUpTest()
Description copied from class: FuncTestCase
Setup for an actual test

Overrides:
setUpTest in class FuncTestCase

tearDownTest

public void tearDownTest()
Description copied from class: FuncTestCase
individual test tear down

Overrides:
tearDownTest in class FuncTestCase

configureAndStartSmtpServer

protected void configureAndStartSmtpServer()
Use this method to start a SmtpServer.

This will also configure JIRA to use this SMTP server in the admin section. You should call this after your data import. This will override any existing mail servers setup already.

A simple SMTP server proxy is started by first attempting to start on a default port number. If this port is already used we try that port number plus one and so on for 10 attempts. this allows for multiple tests running in Bamboo concurrently, and also for a particular test machine maybe using that port already.

The tearDown() method will close the TCP socket.


configureAndStartSmtpServer

protected void configureAndStartSmtpServer(String from,
                                           String prefix)

configureAndStartMailServers

protected void configureAndStartMailServers(String from,
                                            String prefix,
                                            JIRAServerSetup... jiraServerSetups)

configureAndStartSmtpServerWithNotify

protected void configureAndStartSmtpServerWithNotify()

startMailService

protected void startMailService(JIRAServerSetup... jiraServerSetups)

parseEmailAddresses

protected Collection<String> parseEmailAddresses(String emails)
Given a comma seperated list of email addresses, returns a collection of the email addresses.

Parameters:
emails - comma seperated list of email addresses
Returns:
collection of individual email address

assertRecipientsHaveMessages

protected void assertRecipientsHaveMessages(Collection<String> recipients)
                                     throws javax.mail.MessagingException
Throws:
javax.mail.MessagingException

getMessagesForRecipient

protected List<javax.mail.internet.MimeMessage> getMessagesForRecipient(String recipient)
                                                                 throws javax.mail.MessagingException
Throws:
javax.mail.MessagingException

setupPopService

protected void setupPopService()

setupPopService

protected void setupPopService(String handlerParameters)

setupImapService

protected void setupImapService()

setupImapService

protected void setupImapService(String handlerParameters)

flushMailQueueAndWait

protected void flushMailQueueAndWait(int emailCount)
                              throws InterruptedException
This is useful for writing func tests that test that the correct notifications are being sent. It goest to the admin section mail-queue and flushes the queue and waits till it recieves emailCount number of emails before timeout. If the timeout is reached before the expected number of emails arrives will fail.

Parameters:
emailCount - number of expected emails to wait to receive
Throws:
InterruptedException - if interrupted

flushMailQueueAndWait

protected void flushMailQueueAndWait(int emailCount,
                                     int waitPeriodMillis)
                              throws InterruptedException
Does the same as flushMailQueueAndWait(int) but allows the user to specify the wait period in case a lot of e-mails are being sent.

Parameters:
emailCount - number of expected emails to wait to receive
waitPeriodMillis - The amount of time to wait in millis until the e-mails should have arrived.
Throws:
InterruptedException - if interrupted

waitForMail

protected void waitForMail(int emailCount)
                    throws InterruptedException
Throws:
InterruptedException

assertEmailBodyContains

protected void assertEmailBodyContains(javax.mail.internet.MimeMessage email,
                                       String bodySubString)
                                throws javax.mail.MessagingException,
                                       IOException
Asserts that the given email's body contains the bodySubString using indexOf.

Parameters:
email - email to extract the content body from
bodySubString - expected substring of the email body
Throws:
javax.mail.MessagingException - Message error
IOException - IO error
See Also:
GreenMailUtil.getBody(javax.mail.Part)

assertEmailBodyContainsLine

protected void assertEmailBodyContainsLine(javax.mail.internet.MimeMessage email,
                                           String linePattern)
                                    throws javax.mail.MessagingException,
                                           IOException
Asserts that the given email's body contains a line which matches the given string or pattern.

Parameters:
email - email to extract the content body from
linePattern - expected line or line pattern
Throws:
javax.mail.MessagingException - Message error
IOException - IO error
See Also:
GreenMailUtil.getBody(javax.mail.Part)

assertEmailBodyDoesntContain

protected void assertEmailBodyDoesntContain(javax.mail.internet.MimeMessage email,
                                            String bodySubString)
                                     throws javax.mail.MessagingException,
                                            IOException
Asserts that the given email's body does not contain the bodySubString using indexOf.

Parameters:
email - email to extract the content body from
bodySubString - string to not occur in body
Throws:
javax.mail.MessagingException - Message error
IOException - IO error
See Also:
GreenMailUtil.getBody(javax.mail.Part)

assertEmailBodyContains

protected void assertEmailBodyContains(String emailBody,
                                       String bodySubString)
                                throws javax.mail.MessagingException,
                                       IOException
Assert that the String emailBody contains bodySubString

Parameters:
emailBody - body
bodySubString - expected substring
Throws:
javax.mail.MessagingException - message error
IOException - IO error

assertEmailHasNumberOfParts

protected void assertEmailHasNumberOfParts(javax.mail.internet.MimeMessage email,
                                           int expectedNumOfParts)
                                    throws javax.mail.MessagingException,
                                           IOException
Throws:
javax.mail.MessagingException
IOException

assertEmailToEquals

protected void assertEmailToEquals(javax.mail.internet.MimeMessage email,
                                   String expectedTo)
                            throws javax.mail.MessagingException
Assert that the email was addressed to the expectedTo

Parameters:
email - email to assert the value of the to header
expectedTo - the single or comma seperated list of expected email addresses
Throws:
javax.mail.MessagingException - meesage error
See Also:
assertEmailToEquals(javax.mail.internet.MimeMessage, java.util.Collection)

assertEmailToEquals

protected void assertEmailToEquals(javax.mail.internet.MimeMessage email,
                                   Collection expectedToAddresses)
                            throws javax.mail.MessagingException
Assert that the email was addressed to each and everyone of the expectedAddresses

Parameters:
email - email to assert the value of the to header
expectedToAddresses - collection of expected email addresses
Throws:
javax.mail.MessagingException - meesage error

assertEmailCcEquals

protected void assertEmailCcEquals(javax.mail.internet.MimeMessage email,
                                   Collection expectedCcAddresses)
                            throws javax.mail.MessagingException
Throws:
javax.mail.MessagingException

assertEmailFromEquals

protected void assertEmailFromEquals(javax.mail.internet.MimeMessage email,
                                     String expectedTo)
                              throws javax.mail.MessagingException
Throws:
javax.mail.MessagingException

assertEmailSubjectEquals

protected void assertEmailSubjectEquals(javax.mail.internet.MimeMessage email,
                                        String subject)
                                 throws javax.mail.MessagingException
Throws:
javax.mail.MessagingException

assertEmailSent

protected void assertEmailSent(String recipient,
                               String subject,
                               String issueComment)
                        throws javax.mail.MessagingException,
                               IOException
Throws:
javax.mail.MessagingException
IOException

assertCorrectNumberEmailsSent

protected void assertCorrectNumberEmailsSent(int numOfMessages)
                                      throws javax.mail.MessagingException
Throws:
javax.mail.MessagingException

getMailBox

protected final EmailFuncTestCase.MailBox getMailBox(String email)
                                              throws com.icegreen.greenmail.store.FolderException
Throws:
com.icegreen.greenmail.store.FolderException

assertMessageAndType

protected final void assertMessageAndType(javax.mail.internet.MimeMessage message,
                                          String expectedComment,
                                          boolean html)

assertNotMessageAndType

protected final void assertNotMessageAndType(javax.mail.internet.MimeMessage message,
                                             String expectedComment,
                                             boolean html)


Copyright © 2002-2014 Atlassian. All Rights Reserved.