123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- # -*- coding: utf-8 -*-
- # © 2016 LasLabs Inc.
- # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
- import mock
- from contextlib import contextmanager
- from openerp.tests.common import TransactionCase
- from openerp.addons.mass_mailing_custom_unsubscribe.controllers.main import (
- CustomUnsubscribe
- )
- model = 'openerp.addons.mass_mailing_custom_unsubscribe.controllers.main'
- @contextmanager
- def mock_assets():
- """ Mock & yield controller assets """
- with mock.patch('%s.request' % model) as request:
- yield {
- 'request': request,
- }
- class EndTestException(Exception):
- pass
- class TestController(TransactionCase):
- def setUp(self):
- super(TestController, self).setUp()
- self.controller = CustomUnsubscribe()
- def _default_domain(self):
- return [
- ('opt_out', '=', False),
- ('list_id.not_cross_unsubscriptable', '=', False),
- ]
- def test_mailing_list_contacts_by_email_search(self):
- """ It should search for contacts """
- expect = 'email'
- with mock_assets() as mk:
- self.controller._mailing_list_contacts_by_email(expect)
- model_obj = mk['request'].env['mail.mass_mailing.contact'].sudo()
- model_obj.search.assert_called_once_with(
- [('email', '=', expect)] + self._default_domain()
- )
- def test_mailing_list_contacts_by_email_return(self):
- """ It should return result of search """
- expect = 'email'
- with mock_assets() as mk:
- res = self.controller._mailing_list_contacts_by_email(expect)
- model_obj = mk['request'].env['mail.mass_mailing.contact'].sudo()
- self.assertEqual(
- model_obj.search(), res,
- )
- def test_unsubscription_reason_gets_context(self):
- """ It should retrieve unsub qcontext """
- expect = 'mailing_id', 'email', 'res_id', 'token'
- with mock_assets():
- with mock.patch.object(
- self.controller, 'unsubscription_qcontext'
- ) as unsub:
- unsub.side_effect = EndTestException
- with self.assertRaises(EndTestException):
- self.controller.unsubscription_reason(*expect)
- unsub.assert_called_once_with(*expect)
- def test_unsubscription_updates_with_extra_context(self):
- """ It should update qcontext with provided vals """
- expect = 'mailing_id', 'email', 'res_id', 'token'
- qcontext = {'context': 'test'}
- with mock_assets():
- with mock.patch.object(
- self.controller, 'unsubscription_qcontext'
- ) as unsub:
- self.controller.unsubscription_reason(
- *expect, qcontext_extra=qcontext
- )
- unsub().update.assert_called_once_with(qcontext)
- def test_unsubscription_updates_rendered_correctly(self):
- """ It should correctly render website """
- expect = 'mailing_id', 'email', 'res_id', 'token'
- with mock_assets() as mk:
- with mock.patch.object(
- self.controller, 'unsubscription_qcontext'
- ) as unsub:
- self.controller.unsubscription_reason(*expect)
- mk['request'].website.render.assert_called_once_with(
- "mass_mailing_custom_unsubscribe.reason_form",
- unsub(),
- )
- def test_unsubscription_updates_returns_site(self):
- """ It should return website """
- expect = 'mailing_id', 'email', 'res_id', 'token'
- with mock_assets() as mk:
- with mock.patch.object(
- self.controller, 'unsubscription_qcontext'
- ):
- res = self.controller.unsubscription_reason(*expect)
- self.assertEqual(
- mk['request'].website.render(), res
- )
|