summaryrefslogtreecommitdiff
path: root/service/test
diff options
context:
space:
mode:
Diffstat (limited to 'service/test')
-rw-r--r--service/test/functional/features/steps/common.py2
-rw-r--r--service/test/functional/features/steps/mail_list.py10
-rw-r--r--service/test/functional/features/steps/mail_view.py10
-rw-r--r--service/test/functional/features/steps/tag_list.py2
-rw-r--r--service/test/integration/test_incoming_mail.py4
-rw-r--r--service/test/support/integration/app_test_client.py11
-rw-r--r--service/test/unit/adapter/test_mailbox_indexer_listener.py6
-rw-r--r--service/test/unit/bitmask_libraries/test_session.py6
-rw-r--r--service/test/unit/resources/test_logout_resources.py23
-rw-r--r--service/test/unit/resources/test_tags_resource.py36
-rw-r--r--service/test/unit/resources/test_user_settings_resource.py64
11 files changed, 143 insertions, 31 deletions
diff --git a/service/test/functional/features/steps/common.py b/service/test/functional/features/steps/common.py
index 21794eb7..ccad842c 100644
--- a/service/test/functional/features/steps/common.py
+++ b/service/test/functional/features/steps/common.py
@@ -168,7 +168,7 @@ def click_button(context, title, element='button'):
def mail_list_with_subject_exists(context, subject):
- return find_element_by_xpath(context, "//*[@class='subject' and contains(.,'%s')]" % subject)
+ return find_element_by_xpath(context, "//*[@class='mail-list-entry__item-subject' and contains(.,'%s')]" % subject)
def mail_subject(context):
diff --git a/service/test/functional/features/steps/mail_list.py b/service/test/functional/features/steps/mail_list.py
index d19de6cd..82faa7af 100644
--- a/service/test/functional/features/steps/mail_list.py
+++ b/service/test/functional/features/steps/mail_list.py
@@ -32,7 +32,7 @@ def open_current_mail(context):
def get_first_email(context):
- return wait_until_elements_are_visible_by_locator(context, (By.CSS_SELECTOR, '#mail-list li span a'))[0]
+ return wait_until_elements_are_visible_by_locator(context, (By.CSS_SELECTOR, '.mail-list-entry__item'))[0]
@then('I see that mail under the \'{tag}\' tag')
@@ -78,13 +78,13 @@ def impl(context):
@given('I have mails')
@then(u'I have mails')
def impl(context):
- emails = wait_until_elements_are_visible_by_locator(context, (By.CSS_SELECTOR, '#mail-list li span a'))
+ emails = wait_until_elements_are_visible_by_locator(context, (By.CSS_SELECTOR, '.mail-list-entry__item'))
assert len(emails) > 0
@when('I mark the first unread email as read')
def impl(context):
- emails = wait_until_elements_are_visible_by_locator(context, (By.CSS_SELECTOR, '#mail-list li'))
+ emails = wait_until_elements_are_visible_by_locator(context, (By.CSS_SELECTOR, '.mail-list-entry'))
for email in emails:
if 'status-read' not in email.get_attribute('class'):
@@ -98,7 +98,7 @@ def impl(context):
@when('I delete the email')
def impl(context):
def last_email():
- return wait_until_element_is_visible_by_locator(context, (By.CSS_SELECTOR, '#mail-list li'))
+ return wait_until_element_is_visible_by_locator(context, (By.CSS_SELECTOR, '.mail-list-entry'))
mail = last_email()
context.current_mail_id = mail.get_attribute('id')
mail.find_element_by_tag_name('input').click()
@@ -112,7 +112,7 @@ def _wait_for_mail_list_to_be_empty(context):
def mail_list_is_empty(_):
with ImplicitWait(context, timeout=0.1):
try:
- return 0 == len(context.browser.find_elements_by_css_selector('#mail-list li'))
+ return 0 == len(context.browser.find_elements_by_css_selector('.mail-list-entry'))
except TimeoutException:
return False
diff --git a/service/test/functional/features/steps/mail_view.py b/service/test/functional/features/steps/mail_view.py
index 565031b5..2db6dfc5 100644
--- a/service/test/functional/features/steps/mail_view.py
+++ b/service/test/functional/features/steps/mail_view.py
@@ -58,21 +58,13 @@ def impl(context):
click_button(context, 'Send')
-# NOT BEING USED
-@then('I see if the mail has html content')
-def impl(context):
- e = find_element_by_css_selector(context, '#mail-view .bodyArea')
- h2 = e.find_element_by_css_selector("h2[style*='color: #3f4944']")
- assert 'cborim' in h2.text
-
-
@when('I try to delete the first mail')
def impl(context):
context.execute_steps(u"When I open the first mail in the mail list")
find_element_by_css_selector(context, '#mail-view #view-more-actions').click()
context.browser.execute_script("$('#delete-button-top').click();")
- e = find_element_by_css_selector(context, '#user-alerts')
+ e = find_element_by_css_selector(context, '.message-panel__growl--success')
assert 'Your message was moved to trash!' == e.text
diff --git a/service/test/functional/features/steps/tag_list.py b/service/test/functional/features/steps/tag_list.py
index a3315835..8550a886 100644
--- a/service/test/functional/features/steps/tag_list.py
+++ b/service/test/functional/features/steps/tag_list.py
@@ -49,7 +49,7 @@ def impl(context, tag):
e = find_element_by_id(context, 'tag-%s' % tag)
e.click()
- wait_until_element_is_visible_by_locator(context, (By.CSS_SELECTOR, "#mail-list li span a[href*='%s']" % tag), timeout=20)
+ wait_until_element_is_visible_by_locator(context, (By.CSS_SELECTOR, ".mail-list-entry__item[href*='%s']" % tag), timeout=20)
success = True
except TimeoutException:
pass
diff --git a/service/test/integration/test_incoming_mail.py b/service/test/integration/test_incoming_mail.py
index 682ca118..e413d6c1 100644
--- a/service/test/integration/test_incoming_mail.py
+++ b/service/test/integration/test_incoming_mail.py
@@ -25,12 +25,12 @@ class IncomingMailTest(SoledadTestBase):
@defer.inlineCallbacks
def test_message_collection(self):
# given
- mbx = yield self.account.getMailbox('INBOX')
+ mail_collection = yield self.account.get_collection_by_mailbox('INBOX')
input_mail = MailBuilder().build_input_mail()
# when
yield MailboxIndexerListener.listen(self.account, 'INBOX', self.mail_store, self.search_engine)
- yield mbx.addMessage(input_mail.raw, [], notify_just_mdoc=False)
+ yield mail_collection.add_msg(input_mail.raw)
# then
yield self.wait_in_reactor() # event handlers are called async, wait for it
diff --git a/service/test/support/integration/app_test_client.py b/service/test/support/integration/app_test_client.py
index f3ec5d25..95facec0 100644
--- a/service/test/support/integration/app_test_client.py
+++ b/service/test/support/integration/app_test_client.py
@@ -25,7 +25,7 @@ import uuid
import random
-from leap.mail.imap.account import IMAPAccount
+from leap.mail.mail import Account
from leap.soledad.client import Soledad
from mock import Mock
from twisted.internet import reactor, defer
@@ -77,7 +77,7 @@ class AppTestAccount(object):
self.mail_store = SearchableMailStore(LeapMailStore(self.soledad), self.search_engine)
self.attachment_store = LeapAttachmentStore(self.soledad)
- yield self._initialize_imap_account()
+ yield self._initialize_account()
self.draft_service = DraftService(self.mail_store)
self.leap_session = mock()
@@ -110,10 +110,9 @@ class AppTestAccount(object):
soledad_test_folder = os.path.join(self._leap_home, self._uuid)
shutil.rmtree(soledad_test_folder)
- def _initialize_imap_account(self):
- account_ready_cb = defer.Deferred()
- self.account = IMAPAccount(self._user_id, self.soledad, account_ready_cb)
- return account_ready_cb
+ def _initialize_account(self):
+ self.account = Account(self.soledad)
+ return self.account.deferred_initialization
def _create_mail_service(self, mail_sender, mail_store, search_engine, attachment_store):
return MailService(mail_sender, mail_store, search_engine, self._mail_address, attachment_store)
diff --git a/service/test/unit/adapter/test_mailbox_indexer_listener.py b/service/test/unit/adapter/test_mailbox_indexer_listener.py
index c88ba035..c101aa1a 100644
--- a/service/test/unit/adapter/test_mailbox_indexer_listener.py
+++ b/service/test/unit/adapter/test_mailbox_indexer_listener.py
@@ -31,7 +31,7 @@ class MailboxListenerTest(unittest.TestCase):
def test_add_itself_to_mailbox_listeners(self):
self.account.mailboxes = ['INBOX']
mailbox = mock()
- when(self.account).getMailbox('INBOX').thenReturn(mailbox)
+ when(self.account).get_collection_by_mailbox('INBOX').thenReturn(mailbox)
mailbox.listeners = set()
when(mailbox).addListener = lambda x: mailbox.listeners.add(x)
@@ -49,7 +49,7 @@ class MailboxListenerTest(unittest.TestCase):
listener = MailboxIndexerListener('INBOX', self.mail_store, search_engine)
when(self.mail_store).get_mailbox_mail_ids('INBOX').thenReturn({'ident1', 'ident2', 'missing_ident'})
when(self.mail_store).get_mails({'missing_ident'}, include_body=True).thenReturn([mail])
- listener.newMessages(10, 5)
+ listener.notify_new()
verify(self.mail_store, times=1).get_mails({'missing_ident'}, include_body=True)
verify(search_engine).index_mails([mail])
@@ -59,6 +59,6 @@ class MailboxListenerTest(unittest.TestCase):
when(logger).error(ANY()).thenReturn(None)
listener = MailboxIndexerListener('INBOX', self.mail_store, mock())
- yield listener.newMessages(1, 1)
+ yield listener.notify_new()
verify(logger).error(ANY())
diff --git a/service/test/unit/bitmask_libraries/test_session.py b/service/test/unit/bitmask_libraries/test_session.py
index aad2cac2..84f9f023 100644
--- a/service/test/unit/bitmask_libraries/test_session.py
+++ b/service/test/unit/bitmask_libraries/test_session.py
@@ -29,7 +29,7 @@ class SessionTest(AbstractLeapTest):
self.smtp_mock = MagicMock()
@patch('pixelated.bitmask_libraries.session.register')
- @patch('pixelated.bitmask_libraries.session.IMAPAccount')
+ @patch('pixelated.bitmask_libraries.session.Account')
@defer.inlineCallbacks
def test_background_jobs_are_started_during_initial_sync(self, *unused):
mailFetcherMock = MagicMock()
@@ -41,7 +41,7 @@ class SessionTest(AbstractLeapTest):
@patch('pixelated.bitmask_libraries.session.register')
@patch('pixelated.bitmask_libraries.session.unregister')
- @patch('pixelated.bitmask_libraries.session.IMAPAccount')
+ @patch('pixelated.bitmask_libraries.session.Account')
@defer.inlineCallbacks
def test_that_close_stops_background_jobs(self, *unused):
with patch('pixelated.bitmask_libraries.session.reactor.callFromThread', new=_execute_func) as _:
@@ -153,7 +153,7 @@ class SessionTest(AbstractLeapTest):
@patch('pixelated.bitmask_libraries.session.register')
@patch('pixelated.bitmask_libraries.session.unregister')
- @patch('pixelated.bitmask_libraries.session.IMAPAccount')
+ @patch('pixelated.bitmask_libraries.session.Account')
@defer.inlineCallbacks
def test_session_initial_sync_only_triggered_once(self, *unused):
mailFetcherMock = MagicMock()
diff --git a/service/test/unit/resources/test_logout_resources.py b/service/test/unit/resources/test_logout_resources.py
index 312d2ba4..49866057 100644
--- a/service/test/unit/resources/test_logout_resources.py
+++ b/service/test/unit/resources/test_logout_resources.py
@@ -1,12 +1,16 @@
+import logging
+
from mock import patch, MagicMock
-from twisted.trial import unittest
from twisted.internet import defer
+from twisted.trial import unittest
from twisted.web.error import UnsupportedMethod
from twisted.web.test.requesthelper import DummyRequest
from pixelated.resources.logout_resource import LogoutResource
from test.unit.resources import DummySite
+logging.getLogger('pixelated.resources').addHandler(logging.NullHandler())
+
class TestLogoutResource(unittest.TestCase):
def setUp(self):
@@ -40,3 +44,20 @@ class TestLogoutResource(unittest.TestCase):
request.method = 'GET'
self.assertRaises(UnsupportedMethod, self.web.get, request)
+
+ def test_errback_is_called(self):
+ request = DummyRequest(['/logout'])
+ request.method = 'POST'
+
+ session = self.resource.get_session(request)
+ exception = Exception('')
+ session.expire = MagicMock(side_effect=exception)
+
+ d = self.web.get(request)
+
+ def assert_500_when_exception_is_thrown(_):
+ self.assertEqual(500, request.responseCode)
+ self.assertEqual('Something went wrong!', request.written[0])
+
+ d.addCallback(assert_500_when_exception_is_thrown)
+ return d
diff --git a/service/test/unit/resources/test_tags_resource.py b/service/test/unit/resources/test_tags_resource.py
new file mode 100644
index 00000000..684e95f2
--- /dev/null
+++ b/service/test/unit/resources/test_tags_resource.py
@@ -0,0 +1,36 @@
+import logging
+
+from mock import MagicMock
+from twisted.trial import unittest
+from twisted.web.test.requesthelper import DummyRequest
+from pixelated.resources.tags_resource import TagsResource
+from test.unit.resources import DummySite
+
+logging.getLogger('pixelated.resources').addHandler(logging.NullHandler())
+
+
+class TestTagsResource(unittest.TestCase):
+ def setUp(self):
+ self.services_factory = MagicMock()
+ self.resource = TagsResource(self.services_factory)
+
+ def test_errback_is_called(self):
+ exception = Exception('')
+ mock_search_engine = MagicMock()
+ mock_search_engine.tags = MagicMock(side_effect=exception)
+ mock_service = MagicMock()
+ mock_service.search_engine = mock_search_engine
+ self.services_factory.services.return_value = mock_service
+ self.web = DummySite(self.resource)
+
+ request = DummyRequest(['/tags'])
+ request.method = 'GET'
+
+ d = self.web.get(request)
+
+ def assert_500_when_exception_is_thrown(_):
+ self.assertEqual(500, request.responseCode)
+ self.assertEqual('Something went wrong!', request.written[0])
+
+ d.addCallback(assert_500_when_exception_is_thrown)
+ return d
diff --git a/service/test/unit/resources/test_user_settings_resource.py b/service/test/unit/resources/test_user_settings_resource.py
new file mode 100644
index 00000000..d69f4895
--- /dev/null
+++ b/service/test/unit/resources/test_user_settings_resource.py
@@ -0,0 +1,64 @@
+import unittest
+import json
+import ast
+
+from pixelated.application import UserAgentMode
+from pixelated.resources.user_settings_resource import UserSettingsResource, FINGERPRINT_NOT_FOUND
+from mockito import mock, when, any
+from test.unit.resources import DummySite
+from twisted.web.test.requesthelper import DummyRequest
+from leap.keymanager import OpenPGPKey
+from twisted.internet import defer
+from twisted.python.failure import Failure
+
+MAIL_ADDRESS = 'some@key'
+FINGERPRINT = '4-8-12-13-23-42'
+
+
+class TestUserSettingsResource(unittest.TestCase):
+
+ def setUp(self):
+ self.services = mock()
+ self.mail_service = mock()
+ self.mail_service.account_email = MAIL_ADDRESS
+ self.keymanager = mock()
+ self.services_factory = mock()
+ self.services_factory.mode = UserAgentMode(is_single_user=True)
+ self.services.mail_service = self.mail_service
+ self.services.keymanager = self.keymanager
+ self.services_factory._services_by_user = {'someuserid': self.keymanager}
+ self.resource = UserSettingsResource(self.services_factory)
+ when(self.services_factory).services(any()).thenReturn(self.services)
+ self.web = DummySite(self.resource)
+
+ def test_fingerprint_given(self):
+ key = OpenPGPKey(MAIL_ADDRESS)
+ key.fingerprint = FINGERPRINT
+ request = DummyRequest(['/user-settings'])
+ when(self.keymanager).fetch_key(MAIL_ADDRESS).thenReturn(defer.succeed(key))
+
+ d = self.web.get(request)
+
+ def assert_response(_):
+ response = json.loads(request.written[0])
+ self.assertEqual(FINGERPRINT, response['fingerprint'])
+ self.assertEqual(MAIL_ADDRESS, response['account_email'])
+
+ d.addCallback(assert_response)
+ return d
+
+ def test_fingerprint_missing(self):
+ key = OpenPGPKey(MAIL_ADDRESS)
+ key.fingerprint = FINGERPRINT
+ request = DummyRequest(['/user-settings'])
+ when(self.keymanager).fetch_key(MAIL_ADDRESS).thenReturn(defer.fail(Failure))
+
+ d = self.web.get(request)
+
+ def assert_response(_):
+ response = json.loads(request.written[0])
+ self.assertEqual(FINGERPRINT_NOT_FOUND, response['fingerprint'])
+ self.assertEqual(MAIL_ADDRESS, response['account_email'])
+
+ d.addCallback(assert_response)
+ return d