diff options
Diffstat (limited to 'service/test/support')
-rw-r--r-- | service/test/support/integration/app_test_client.py | 71 | ||||
-rw-r--r-- | service/test/support/integration/soledad_test_base.py | 60 | ||||
-rw-r--r-- | service/test/support/test_helper.py | 12 |
3 files changed, 74 insertions, 69 deletions
diff --git a/service/test/support/integration/app_test_client.py b/service/test/support/integration/app_test_client.py index 474e5fd3..5e52732b 100644 --- a/service/test/support/integration/app_test_client.py +++ b/service/test/support/integration/app_test_client.py @@ -35,20 +35,23 @@ from pixelated.adapter.services.draft_service import DraftService from pixelated.adapter.services.mail_service import MailService from pixelated.adapter.services.mailboxes import Mailboxes from pixelated.adapter.soledad.soledad_querier import SoledadQuerier -from pixelated.adapter.services.tag_service import TagService from pixelated.config import App from pixelated.resources.root_resource import RootResource from test.support.integration.model import MailBuilder from test.support.test_helper import request_mock +from test.support.integration.model import ResponseMail -class AppTestClient: +class AppTestClient(object): INDEX_KEY = '\xde3?\x87\xff\xd9\xd3\x14\xf0\xa7>\x1f%C{\x16.\\\xae\x8c\x13\xa7\xfb\x04\xd4]+\x8d_\xed\xd1\x8d\x0bI' \ '\x8a\x0e\xa4tm\xab\xbf\xb4\xa5\x99\x00d\xd5w\x9f\x18\xbc\x1d\xd4_W\xd2\xb6\xe8H\x83\x1b\xd8\x9d\xad' ACCOUNT = 'test' MAIL_ADDRESS = 'test@pixelated.org' def __init__(self): + self.start_client() + + def start_client(self): soledad_test_folder = self._generate_soledad_test_folder_name() SearchEngine.DEFAULT_INDEX_HOME = soledad_test_folder @@ -125,8 +128,9 @@ class AppTestClient: def add_mail_to_inbox(self, input_mail): mail = self.mailboxes.inbox().add(input_mail) - mail.update_tags(input_mail.tags) - self.search_engine.index_mail(mail) + if input_mail.tags: + mail.update_tags(input_mail.tags) + self.search_engine.index_mail(mail) def add_multiple_to_mailbox(self, num, mailbox='', flags=[], tags=[], to='recipient@to.com', cc='recipient@cc.com', bcc='recipient@bcc.com'): mails = [] @@ -134,8 +138,8 @@ class AppTestClient: input_mail = MailBuilder().with_status(flags).with_tags(tags).with_to(to).with_cc(cc).with_bcc(bcc).build_input_mail() mail = self.mailboxes._create_or_get(mailbox).add(input_mail) mails.append(mail) - mail.update_tags(input_mail.tags) - self.search_engine.index_mail(mail) + mail.update_tags(input_mail.tags) if tags else None + self.search_engine.index_mails(mails) if tags else None return mails def _create_soledad_querier(self, soledad, index_key): @@ -149,13 +153,64 @@ class AppTestClient: return mail_sender def _create_mail_service(self, mailboxes, mail_sender, soledad_querier, search_engine): - tag_service = TagService() - mail_service = MailService(mailboxes, mail_sender, tag_service, soledad_querier, search_engine) + mail_service = MailService(mailboxes, mail_sender, soledad_querier, search_engine) return mail_service def _generate_soledad_test_folder_name(self, soledad_test_folder='/tmp/soledad-test/test'): return os.path.join(soledad_test_folder, str(uuid.uuid4())) + def get_mails_by_tag(self, tag, page=1, window=100): + tags = 'tag:%s' % tag + return self.search(tags, page, window) + + def search(self, query, page=1, window=100): + res, req = self.get("/mails", { + 'q': [query], + 'w': [str(window)], + 'p': [str(page)] + }) + return [ResponseMail(m) for m in res['mails']] + + def get_attachment(self, ident, encoding): + res, req = self.get("/attachment/%s" % ident, {'encoding': [encoding]}, as_json=False) + return res + + def put_mail(self, data): + res, req = self.put('/mails', data) + return res, req + + def post_tags(self, mail_ident, tags_json): + res, req = self.post("/mail/%s/tags" % mail_ident, tags_json) + return res + + def get_tags(self, **kwargs): + res, req = self.get('/tags', kwargs) + return res + + def get_mail(self, mail_ident): + res, req = self.get('/mail/%s' % mail_ident) + return res + + def delete_mail(self, mail_ident): + res, req = self.delete("/mail/%s" % mail_ident) + return req + + def delete_mails(self, idents): + res, req = self.post("/mails/delete", json.dumps({'idents': idents})) + return req + + def mark_many_as_unread(self, idents): + res, req = self.post('/mails/unread', json.dumps({'idents': idents})) + return req + + def mark_many_as_read(self, idents): + res, req = self.post('/mails/read', json.dumps({'idents': idents})) + return req + + def get_contacts(self, query): + res, req = self.get('/contacts', get_args={'q': query}) + return res + def initialize_soledad(tempdir): if os.path.isdir(tempdir): diff --git a/service/test/support/integration/soledad_test_base.py b/service/test/support/integration/soledad_test_base.py index 2c8bb023..c49de00a 100644 --- a/service/test/support/integration/soledad_test_base.py +++ b/service/test/support/integration/soledad_test_base.py @@ -14,70 +14,16 @@ # You should have received a copy of the GNU Affero General Public License # along with Pixelated. If not, see <http://www.gnu.org/licenses/>. from twisted.trial import unittest -from pixelated.resources import * from test.support.integration.app_test_client import AppTestClient -from test.support.integration.model import ResponseMail -class SoledadTestBase(unittest.TestCase): +class SoledadTestBase(unittest.TestCase, AppTestClient): # these are so long because our CI is so slow at the moment. DEFERRED_TIMEOUT = 120 DEFERRED_TIMEOUT_LONG = 300 def setUp(self): - self.client = AppTestClient() + self.start_client() def tearDown(self): - self.client.cleanup() - - def get_mails_by_tag(self, tag, page=1, window=100): - tags = 'tag:%s' % tag - return self.search(tags, page, window) - - def search(self, query, page=1, window=100): - res, req = self.client.get("/mails", { - 'q': [query], - 'w': [str(window)], - 'p': [str(page)] - }) - return [ResponseMail(m) for m in res['mails']] - - def get_attachment(self, ident, encoding): - res, req = self.client.get("/attachment/%s" % ident, {'encoding': [encoding]}, as_json=False) - return res - - def put_mail(self, data): - res, req = self.client.put('/mails', data) - return res, req - - def post_tags(self, mail_ident, tags_json): - res, req = self.client.post("/mail/%s/tags" % mail_ident, tags_json) - return res - - def get_tags(self, **kwargs): - res, req = self.client.get('/tags', kwargs) - return res - - def get_mail(self, mail_ident): - res, req = self.client.get('/mail/%s' % mail_ident) - return res - - def delete_mail(self, mail_ident): - res, req = self.client.delete("/mail/%s" % mail_ident) - return req - - def delete_mails(self, idents): - res, req = self.client.post("/mails/delete", json.dumps({'idents': idents})) - return req - - def mark_many_as_unread(self, idents): - res, req = self.client.post('/mails/unread', json.dumps({'idents': idents})) - return req - - def mark_many_as_read(self, idents): - res, req = self.client.post('/mails/read', json.dumps({'idents': idents})) - return req - - def get_contacts(self, query): - res, req = self.client.get('/contacts', get_args={'q': query}) - return res + self.cleanup() diff --git a/service/test/support/test_helper.py b/service/test/support/test_helper.py index 54685008..c37c1408 100644 --- a/service/test/support/test_helper.py +++ b/service/test/support/test_helper.py @@ -15,8 +15,9 @@ # along with Pixelated. If not, see <http://www.gnu.org/licenses/>. from datetime import datetime import io +from twisted.web.test.test_web import DummyRequest -from pixelated.adapter.model.mail import InputMail +from pixelated.adapter.model.mail import InputMail, PixelatedMail LEAP_FLAGS = ['\\Seen', @@ -68,6 +69,12 @@ def leap_mail(uid=0, flags=LEAP_FLAGS, headers=None, extra_headers={}, mbox='INB return (fdoc, hdoc, bdoc) +def pixelated_mail(uid=0, flags=LEAP_FLAGS, headers=None, extra_headers={}, mbox='INBOX', body='body', chash='chash'): + fdoc, hdoc, bdoc = leap_mail(uid, flags, headers, extra_headers, mbox, body, chash) + + return PixelatedMail.from_soledad(fdoc, hdoc, bdoc) + + def input_mail(): mail = InputMail() mail.fdoc = TestDoc({}) @@ -82,9 +89,6 @@ class TestRequest: self.json = json -from twisted.web.test.test_web import DummyRequest - - class PixRequestMock(DummyRequest): def __init__(self, path): DummyRequest.__init__(self, path) |