Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion test/common/IMAP.py
Original file line number Diff line number Diff line change
Expand Up @@ -379,12 +379,15 @@ def delete_messages(self, msg_ids):
"""
Mark the given message(s) as deleted (in the currently selected mailbox).
"""
if isinstance(msg_ids, str):
msg_ids = [msg_ids]
for msg in msg_ids:
log.debug(f'marking message {msg} as deleted')
result, data = self.connection.store(msg, '+FLAGS', '\\Deleted')
log.debug(f'{result}, {data}')
assert result == RESULT_OK, 'expected to be able to mark message as deleted'
assert MSG_DELETED_FLAG in data[0], 'expected deleted flag to have been added'
msg_flags = self.fetch_message_flags(msg)
assert MSG_DELETED_FLAG in msg_flags[0], 'expected deleted flag to have been added'

def permanently_delete_msgs(self):
"""
Expand Down
28 changes: 18 additions & 10 deletions test/common/JMAP.py
Original file line number Diff line number Diff line change
Expand Up @@ -351,17 +351,17 @@ def delete_mailbox_by_id(self, mailbox_id):
log.debug(f"error deleting mailbox with id '{mailbox_id}': {result}")
return result

def query_email(self, filter=None, limit=None):
def query_email(self, filter=None, limit=None, collapse_threads=True):
"""
Perform an email query using the provided filter, and return the found email ids.
"""
method = EmailQuery(
collapse_threads=True,
collapse_threads=collapse_threads,
filter=filter,
limit=limit,
)

log.debug(f'querying email with filter: {filter} and limit: {limit}')
log.debug(f'querying email with filter: {filter}, limit: {limit}, collapse_threads: {collapse_threads}')

try:
result = self.client.request(method)
Expand Down Expand Up @@ -586,25 +586,33 @@ def wait_for_message_to_arrive(self, subject):
Check the inbox for a message to arrive with the given subject. If the message hasn't arrived yet wait
for it; return the id of the message after it has arrived (or -1 if it never arrived).
"""
max_checks = 60
max_wait_seconds = 7 * 60
wait_seconds = 5
max_checks = (max_wait_seconds // wait_seconds) + 1
arrived_msg_id = 0

mailbox_search = self.get_mailbox_by_name('Inbox')
assert mailbox_search, 'expected to get the inbox mailbox'
inbox_id = mailbox_search[0].id
assert inbox_id, 'expected to get the inbox mailbox id'

for checks in range(1, max_checks + 1):
if checks > 1:
time.sleep(wait_seconds)

log.debug(
f'waiting {wait_seconds} seconds for message to arrive in test_acct_1 inbox '
f'(check {checks} of {max_checks})'
f'checking for message to arrive in {self.username.split("@")[0]} inbox {inbox_id} '
f'(check {checks} of {max_checks}, timeout {max_wait_seconds} seconds)'
)
time.sleep(wait_seconds)

search_filter = {
'inMailbox': 'a',
'inMailbox': inbox_id,
'subject': subject,
}

found_email_ids = self.query_email(filter=search_filter)
found_email_ids = self.query_email(filter=search_filter, collapse_threads=False)

if len(found_email_ids) == 1:
if found_email_ids:
arrived_msg_id = found_email_ids[0]
break

Expand Down
4 changes: 2 additions & 2 deletions test/integration/imap/test_messaging.py
Original file line number Diff line number Diff line change
Expand Up @@ -284,7 +284,7 @@ def test_delete_message(self, imap):
msg_subject = imap.fetch_message_details(test_msg)['Subject']
log.debug(f'message to be deleted has this subject: {msg_subject}')

imap.delete_messages(test_msg)
imap.delete_messages([test_msg])

# search for deleted message and verify still there; flag was already checked in delete_messages above
found_msg = imap.search_messages('SUBJECT', msg_subject)
Expand All @@ -300,7 +300,7 @@ def test_expunge_message(self, imap):
msg_subject = imap.fetch_message_details(test_msg)['Subject']
log.debug(f'message to be deleted has this subject: {msg_subject}')

imap.delete_messages(test_msg)
imap.delete_messages([test_msg])

# search for deleted message and verify still there; flag was already checked in delete_messages above
found_msg = imap.search_messages('SUBJECT', msg_subject)
Expand Down
Loading