63 lines
2.0 KiB
Python
63 lines
2.0 KiB
Python
# Copyright (c) 2015, Menno Smits
|
|
# Released subject to the New BSD License
|
|
# Please see http://en.wikipedia.org/wiki/BSD_licenses
|
|
|
|
from __future__ import unicode_literals
|
|
|
|
from mock import Mock
|
|
|
|
from .imapclient_test import IMAPClientTest
|
|
|
|
|
|
class TestFolderStatus(IMAPClientTest):
|
|
|
|
def test_basic(self):
|
|
self.client._imap.status.return_value = (
|
|
'OK',
|
|
[b'foo (MESSAGES 3 RECENT 0 UIDNEXT 4 UIDVALIDITY 1435636895 UNSEEN 0)']
|
|
)
|
|
|
|
out = self.client.folder_status('foo')
|
|
|
|
self.client._imap.status.assert_called_once_with(
|
|
b'"foo"',
|
|
'(MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN)'
|
|
)
|
|
self.assertDictEqual(out, {
|
|
b'MESSAGES': 3,
|
|
b'RECENT': 0,
|
|
b'UIDNEXT': 4,
|
|
b'UIDVALIDITY': 1435636895,
|
|
b'UNSEEN': 0
|
|
})
|
|
|
|
def test_literal(self):
|
|
self.client._imap.status.return_value = (
|
|
'OK',
|
|
[(b'{3}', b'foo'), b' (UIDNEXT 4)']
|
|
)
|
|
|
|
out = self.client.folder_status('foo', ['UIDNEXT'])
|
|
|
|
self.client._imap.status.assert_called_once_with(b'"foo"', '(UIDNEXT)')
|
|
self.assertDictEqual(out, {b'UIDNEXT': 4})
|
|
|
|
def test_extra_response(self):
|
|
# In production, we've seen folder names containing spaces come back
|
|
# like this and be broken into two components in the tuple.
|
|
server_response = [b"My files (UIDNEXT 24369)"]
|
|
mock = Mock(return_value=server_response)
|
|
self.client._command_and_check = mock
|
|
|
|
resp = self.client.folder_status('My files', ['UIDNEXT'])
|
|
self.assertEqual(resp, {b'UIDNEXT': 24369})
|
|
|
|
# We've also seen the response contain mailboxes we didn't
|
|
# ask for. In all known cases, the desired mailbox is last.
|
|
server_response = [b"sent (UIDNEXT 123)\nINBOX (UIDNEXT 24369)"]
|
|
mock = Mock(return_value=server_response)
|
|
self.client._command_and_check = mock
|
|
|
|
resp = self.client.folder_status('INBOX', ['UIDNEXT'])
|
|
self.assertEqual(resp, {b'UIDNEXT': 24369})
|