Odoo18-Base/addons/test_mass_mailing/tests/test_blacklist.py
2025-03-10 10:52:11 +07:00

166 lines
6.3 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.tests.common import users
from odoo.addons.test_mass_mailing.tests import common
from odoo.exceptions import AccessError
class TestBLAccessRights(common.TestMassMailCommon):
@classmethod
def setUpClass(cls):
super(TestBLAccessRights, cls).setUpClass()
cls._create_portal_user()
cls.bl_rec = cls.env['mail.blacklist'].create([
{'email': 'Not A Stark <john.snow@example.com>'},
])
cls.bl_previous = cls.env['mail.blacklist'].search([])
@users('employee')
def test_bl_crud_employee(self):
with self.assertRaises(AccessError):
self.env['mail.blacklist'].create([{'email': 'Arya.Stark@example.com'}])
with self.assertRaises(AccessError):
self.bl_rec.with_user(self.env.user).read([])
with self.assertRaises(AccessError):
self.bl_rec.with_user(self.env.user).write({'email': 'jaimie.lannister@example.com'})
with self.assertRaises(AccessError):
self.bl_rec.with_user(self.env.user).unlink()
@users('portal_test')
def test_bl_crud_portal(self):
with self.assertRaises(AccessError):
self.env['mail.blacklist'].create([{'email': 'Arya.Stark@example.com'}])
with self.assertRaises(AccessError):
self.bl_rec.with_user(self.env.user).read([])
with self.assertRaises(AccessError):
self.bl_rec.with_user(self.env.user).write({'email': 'jaimie.lannister@example.com'})
with self.assertRaises(AccessError):
self.bl_rec.with_user(self.env.user).unlink()
@users('user_marketing')
def test_bl_crud_marketing(self):
self.env['mail.blacklist'].create([{'email': 'Arya.Stark@example.com'}])
read_res = self.bl_rec.with_user(self.env.user).read([])
self.assertEqual(read_res[0]['id'], self.bl_rec.id)
self.bl_rec.with_user(self.env.user).write({'email': 'jaimie.lannister@example.com'})
self.assertEqual(self.bl_rec.email, 'jaimie.lannister@example.com')
self.bl_rec.with_user(self.env.user).unlink()
class TestBLConsistency(common.TestMassMailCommon):
_base_list = ['Arya.Stark@example.com', 'ned.stark@example.com']
def setUp(self):
super(TestBLConsistency, self).setUp()
self.bl_rec = self.env['mail.blacklist'].create([
{'email': 'Not A Stark <john.snow@example.com>'},
])
self.bl_previous = self.env['mail.blacklist'].search([])
@users('user_marketing')
def test_bl_check_case_add(self):
""" Test emails case when adding through _add """
bl_sudo = self.env['mail.blacklist'].sudo()
existing = bl_sudo.create({
'email': 'arya.stark@example.com',
'active': False,
})
added = self.env['mail.blacklist']._add('Arya.Stark@EXAMPLE.com')
self.assertEqual(existing, added)
self.assertTrue(existing.active)
@users('user_marketing')
def test_bl_check_case_remove(self):
""" Test emails case when deactivating through _remove """
bl_sudo = self.env['mail.blacklist'].sudo()
existing = bl_sudo.create({
'email': 'arya.stark@example.com',
'active': True,
})
added = self.env['mail.blacklist']._remove('Arya.Stark@EXAMPLE.com')
self.assertEqual(existing, added)
self.assertFalse(existing.active)
@users('user_marketing')
def test_bl_create_duplicate(self):
""" Test emails are inserted only once if duplicated """
bl_sudo = self.env['mail.blacklist'].sudo()
self.env['mail.blacklist'].create([
{'email': self._base_list[0]},
{'email': self._base_list[1]},
{'email': 'Another Ned Stark <%s>' % self._base_list[1]},
])
new_bl = bl_sudo.search([('id', 'not in', self.bl_previous.ids)])
self.assertEqual(len(new_bl), 2)
self.assertEqual(
set(v.lower() for v in self._base_list),
set(v.lower() for v in new_bl.mapped('email'))
)
@users('user_marketing')
def test_bl_create_parsing(self):
""" Test email is correctly extracted from given entries """
bl_sudo = self.env['mail.blacklist'].sudo()
self.env['mail.blacklist'].create([
{'email': self._base_list[0]},
{'email': self._base_list[1]},
{'email': 'Not Ned Stark <jaimie.lannister@example.com>'},
])
new_bl = bl_sudo.search([('id', 'not in', self.bl_previous.ids)])
self.assertEqual(len(new_bl), 3)
self.assertEqual(
set(v.lower() for v in self._base_list + ['jaimie.lannister@example.com']),
set(v.lower() for v in new_bl.mapped('email'))
)
@users('user_marketing')
def test_bl_search_exact(self):
search_res = self.env['mail.blacklist'].search([('email', '=', 'john.snow@example.com')])
self.assertEqual(search_res, self.bl_rec)
@users('user_marketing')
def test_bl_search_parsing(self):
search_res = self.env['mail.blacklist'].search([('email', '=', 'Not A Stark <john.snow@example.com>')])
self.assertEqual(search_res, self.bl_rec)
search_res = self.env['mail.blacklist'].search([('email', '=', '"John J. Snow" <john.snow@example.com>')])
self.assertEqual(search_res, self.bl_rec)
search_res = self.env['mail.blacklist'].search([('email', '=', 'Aegon? <john.snow@example.com>')])
self.assertEqual(search_res, self.bl_rec)
search_res = self.env['mail.blacklist'].search([('email', '=', '"John; \"You know Nothing\" Snow" <john.snow@example.com>')])
self.assertEqual(search_res, self.bl_rec)
@users('user_marketing')
def test_bl_search_case(self):
search_res = self.env['mail.blacklist'].search([('email', '=', 'john.SNOW@example.COM>')])
self.assertEqual(search_res, self.bl_rec)
@users('user_marketing')
def test_bl_search_partial(self):
search_res = self.env['mail.blacklist'].search([('email', 'ilike', 'John')])
self.assertEqual(search_res, self.bl_rec)
search_res = self.env['mail.blacklist'].search([('email', 'ilike', 'n.SNOW@example.cO>')])
self.assertEqual(search_res, self.bl_rec)