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) | 
