1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
|
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.addons.mail.tests.common import MailCommon, mail_new_test_user
from odoo.exceptions import UserError, AccessError
from odoo.tests.common import users
class TestPortalWizard(MailCommon):
def setUp(self):
super(TestPortalWizard, self).setUp()
self.partner = self.env['res.partner'].create({
'name': 'Testing Partner',
'email': 'testing_partner@example.com',
})
self.public_user = mail_new_test_user(
self.env,
name='Public user',
login='public_user',
email='public_user@example.com',
groups='base.group_public',
)
self.portal_user = mail_new_test_user(
self.env,
name='Portal user',
login='portal_user',
email='portal_user@example.com',
groups='base.group_portal',
)
self.internal_user = mail_new_test_user(
self.env,
name='Internal user',
login='internal_user',
email='internal_user@example.com',
groups='base.group_user',
)
def test_portal_wizard_acl(self):
portal_wizard = self.env['portal.wizard'].with_context(active_ids=[self.partner.id]).create({})
with self.assertRaises(AccessError, msg='Standard users should not be able to open the portal wizard'):
self.env['portal.wizard'].with_context(active_ids=[self.partner.id]).with_user(self.user_employee).create({})
with self.assertRaises(AccessError, msg='Standard users should not be able to open the portal wizard'):
portal_wizard.with_user(self.user_employee).welcome_message
with self.assertRaises(AccessError, msg='Standard users should not be able to open the portal wizard'):
portal_wizard.user_ids.with_user(self.user_employee).email
@users('admin')
def test_portal_wizard_partner(self):
portal_wizard = self.env['portal.wizard'].with_context(active_ids=[self.partner.id]).create({})
self.assertEqual(len(portal_wizard.user_ids), 1)
portal_user = portal_wizard.user_ids
self.assertFalse(portal_user.user_id.id)
self.assertFalse(portal_user.is_portal)
self.assertFalse(portal_user.is_internal)
portal_user.email = 'first_email@example.com'
with self.mock_mail_gateway():
portal_user.action_grant_access()
new_user = portal_user.user_id
self.assertTrue(new_user.id, 'Must create a new user')
self.assertTrue(new_user._is_portal(), 'Must add the group to the user')
self.assertEqual(self.partner.email, 'first_email@example.com', 'Must write on the email of the partner')
self.assertEqual(new_user.email, 'first_email@example.com', 'Must create the user with the right email')
self.assertSentEmail(self.env.user.partner_id, [self.partner])
@users('admin')
def test_portal_wizard_public_user(self):
"""Test to grant the access to a public user.
Should remove the group "base.group_public" and add the group "base.group_portal"
"""
group_public = self.env.ref('base.group_public')
public_partner = self.public_user.partner_id
portal_wizard = self.env['portal.wizard'].with_context(active_ids=[public_partner.id]).create({})
self.assertEqual(len(portal_wizard.user_ids), 1)
portal_user = portal_wizard.user_ids
self.assertEqual(portal_user.user_id, self.public_user)
self.assertFalse(portal_user.is_portal)
self.assertFalse(portal_user.is_internal)
portal_user.email = 'new_email@example.com'
with self.mock_mail_gateway():
portal_user.action_grant_access()
self.assertTrue(portal_user.is_portal)
self.assertFalse(portal_user.is_internal)
self.assertTrue(self.public_user._is_portal(), 'Must add the group portal')
self.assertFalse(self.public_user._is_public(), 'Must remove the group public')
self.assertEqual(public_partner.email, 'new_email@example.com', 'Must change the email of the partner')
self.assertEqual(self.public_user.email, 'new_email@example.com', 'Must change the email of the user')
self.assertSentEmail(self.env.user.partner_id, [public_partner])
with self.mock_mail_gateway():
portal_user.action_revoke_access()
self.assertEqual(portal_user.user_id, self.public_user, 'Must keep the user even if it is archived')
self.assertEqual(group_public, portal_user.user_id.groups_id, 'Must add the group public after removing the portal group')
self.assertFalse(portal_user.user_id.active, 'Must have archived the user')
self.assertFalse(portal_user.is_portal)
self.assertFalse(portal_user.is_internal)
self.assertNotSentEmail()
@users('admin')
def test_portal_wizard_internal_user(self):
"""Internal user can not be managed from this wizard."""
internal_partner = self.internal_user.partner_id
portal_wizard = self.env['portal.wizard'].with_context(active_ids=[internal_partner.id]).create({})
self.assertEqual(len(portal_wizard.user_ids), 1)
portal_user = portal_wizard.user_ids
self.assertTrue(portal_user.is_internal)
with self.assertRaises(UserError, msg='Should not be able to manage internal user'), self.mock_mail_gateway():
portal_wizard.user_ids.action_grant_access()
self.assertNotSentEmail()
with self.assertRaises(UserError, msg='Should not be able to manage internal user'):
portal_wizard.user_ids.action_revoke_access()
@users('admin')
def test_portal_wizard_error(self):
portal_wizard = self.env['portal.wizard'].with_context(active_ids=[self.portal_user.partner_id.id]).create({})
self.assertEqual(len(portal_wizard.user_ids), 1)
portal_user = portal_wizard.user_ids
self.internal_user.login = 'test_error@example.com'
portal_user.email = 'test_error@example.com'
with self.assertRaises(UserError, msg='Must detect the already used email.'):
portal_user._assert_user_email_uniqueness()
self.assertEqual(portal_user.email_state, 'exist', msg='Must detect the already used email.')
portal_user.email = 'wrong email format'
with self.assertRaises(UserError, msg='Must detect wrong email format.'):
portal_user._assert_user_email_uniqueness()
self.assertEqual(portal_user.email_state, 'ko', msg='Must detect wrong email format.')
portal_wizard = self.env['portal.wizard'].with_context(active_ids=[self.internal_user.partner_id.id]).create({})
portal_user = portal_wizard.user_ids
with self.assertRaises(UserError, msg='Must not be able to change internal user group.'):
portal_user.action_revoke_access()
def test_portal_wizard_multi_company(self):
company_1 = self.company_admin
company_2 = self.company_2
partner_company_2 = self.env['res.partner'].with_company(company_2).create({
'name': 'Testing Partner',
'email': 'testing_partner@example.com',
'company_id': company_2.id,
})
portal_wizard = self.env['portal.wizard'].with_context(active_ids=[partner_company_2.id]).create({})
portal_user = portal_wizard.user_ids
portal_user.with_company(company_1).action_grant_access()
self.assertEqual(portal_user.user_id.company_id, company_2, 'Must create the user in the same company as the partner.')
|