Files
odoo_source/addons/mail/tests/test_res_users.py
T
tsm-odoo 8e52f40f59 [FIX] test_discuss_full, *: decouple tests from demo data dependency
*: website_livechat.

closes odoo/odoo#143645

X-original-commit: 9643717d911c31f150adab5b699ec7b9219f8981
Signed-off-by: Sébastien Theys (seb) <seb@odoo.com>
Signed-off-by: Matthieu Stockbauer (tsm) <tsm@odoo.com>
2023-11-27 08:39:49 +00:00

101 lines
3.9 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from psycopg2 import IntegrityError
from unittest.mock import patch
from odoo import Command
from odoo.addons.base.models.res_users import Users
from odoo.addons.mail.tests.common import MailCommon, mail_new_test_user
from odoo.addons.base.tests.common import HttpCaseWithUserDemo
from odoo.tests import tagged, users
from odoo.tools import mute_logger
class TestNotifySecurityUpdate(MailCommon):
@users('employee')
def test_security_update_email(self):
""" User should be notified on old email address when the email changes """
with self.mock_mail_gateway():
self.env.user.write({'email': 'new@example.com'})
self.assertMailMailWEmails(['e.e@example.com'], 'outgoing', fields_values={
'subject': 'Security Update: Email Changed',
})
@users('employee')
def test_security_update_login(self):
with self.mock_mail_gateway():
self.env.user.write({'login': 'newlogin'})
self.assertMailMailWEmails([self.env.user.email_formatted], 'outgoing', fields_values={
'subject': 'Security Update: Login Changed',
})
@users('employee')
def test_security_update_password(self):
with self.mock_mail_gateway():
self.env.user.write({'password': 'newpassword'})
self.assertMailMailWEmails([self.env.user.email_formatted], 'outgoing', fields_values={
'subject': 'Security Update: Password Changed',
})
class TestUser(MailCommon):
@mute_logger('odoo.sql_db')
def test_notification_type_constraint(self):
with self.assertRaises(IntegrityError, msg='Portal user can not receive notification in Odoo'):
mail_new_test_user(
self.env,
login='user_test_constraint_2',
name='Test User 2',
email='user_test_constraint_2@test.example.com',
notification_type='inbox',
groups='base.group_portal',
)
def test_notification_type_convert_internal_inbox_to_portal(self):
"""Tests an internal user using inbox notifications converted to portal
is automatically set to email notifications"""
user = mail_new_test_user(
self.env,
login='user_test_constraint_3',
name='Test User 3',
email='user_test_constraint_3@test.example.com',
notification_type='inbox',
groups='base.group_user',
)
# Ensure the internal user has well the inbox notification type
self.assertEqual(user.notification_type, 'inbox')
self.assertIn(self.env.ref('mail.group_mail_notification_type_inbox'), user.groups_id)
# Change the internal user to portal, and make sure it automatically converts from inbox to email notifications
user.write({'groups_id': [
Command.unlink(self.env.ref('base.group_user').id),
Command.link(self.env.ref('base.group_portal').id),
]})
self.assertEqual(user.notification_type, 'email')
self.assertNotIn(self.env.ref('mail.group_mail_notification_type_inbox'), user.groups_id)
@tagged('-at_install', 'post_install')
class TestUserModifyOwnProfile(HttpCaseWithUserDemo):
def test_user_modify_own_profile(self):
"""" A user should be able to modify their own profile.
Even if that user does not have access rights to write on the res.users model. """
# avoid 'reload_context' action in the middle of the tour to ease steps and form save checks
with patch.object(Users, 'preference_save', lambda self: True):
self.start_tour(
"/web",
"mail/static/tests/tours/user_modify_own_profile_tour.js",
login="demo",
step_delay=100,
)
self.assertEqual(self.env.ref('base.user_demo').email, "updatedemail@example.com")