summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--service/pixelated/adapter/model/mail.py40
-rw-r--r--service/pixelated/adapter/services/mail_service.py5
-rw-r--r--service/pixelated/adapter/soledad/soledad_reader_mixin.py4
-rw-r--r--service/pixelated/config/services.py23
-rw-r--r--service/pixelated/config/site.py6
-rw-r--r--service/test/functional/features/steps/common.py5
-rw-r--r--service/test/functional/features/steps/mail_list.py1
-rw-r--r--service/test/support/integration/app_test_client.py2
-rw-r--r--service/test/unit/adapter/test_mail.py70
-rw-r--r--service/test/unit/adapter/test_mail_service.py32
-rw-r--r--service/test/unit/config/test_site.py6
11 files changed, 80 insertions, 114 deletions
diff --git a/service/pixelated/adapter/model/mail.py b/service/pixelated/adapter/model/mail.py
index 733678db..524ca48d 100644
--- a/service/pixelated/adapter/model/mail.py
+++ b/service/pixelated/adapter/model/mail.py
@@ -275,14 +275,13 @@ class InputMail(Mail):
class PixelatedMail(Mail):
@staticmethod
- def from_soledad(fdoc, hdoc, bdoc, parts=None, soledad_querier=None):
+ def from_soledad(fdoc, hdoc, bdoc, parts=None):
mail = PixelatedMail()
mail.parts = parts
mail.boundary = str(uuid4()).replace('-', '')
mail.bdoc = bdoc
mail.fdoc = fdoc
mail.hdoc = hdoc
- mail.querier = soledad_querier
mail._mime = None
return mail
@@ -436,46 +435,9 @@ class PixelatedMail(Mail):
def flags(self):
return self.fdoc.content['flags']
- def save(self):
- return self.querier.save_mail(self)
-
def set_mailbox(self, mailbox_name):
self.fdoc.content['mbox'] = mailbox_name
- def remove_all_tags(self):
- return self.update_tags(set([]))
-
- @defer.inlineCallbacks
- def update_tags(self, tags):
- yield self._persist_mail_tags(tags)
- defer.returnValue(self.tags)
-
- @defer.inlineCallbacks
- def mark_as_read(self):
- if Status.SEEN in self.flags:
- defer.returnValue(self)
- else:
- self.flags.append(Status.SEEN)
- yield self.save()
- defer.returnValue(self)
-
- @defer.inlineCallbacks
- def mark_as_unread(self):
- if Status.SEEN in self.flags:
- self.flags.remove(Status.SEEN)
- yield self.save()
- defer.returnValue(self)
-
- def mark_as_not_recent(self):
- if Status.RECENT in self.flags:
- self.flags.remove(Status.RECENT)
- self.save()
- return self
-
- def _persist_mail_tags(self, current_tags):
- self.fdoc.content['tags'] = json.dumps(list(current_tags))
- return self.save()
-
def has_tag(self, tag):
return tag in self.tags
diff --git a/service/pixelated/adapter/services/mail_service.py b/service/pixelated/adapter/services/mail_service.py
index ee8e562a..d9cb6517 100644
--- a/service/pixelated/adapter/services/mail_service.py
+++ b/service/pixelated/adapter/services/mail_service.py
@@ -21,9 +21,8 @@ from pixelated.adapter.services.tag_service import extract_reserved_tags
class MailService(object):
- def __init__(self, mail_sender, mail_store, soledad_querier, search_engine):
+ def __init__(self, mail_sender, mail_store, search_engine):
self.mail_store = mail_store
- self.querier = soledad_querier
self.search_engine = search_engine
self.mail_sender = mail_sender
@@ -52,7 +51,7 @@ class MailService(object):
raise ValueError('None of the following words can be used as tags: ' + ' '.join(reserved_words))
new_tags = self._favor_existing_tags_casing(new_tags)
mail = yield self.mail(mail_id)
- mail.tags |= set(new_tags)
+ mail.tags = set(new_tags)
yield self.mail_store.update_mail(mail)
defer.returnValue(mail)
diff --git a/service/pixelated/adapter/soledad/soledad_reader_mixin.py b/service/pixelated/adapter/soledad/soledad_reader_mixin.py
index 58dd9e8e..e86298dd 100644
--- a/service/pixelated/adapter/soledad/soledad_reader_mixin.py
+++ b/service/pixelated/adapter/soledad/soledad_reader_mixin.py
@@ -56,7 +56,7 @@ class SoledadReaderMixin(SoledadDbFacadeMixin, object):
parts = yield self._extract_parts(hdoc.content)
fdocs_hdocs_bdocs_parts.append((fdoc, hdoc, bdoc, parts))
- defer.returnValue([PixelatedMail.from_soledad(*raw_mail, soledad_querier=self) for raw_mail in fdocs_hdocs_bdocs_parts])
+ defer.returnValue([PixelatedMail.from_soledad(*raw_mail) for raw_mail in fdocs_hdocs_bdocs_parts])
def mail_exists(self, ident):
return self.get_flags_by_chash(ident)
@@ -68,7 +68,7 @@ class SoledadReaderMixin(SoledadDbFacadeMixin, object):
bdoc = yield self.get_content_by_phash(hdoc.content['body'])
parts = yield self._extract_parts(hdoc.content)
- mail = PixelatedMail.from_soledad(fdoc, hdoc, bdoc, parts=parts, soledad_querier=self)
+ mail = PixelatedMail.from_soledad(fdoc, hdoc, bdoc, parts=parts)
defer.returnValue(mail)
@defer.inlineCallbacks
diff --git a/service/pixelated/config/services.py b/service/pixelated/config/services.py
index 092d3e9a..0a689a4b 100644
--- a/service/pixelated/config/services.py
+++ b/service/pixelated/config/services.py
@@ -7,6 +7,7 @@ from pixelated.adapter.search import SearchEngine
from pixelated.adapter.services.draft_service import DraftService
from pixelated.adapter.listeners.mailbox_indexer_listener import listen_all_mailboxes
from twisted.internet import defer
+from pixelated.adapter.search.index_storage_key import SearchIndexStorageKey
class Services(object):
@@ -20,9 +21,10 @@ class Services(object):
soledad_querier = SoledadQuerier(soledad=leap_session.soledad_session.soledad)
+ search_index_storage_key = self.setup_search_index_storage_key(leap_session.soledad_session.soledad)
yield self.setup_search_engine(
leap_home,
- soledad_querier)
+ search_index_storage_key)
self.wrap_mail_store_with_indexing_mail_store(leap_session)
@@ -36,21 +38,20 @@ class Services(object):
self.keymanager = leap_session.nicknym
self.draft_service = self.setup_draft_service(leap_session.mail_store)
- yield self.post_setup(soledad_querier, leap_session)
+ yield self.index_all_mails()
def wrap_mail_store_with_indexing_mail_store(self, leap_session):
leap_session.mail_store = SearchableMailStore(leap_session.mail_store, self.search_engine)
@defer.inlineCallbacks
- def post_setup(self, soledad_querier, leap_session):
- self.search_engine.index_mails(
- mails=(yield self.mail_service.all_mails()))
- # yield soledad_querier.mark_all_as_not_recent()
- # yield soledad_querier.remove_duplicates()
+ def index_all_mails(self):
+ all_mails = yield self.mail_service.all_mails()
+ self.search_engine.index_mails(all_mails)
@defer.inlineCallbacks
- def setup_search_engine(self, leap_home, soledad_querier):
- key = yield soledad_querier.get_index_masterkey()
+ def setup_search_engine(self, leap_home, search_index_storage_key):
+ key_unicode = yield search_index_storage_key.get_or_create_key()
+ key = str(key_unicode)
print 'The key len is: %s' % len(key)
search_engine = SearchEngine(key, agent_home=leap_home)
self.search_engine = search_engine
@@ -64,8 +65,10 @@ class Services(object):
return MailService(
pixelated_mail_sender,
leap_session.mail_store,
- soledad_querier,
search_engine)
def setup_draft_service(self, mail_store):
return DraftService(mail_store)
+
+ def setup_search_index_storage_key(self, soledad):
+ return SearchIndexStorageKey(soledad)
diff --git a/service/pixelated/config/site.py b/service/pixelated/config/site.py
index c6e55102..bd149914 100644
--- a/service/pixelated/config/site.py
+++ b/service/pixelated/config/site.py
@@ -2,8 +2,12 @@ from twisted.web.server import Site, Request
class AddCSPHeaderRequest(Request):
+ HEADER_VALUES = "default-src 'self'; style-src 'self' 'unsafe-inline'"
+
def process(self):
- self.setHeader("Content-Security-Policy", "default-src 'self'; style-src 'self' 'unsafe-inline'")
+ self.setHeader("Content-Security-Policy", self.HEADER_VALUES)
+ self.setHeader("X-Content-Security-Policy", self.HEADER_VALUES)
+ self.setHeader("X-Webkit-CSP", self.HEADER_VALUES)
Request.process(self)
diff --git a/service/test/functional/features/steps/common.py b/service/test/functional/features/steps/common.py
index af801902..863fb6ca 100644
--- a/service/test/functional/features/steps/common.py
+++ b/service/test/functional/features/steps/common.py
@@ -45,11 +45,6 @@ def wait_for_user_alert_to_disapear(context, timeout=TIMEOUT_IN_S):
wait_until_element_is_invisible_by_locator(context, (By.ID, 'user-alerts'), timeout)
-def wait_for_user_alert_to_appear_and_disapear(context, timeout=TIMEOUT_IN_S):
- wait_until_element_is_visible_by_locator(context, (By.ID, LOADING), timeout)
- wait_until_element_is_invisible_by_locator(context, (By.ID, LOADING), timeout)
-
-
def wait_until_elements_are_visible_by_locator(context, locator_tuple, timeout=TIMEOUT_IN_S):
spend_time_in_reactor()
wait = WebDriverWait(context.browser, timeout)
diff --git a/service/test/functional/features/steps/mail_list.py b/service/test/functional/features/steps/mail_list.py
index ff7acaf4..9b7bdb4a 100644
--- a/service/test/functional/features/steps/mail_list.py
+++ b/service/test/functional/features/steps/mail_list.py
@@ -102,7 +102,6 @@ def impl(context):
context.current_mail_id = last_email().get_attribute('id')
last_email().find_element_by_tag_name('input').click()
find_element_by_id(context, 'delete-selected').click()
- wait_for_user_alert_to_appear_and_disapear(context)
wait_for_user_alert_to_disapear(context)
spend_time_in_reactor()
assert 0 == len(context.browser.find_element_by_id('mail-list').find_elements_by_tag_name('li'))
diff --git a/service/test/support/integration/app_test_client.py b/service/test/support/integration/app_test_client.py
index e44a8c10..089b62d7 100644
--- a/service/test/support/integration/app_test_client.py
+++ b/service/test/support/integration/app_test_client.py
@@ -175,7 +175,7 @@ class AppTestClient(object):
return mail_sender
def _create_mail_service(self, mail_sender, mail_store, soledad_querier, search_engine):
- mail_service = MailService(mail_sender, mail_store, soledad_querier, search_engine)
+ mail_service = MailService(mail_sender, mail_store, search_engine)
return mail_service
def _generate_soledad_test_folder_name(self, soledad_test_folder='/tmp/soledad-test/test'):
diff --git a/service/test/unit/adapter/test_mail.py b/service/test/unit/adapter/test_mail.py
index 03a37c1f..0c81bda0 100644
--- a/service/test/unit/adapter/test_mail.py
+++ b/service/test/unit/adapter/test_mail.py
@@ -43,7 +43,7 @@ class TestPixelatedMail(unittest.TestCase):
leap_mail = test_helper.leap_mail(headers={'date': leap_mail_date})
- mail = PixelatedMail.from_soledad(*leap_mail, soledad_querier=self.querier)
+ mail = PixelatedMail.from_soledad(*leap_mail)
self.assertEqual(str(mail.headers['Date']), leap_mail_date_in_iso_format)
@@ -54,7 +54,7 @@ class TestPixelatedMail(unittest.TestCase):
leap_mail = test_helper.leap_mail(headers={'received': leap_mail_received_header})
- mail = PixelatedMail.from_soledad(*leap_mail, soledad_querier=self.querier)
+ mail = PixelatedMail.from_soledad(*leap_mail)
self.assertEqual(str(mail.headers['Date']), leap_mail_date_in_iso_format)
@@ -65,7 +65,7 @@ class TestPixelatedMail(unittest.TestCase):
fdoc, hdoc, bdoc = test_helper.leap_mail()
del hdoc.content['date']
- mail = PixelatedMail.from_soledad(fdoc, hdoc, bdoc, soledad_querier=self.querier)
+ mail = PixelatedMail.from_soledad(fdoc, hdoc, bdoc)
self.assertEqual(str(mail.headers['Date']), leap_mail_date_in_iso_format)
@@ -76,7 +76,7 @@ class TestPixelatedMail(unittest.TestCase):
when(pixelated.support.date).iso_now().thenReturn(date_expected)
leap_mail = test_helper.leap_mail(headers={'date': leap_mail_date})
- mail = PixelatedMail.from_soledad(*leap_mail, soledad_querier=self.querier)
+ mail = PixelatedMail.from_soledad(*leap_mail)
self.assertEqual(str(mail.headers['Date']), date_expected)
@@ -87,32 +87,10 @@ class TestPixelatedMail(unittest.TestCase):
when(pixelated.support.date).iso_now().thenReturn(date_expected)
leap_mail = test_helper.leap_mail(headers={'received': leap_mail_received_header})
- mail = PixelatedMail.from_soledad(*leap_mail, soledad_querier=self.querier)
+ mail = PixelatedMail.from_soledad(*leap_mail)
self.assertEqual(mail.headers['Date'], date_expected)
- @defer.inlineCallbacks
- def test_update_tags_return_a_set_with_the_current_tags(self):
- soledad_docs = test_helper.leap_mail(extra_headers={'X-tags': '["custom_1", "custom_2"]'})
- pixelated_mail = PixelatedMail.from_soledad(*soledad_docs, soledad_querier=self.querier)
-
- current_tags = yield pixelated_mail.update_tags({'custom_1', 'custom_3'})
- self.assertEquals({'custom_3', 'custom_1'}, current_tags)
-
- def test_mark_as_read(self):
- mail = PixelatedMail.from_soledad(*test_helper.leap_mail(flags=[]), soledad_querier=self.querier)
-
- mail.mark_as_read()
-
- self.assertEquals(mail.fdoc.content['flags'], ['\\Seen'])
-
- def test_mark_as_not_recent(self):
- mail = PixelatedMail.from_soledad(*test_helper.leap_mail(flags=['\\Recent']), soledad_querier=self.querier)
-
- mail.mark_as_not_recent()
-
- self.assertEquals(mail.fdoc.content['flags'], [])
-
def test_get_for_save_adds_from(self):
InputMail.FROM_EMAIL_ADDRESS = 'me@pixelated.org'
headers = {'Subject': 'The subject',
@@ -133,7 +111,7 @@ class TestPixelatedMail(unittest.TestCase):
InputMail.FROM_EMAIL_ADDRESS = 'me@pixelated.org'
- mail = PixelatedMail.from_soledad(fdoc, hdoc, bdoc, soledad_querier=self.querier)
+ mail = PixelatedMail.from_soledad(fdoc, hdoc, bdoc)
_dict = mail.as_dict()
@@ -173,7 +151,7 @@ class TestPixelatedMail(unittest.TestCase):
InputMail.FROM_EMAIL_ADDRESS = 'me@pixelated.org'
- mail = PixelatedMail.from_soledad(fdoc, hdoc, bdoc, soledad_querier=self.querier)
+ mail = PixelatedMail.from_soledad(fdoc, hdoc, bdoc)
_dict = mail.as_dict()
@@ -188,7 +166,7 @@ class TestPixelatedMail(unittest.TestCase):
parts['alternatives'].append({'content': 'blablabla', 'headers': {'Content-Type': 'text/plain'}})
parts['alternatives'].append({'content': '<p>blablabla</p>', 'headers': {'Content-Type': 'text/html'}})
- mail = PixelatedMail.from_soledad(None, None, self._create_bdoc(raw='blablabla'), parts=parts, soledad_querier=None)
+ mail = PixelatedMail.from_soledad(None, None, self._create_bdoc(raw='blablabla'), parts=parts)
self.assertRegexpMatches(mail.html_body, '^<p>blablabla</p>$')
self.assertRegexpMatches(mail.text_plain_body, '^blablabla$')
@@ -200,7 +178,7 @@ class TestPixelatedMail(unittest.TestCase):
{'content': u'content', 'headers': {u'Content-Type': u'text/plain; charset=us-ascii'}},
{'content': u'', 'headers': {u'Some info': u'info'}}]}
- mail = PixelatedMail.from_soledad(None, None, None, parts=parts, soledad_querier=None)
+ mail = PixelatedMail.from_soledad(None, None, None, parts=parts)
self.assertIsNone(mail.html_body)
def test_percent_character_is_allowed_on_body(self):
@@ -208,7 +186,7 @@ class TestPixelatedMail(unittest.TestCase):
parts['alternatives'].append({'content': '100% happy with percentage symbol', 'headers': {'Content-Type': 'text/plain'}})
parts['alternatives'].append({'content': '<p>100% happy with percentage symbol</p>', 'headers': {'Content-Type': 'text/html'}})
- mail = PixelatedMail.from_soledad(None, None, self._create_bdoc(raw="100% happy with percentage symbol"), parts=parts, soledad_querier=None)
+ mail = PixelatedMail.from_soledad(None, None, self._create_bdoc(raw="100% happy with percentage symbol"), parts=parts)
self.assertRegexpMatches(mail.text_plain_body, '([\s\S]*100%)')
self.assertRegexpMatches(mail.html_body, '([\s\S]*100%)')
@@ -218,7 +196,7 @@ class TestPixelatedMail(unittest.TestCase):
html_headers = {'Content-Type': 'text/html; charset=utf-8', 'Content-Transfer-Encoding': 'quoted-printable'}
parts = {'alternatives': [{'content': 'H=E4llo', 'headers': plain_headers}, {'content': '<p>H=C3=A4llo</p>', 'headers': html_headers}]}
- mail = PixelatedMail.from_soledad(None, None, self._create_bdoc(raw='some raw body'), parts=parts, soledad_querier=None)
+ mail = PixelatedMail.from_soledad(None, None, self._create_bdoc(raw='some raw body'), parts=parts)
self.assertEqual(2, len(mail.alternatives))
self.assertEquals(u'H\xe4llo', mail.text_plain_body)
@@ -229,7 +207,7 @@ class TestPixelatedMail(unittest.TestCase):
html_headers = {'Content-Type': 'text/html;\ncharset=utf-8', 'Content-Transfer-Encoding': 'quoted-printable'}
parts = {'alternatives': [{'content': 'H=E4llo', 'headers': plain_headers}, {'content': '<p>H=C3=A4llo</p>', 'headers': html_headers}]}
- mail = PixelatedMail.from_soledad(None, None, self._create_bdoc(raw='some raw body'), parts=parts, soledad_querier=None)
+ mail = PixelatedMail.from_soledad(None, None, self._create_bdoc(raw='some raw body'), parts=parts)
self.assertEqual(2, len(mail.alternatives))
self.assertEquals(u'H\xe4llo', mail.text_plain_body)
@@ -240,7 +218,7 @@ class TestPixelatedMail(unittest.TestCase):
html_headers = {'Content-Type': 'text/html;\ncharset=utf-8', 'Content-Transfer-Encoding': 'quoted-printable'}
parts = {'alternatives': [{'content': 'H=E4llo', 'headers': plain_headers}, {'content': '<p>H=C3=A4llo</p>', 'headers': html_headers}]}
- mail = PixelatedMail.from_soledad(None, None, self._create_bdoc(raw='some raw body'), parts=parts, soledad_querier=None)
+ mail = PixelatedMail.from_soledad(None, None, self._create_bdoc(raw='some raw body'), parts=parts)
self.assertEquals(u'H=E4llo', mail.text_plain_body)
@@ -249,7 +227,7 @@ class TestPixelatedMail(unittest.TestCase):
html_headers = {'Content-Type': 'text/html;\ncharset=utf-8', 'Content-Transfer-Encoding': 'quoted-printable'}
parts = {'alternatives': [{'content': 'H=E4llo', 'headers': plain_headers}, {'content': '<p>H=C3=A4llo</p>', 'headers': html_headers}]}
- mail = PixelatedMail.from_soledad(None, None, self._create_bdoc(raw='some raw body'), parts=parts, soledad_querier=None)
+ mail = PixelatedMail.from_soledad(None, None, self._create_bdoc(raw='some raw body'), parts=parts)
self.assertEquals(u'H=E4llo', mail.text_plain_body)
self.assertEquals(u'<p>H\xe4llo</p>', mail.html_body)
@@ -262,7 +240,7 @@ class TestPixelatedMail(unittest.TestCase):
fdoc, hdoc, bdoc = test_helper.leap_mail(flags=['\\Recent'],
extra_headers=headers)
- mail = PixelatedMail.from_soledad(fdoc, hdoc, bdoc, soledad_querier=self.querier)
+ mail = PixelatedMail.from_soledad(fdoc, hdoc, bdoc)
for header_label in ['To', 'Cc', 'Bcc']:
for address in mail.headers[header_label]:
@@ -277,7 +255,7 @@ class TestPixelatedMail(unittest.TestCase):
fdoc, hdoc, bdoc = test_helper.leap_mail()
parts = {'alternatives': []}
parts['alternatives'].append({'content': encoded_body, 'headers': {'Content-Transfer-Encoding': 'base64'}})
- mail = PixelatedMail.from_soledad(fdoc, hdoc, bdoc, soledad_querier=self.querier, parts=parts)
+ mail = PixelatedMail.from_soledad(fdoc, hdoc, bdoc, parts=parts)
self.assertEquals(body, mail.text_plain_body)
@@ -288,7 +266,7 @@ class TestPixelatedMail(unittest.TestCase):
fdoc, hdoc, bdoc = test_helper.leap_mail()
parts = {'alternatives': []}
parts['alternatives'].append({'content': encoded_body, 'headers': {'Content-Transfer-Encoding': '7bit'}})
- mail = PixelatedMail.from_soledad(fdoc, hdoc, bdoc, soledad_querier=self.querier, parts=parts)
+ mail = PixelatedMail.from_soledad(fdoc, hdoc, bdoc, parts=parts)
self.assertEquals(body, mail.text_plain_body)
@@ -299,7 +277,7 @@ class TestPixelatedMail(unittest.TestCase):
fdoc, hdoc, bdoc = test_helper.leap_mail()
parts = {'alternatives': []}
parts['alternatives'].append({'content': encoded_body, 'headers': {'Content-Transfer-Encoding': '8bit'}})
- mail = PixelatedMail.from_soledad(fdoc, hdoc, bdoc, soledad_querier=self.querier, parts=parts)
+ mail = PixelatedMail.from_soledad(fdoc, hdoc, bdoc, parts=parts)
self.assertEquals(body, mail.text_plain_body)
@@ -310,10 +288,10 @@ class TestPixelatedMail(unittest.TestCase):
bounced_leap_mail = test_helper.leap_mail()
bounced_leap_mail[1].content = hdoc
- bounced_mail = PixelatedMail.from_soledad(*bounced_leap_mail, soledad_querier=self.querier)
+ bounced_mail = PixelatedMail.from_soledad(*bounced_leap_mail)
not_bounced_leap_mail = test_helper.leap_mail()
- not_bounced_mail = PixelatedMail.from_soledad(*not_bounced_leap_mail, soledad_querier=self.querier)
+ not_bounced_mail = PixelatedMail.from_soledad(*not_bounced_leap_mail)
self.assertTrue(bounced_mail.bounced)
self.assertIn('this_mail_was_bounced@domain.com', bounced_mail.bounced)
@@ -334,10 +312,10 @@ class TestPixelatedMail(unittest.TestCase):
temporary_bounced_leap_mail = test_helper.leap_mail()
temporary_bounced_leap_mail[1].content = hdoc
- temporary_bounced_mail = PixelatedMail.from_soledad(*temporary_bounced_leap_mail, soledad_querier=self.querier)
+ temporary_bounced_mail = PixelatedMail.from_soledad(*temporary_bounced_leap_mail)
not_bounced_leap_mail = test_helper.leap_mail()
- not_bounced_mail = PixelatedMail.from_soledad(*not_bounced_leap_mail, soledad_querier=self.querier)
+ not_bounced_mail = PixelatedMail.from_soledad(*not_bounced_leap_mail)
self.assertFalse(temporary_bounced_mail.bounced)
self.assertFalse(not_bounced_mail.bounced)
@@ -369,7 +347,7 @@ class TestPixelatedMail(unittest.TestCase):
leap_mail = test_helper.leap_mail(extra_headers={'Subject': subject, 'From': email_from, 'To': email_to, 'Cc': email_cc, 'Bcc': email_bcc})
- mail = PixelatedMail.from_soledad(*leap_mail, soledad_querier=self.querier)
+ mail = PixelatedMail.from_soledad(*leap_mail)
self.assertEqual(str(mail.headers['Subject']), 'test encoding St\xc3\xa4ch')
self.assertEqual(str(mail.headers['From']), 'St\xc3\xa4ch <stach@pixelated-project.org>')
@@ -385,7 +363,7 @@ class TestPixelatedMail(unittest.TestCase):
leap_mail = test_helper.leap_mail(extra_headers={'From': leap_mail_from, 'Subject': "some subject", 'To': leap_mail_to})
- mail = PixelatedMail.from_soledad(*leap_mail, soledad_querier=self.querier)
+ mail = PixelatedMail.from_soledad(*leap_mail)
mail.headers['From'].encode('ascii')
self.assertEqual(mail.headers['To'], ['"sme mluds" <lisa5@dev.pixelated-project.org>', '"sme mluds" <lisa5@dev.pixelated-project.org>'])
diff --git a/service/test/unit/adapter/test_mail_service.py b/service/test/unit/adapter/test_mail_service.py
index 30784769..5c035fc8 100644
--- a/service/test/unit/adapter/test_mail_service.py
+++ b/service/test/unit/adapter/test_mail_service.py
@@ -27,7 +27,6 @@ from twisted.internet import defer
class TestMailService(unittest.TestCase):
def setUp(self):
self.drafts = mock()
- self.querier = mock()
self.mail_store = mock()
self.mailboxes = mock()
@@ -38,7 +37,7 @@ class TestMailService(unittest.TestCase):
self.mail_sender = mock()
self.search_engine = mock()
- self.mail_service = MailService(self.mail_sender, self.mail_store, self.querier, self.search_engine)
+ self.mail_service = MailService(self.mail_sender, self.mail_store, self.search_engine)
def tearDown(self):
unstub()
@@ -105,14 +104,26 @@ class TestMailService(unittest.TestCase):
@defer.inlineCallbacks
def test_mark_as_read(self):
- mail = LeapMail('id', 'INBOX')
- when(self.mail_store).get_mail(ANY(), include_body=True).thenReturn(mail)
+ mail = LeapMail(1, 'INBOX')
+ when(self.mail_store).get_mail(1, include_body=True).thenReturn(mail)
yield self.mail_service.mark_as_read(1)
self.assertIn(Status.SEEN, mail.flags)
verify(self.mail_store).update_mail(mail)
@defer.inlineCallbacks
+ def test_mark_as_unread(self):
+ mail = LeapMail(1, 'INBOX')
+ mail.flags.add(Status.SEEN)
+
+ when(self.mail_store).get_mail(1, include_body=True).thenReturn(mail)
+ yield self.mail_service.mark_as_unread(1)
+
+ verify(self.mail_store).update_mail(mail)
+
+ self.assertNotEqual(mail.status, Status.SEEN)
+
+ @defer.inlineCallbacks
def test_delete_mail(self):
mail_to_delete = LeapMail(1, 'INBOX')
when(self.mail_store).get_mail(1, include_body=True).thenReturn(defer.succeed(mail_to_delete))
@@ -123,7 +134,7 @@ class TestMailService(unittest.TestCase):
@defer.inlineCallbacks
def test_recover_mail(self):
- mail_to_recover = PixelatedMail.from_soledad(*leap_mail(), soledad_querier=None)
+ mail_to_recover = PixelatedMail.from_soledad(*leap_mail())
when(self.mail_service).mail(1).thenReturn(mail_to_recover)
when(self.mail_store).move_mail_to_mailbox(1, 'INBOX').thenReturn(mail_to_recover)
@@ -139,3 +150,14 @@ class TestMailService(unittest.TestCase):
attachment = yield self.mail_service.attachment('some attachment id')
self.assertEqual(attachment_dict, attachment)
+
+ @defer.inlineCallbacks
+ def test_update_tags_return_a_set_with_the_current_tags(self):
+ mail = LeapMail(1, 'INBOX', tags={'custom_1', 'custom_2'})
+ when(self.mail_store).get_mail(1, include_body=True).thenReturn(mail)
+ when(self.search_engine).tags(query='', skip_default_tags=True).thenReturn([])
+
+ updated_mail = yield self.mail_service.update_tags(1, {'custom_1', 'custom_3'})
+
+ verify(self.mail_store).update_mail(mail)
+ self.assertEqual({'custom_1', 'custom_3'}, updated_mail.tags)
diff --git a/service/test/unit/config/test_site.py b/service/test/unit/config/test_site.py
index 77d42ed8..1858bfaf 100644
--- a/service/test/unit/config/test_site.py
+++ b/service/test/unit/config/test_site.py
@@ -9,7 +9,11 @@ class TestPixelatedSite(unittest.TestCase):
request = self.create_request()
request.process()
headers = request.headers
- self.assertEqual(headers.get("Content-Security-Policy"), "default-src 'self'; style-src 'self' 'unsafe-inline'")
+
+ header_value = "default-src 'self'; style-src 'self' 'unsafe-inline'"
+ self.assertEqual(headers.get("Content-Security-Policy"), header_value)
+ self.assertEqual(headers.get("X-Content-Security-Policy"), header_value)
+ self.assertEqual(headers.get("X-Webkit-CSP"), header_value)
def create_request(self):
channel = LineReceiver()