96 lines
3.6 KiB
Python
96 lines
3.6 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||
|
|
||
|
from odoo import exceptions
|
||
|
from odoo.addons.mail.tests.common import mail_new_test_user
|
||
|
from odoo.addons.sales_team.tests.common import TestSalesMC
|
||
|
from odoo.tests.common import users, TransactionCase
|
||
|
from odoo.tools import mute_logger
|
||
|
|
||
|
|
||
|
class TestCornerCases(TransactionCase):
|
||
|
|
||
|
def setUp(self):
|
||
|
super(TestCornerCases, self).setUp()
|
||
|
self.user_sales_leads = mail_new_test_user(
|
||
|
self.env, login='user_sales_leads',
|
||
|
name='Laetitia Sales Leads', email='crm_leads@test.example.com',
|
||
|
company_id=self.env.user.company_id.id,
|
||
|
notification_type='inbox',
|
||
|
groups='sales_team.group_sale_salesman_all_leads,base.group_partner_manager',
|
||
|
)
|
||
|
self.sales_team_1 = self.env['crm.team'].create({
|
||
|
'name': 'Test Sales Team',
|
||
|
'sequence': 5,
|
||
|
'company_id': False,
|
||
|
'user_id': self.env.user.id,
|
||
|
})
|
||
|
|
||
|
def test_unicity(self):
|
||
|
""" Archived memberships should be removed when detecting duplicates.
|
||
|
Creating duplicates should raise unicity constraint.
|
||
|
|
||
|
Note: redoing the data set to avoid clashing with SavepointCase as
|
||
|
we expect a db-level assert """
|
||
|
sales_team_1_m1 = self.env['crm.team.member'].create({
|
||
|
'user_id': self.user_sales_leads.id,
|
||
|
'crm_team_id': self.sales_team_1.id,
|
||
|
})
|
||
|
|
||
|
sales_team_1_m1.write({'active': False})
|
||
|
sales_team_1_m1.flush_recordset()
|
||
|
|
||
|
sales_team_1_m2 = self.env['crm.team.member'].create({
|
||
|
'user_id': self.user_sales_leads.id,
|
||
|
'crm_team_id': self.sales_team_1.id,
|
||
|
})
|
||
|
|
||
|
found = self.env['crm.team.member'].search([
|
||
|
('user_id', '=', self.user_sales_leads.id),
|
||
|
('crm_team_id', '=', self.sales_team_1.id),
|
||
|
])
|
||
|
self.assertEqual(found, sales_team_1_m2)
|
||
|
|
||
|
with self.assertRaises(exceptions.UserError), mute_logger('odoo.sql_db'):
|
||
|
self.env['crm.team.member'].create({
|
||
|
'user_id': self.user_sales_leads.id,
|
||
|
'crm_team_id': self.sales_team_1.id,
|
||
|
})
|
||
|
|
||
|
def test_unicity_multicreate(self):
|
||
|
""" Test constraint works with creating duplicates in the same create
|
||
|
method. """
|
||
|
with self.assertRaises(exceptions.UserError), mute_logger('odoo.sql_db'):
|
||
|
self.env['crm.team.member'].create([
|
||
|
{'user_id': self.user_sales_leads.id, 'crm_team_id': self.sales_team_1.id},
|
||
|
{'user_id': self.user_sales_leads.id, 'crm_team_id': self.sales_team_1.id}
|
||
|
])
|
||
|
|
||
|
|
||
|
class TestSecurity(TestSalesMC):
|
||
|
|
||
|
@users('user_sales_leads')
|
||
|
def test_team_access(self):
|
||
|
sales_team = self.sales_team_1.with_user(self.env.user)
|
||
|
|
||
|
sales_team.read(['name'])
|
||
|
for member in sales_team.member_ids:
|
||
|
member.read(['name'])
|
||
|
|
||
|
with self.assertRaises(exceptions.AccessError):
|
||
|
sales_team.write({'name': 'Trolling'})
|
||
|
|
||
|
for membership in sales_team.crm_team_member_ids:
|
||
|
membership.read(['name'])
|
||
|
with self.assertRaises(exceptions.AccessError):
|
||
|
membership.write({'active': False})
|
||
|
|
||
|
with self.assertRaises(exceptions.AccessError):
|
||
|
sales_team.write({'member_ids': [(5, 0)]})
|
||
|
|
||
|
@users('user_sales_leads')
|
||
|
def test_team_multi_company(self):
|
||
|
self.sales_team_1.with_user(self.env.user).read(['name'])
|
||
|
with self.assertRaises(exceptions.AccessError):
|
||
|
self.team_c2.with_user(self.env.user).read(['name'])
|