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.
 
 

199 lines
6.9 KiB

# -*- coding: utf-8 -*-
# Copyright 2015 Camptocamp SA
# Copyright 2016 Therp BV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from openerp import fields
from openerp.tests import common
from openerp.exceptions import ValidationError
class TestPartnerRelation(common.TransactionCase):
def setUp(self):
super(TestPartnerRelation, self).setUp()
self.partner_model = self.env['res.partner']
self.relation_type_model = self.env['res.partner.relation.type']
self.relation_model = self.env['res.partner.relation']
self.partner_1 = self.partner_model.create({
'name': 'Test User 1',
'is_company': False,
})
self.partner_2 = self.partner_model.create({
'name': 'Test Company',
'is_company': True,
})
self.relation_allow = self.relation_type_model.create({
'name': 'allow',
'name_inverse': 'allow_inverse',
'contact_type_left': 'p',
'contact_type_right': 'p',
'allow_self': True
})
self.relation_disallow = self.relation_type_model.create({
'name': 'disallow',
'name_inverse': 'disallow_inverse',
'contact_type_left': 'p',
'contact_type_right': 'p',
'allow_self': False
})
self.relation_default = self.relation_type_model.create({
'name': 'default',
'name_inverse': 'default_inverse',
'contact_type_left': 'p',
'contact_type_right': 'p',
})
self.relation_mixed = self.relation_type_model.create({
'name': 'mixed',
'name_inverse': 'mixed_inverse',
'contact_type_left': 'c',
'contact_type_right': 'p',
})
self.relation_symmetric = self.relation_type_model.create({
'name': 'sym',
'name_inverse': 'sym',
'symmetric': True,
})
def test_self_allowed(self):
self.relation_model.create({
'type_id': self.relation_allow.id,
'left_partner_id': self.partner_1.id,
'right_partner_id': self.partner_1.id,
})
def test_self_disallowed(self):
with self.assertRaises(ValidationError):
self.relation_model.create({
'type_id': self.relation_disallow.id,
'left_partner_id': self.partner_1.id,
'right_partner_id': self.partner_1.id,
})
def test_self_default(self):
with self.assertRaises(ValidationError):
self.relation_model.create({
'type_id': self.relation_default.id,
'left_partner_id': self.partner_1.id,
'right_partner_id': self.partner_1.id,
})
def test_self_mixed(self):
with self.assertRaises(ValidationError):
self.relation_model.create({
'type_id': self.relation_mixed.id,
'left_partner_id': self.partner_1.id,
'right_partner_id': self.partner_2.id,
})
def test_searching(self):
relation = self.relation_model.create({
'type_id': self.relation_mixed.id,
'left_partner_id': self.partner_2.id,
'right_partner_id': self.partner_1.id,
})
partners = self.env['res.partner'].search([
('search_relation_id', '=', relation.type_selection_id.id)
])
self.assertTrue(self.partner_2 in partners)
partners = self.env['res.partner'].search([
('search_relation_id', '!=', relation.type_selection_id.id)
])
self.assertTrue(self.partner_1 in partners)
partners = self.env['res.partner'].search([
('search_relation_id', '=', self.relation_mixed.name)
])
self.assertTrue(self.partner_1 in partners)
self.assertTrue(self.partner_2 in partners)
partners = self.env['res.partner'].search([
('search_relation_id', '=', 'unknown relation')
])
self.assertFalse(partners)
partners = self.env['res.partner'].search([
('search_relation_partner_id', '=', self.partner_2.id),
])
self.assertTrue(self.partner_1 in partners)
partners = self.env['res.partner'].search([
('search_relation_date', '=', fields.Date.today()),
])
self.assertTrue(self.partner_1 in partners)
self.assertTrue(self.partner_2 in partners)
def test_ui_functions(self):
relation = self.relation_model.create({
'type_id': self.relation_mixed.id,
'left_partner_id': self.partner_2.id,
'right_partner_id': self.partner_1.id,
})
self.assertEqual(relation.type_selection_id.type_id, relation.type_id)
relation = relation.with_context(
active_id=self.partner_1.id,
active_ids=self.partner_1.ids,
active_model='res.partner.relation',
)
relation.read()
domain = relation._onchange_type_selection_id()['domain']
self.assertTrue(
('is_company', '=', True) in domain['partner_id_display']
)
relation.write({
'type_selection_id': relation.type_selection_id.id,
})
action = relation.get_action_related_partners()
self.assertTrue(self.partner_1.id in action['domain'][0][2])
def test_relation_all(self):
relation_all_record = self.env['res.partner.relation.all']\
.with_context(
active_id=self.partner_2.id,
active_ids=self.partner_2.ids,
).create({
'other_partner_id': self.partner_1.id,
'type_selection_id': self.relation_mixed.id * 10,
})
self.assertEqual(
relation_all_record.display_name, '%s %s %s' % (
self.partner_2.name,
'mixed',
self.partner_1.name,
)
)
domain = relation_all_record.onchange_type_selection_id()['domain']
self.assertTrue(
('is_company', '=', False) in domain['other_partner_id'])
domain = relation_all_record.onchange_this_partner_id()['domain']
self.assertTrue(
('contact_type_this', '=', 'c') in domain['type_selection_id'])
relation_all_record.write({
'type_id': self.relation_mixed.id,
})
relation = relation_all_record.relation_id
relation_all_record.unlink()
self.assertFalse(relation.exists())
def test_symmetric(self):
relation = self.relation_model.create({
'type_id': self.relation_symmetric.id,
'left_partner_id': self.partner_2.id,
'right_partner_id': self.partner_1.id,
})
partners = self.env['res.partner'].search([
('search_relation_id', '=', relation.type_selection_id.id)
])
self.assertTrue(self.partner_1 in partners)
self.assertTrue(self.partner_2 in partners)