You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
3.8 KiB
111 lines
3.8 KiB
# -*- 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
|
|
)
|