bemade-addons/bemade_fsm/tests/test_fsm_contact_setting.py

112 lines
4.7 KiB
Python

from odoo.tests import TransactionCase, HttpCase, tagged, Form
from odoo import Command
from .test_bemade_fsm_common import FSMManagerUserTransactionCase
def create_base_contacts(cls):
Partner = cls.env['res.partner']
cls.parent_co = Partner.create({
'name': 'Parent Co',
'company_type': 'company',
})
cls.contact_1 = Partner.create({
'name': 'Contact 1',
'company_type': 'person',
'parent_id': cls.parent_co.id,
})
cls.contact_2 = Partner.create({
'name': 'Contact 2',
'company_type': 'person',
'parent_id': cls.parent_co.id,
})
@tagged("-at_install", "post_install")
class SaleOrderFSMContactsCase(FSMManagerUserTransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
create_base_contacts(cls)
def test_site_contacts(self):
# Make sure the SO pulls the defaults from the partner correctly
self.parent_co.write({'site_contacts': [Command.set([self.contact_1.id, self.contact_2.id])]})
so = self.env['sale.order'].create({
'partner_id': self.parent_co.id,
})
self.assertTrue(so.site_contacts == self.parent_co.site_contacts)
# Make sure updating the site contacts on the SO doesn't feed back to the partner
so.write({'site_contacts': [Command.set([self.contact_1.id])]})
self.assertTrue(self.contact_1 in so.site_contacts)
self.assertTrue(self.contact_2 not in so.site_contacts)
self.assertTrue(so.site_contacts != so.partner_id.site_contacts and len(so.partner_id.site_contacts) == 2)
def test_default_workorder_contacts(self):
# Make sure the SO pulls the defaults from the partner correctly
self.parent_co.write({'work_order_contacts': [Command.set([self.contact_1.id, self.contact_2.id])]})
so = self.env['sale.order'].create({
'partner_id': self.parent_co.id,
})
self.assertTrue(self.contact_1 in self.parent_co.work_order_contacts)
self.assertTrue(self.contact_2 in self.parent_co.work_order_contacts)
self.assertTrue(self.contact_1 in so.work_order_contacts)
self.assertTrue(self.contact_2 in so.work_order_contacts)
# Make sure setting the work order contacts on the SO doesn't feed back to the partner
so.write({'work_order_contacts': [Command.set([self.contact_1.id])]})
self.assertTrue(self.contact_1 in so.work_order_contacts)
self.assertTrue(self.contact_2 not in so.work_order_contacts)
self.assertTrue(
so.work_order_contacts != so.partner_id.work_order_contacts and len(so.partner_id.work_order_contacts) == 2)
class SaleOrderMultiLocationContactsTest(FSMManagerUserTransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
create_base_contacts(cls)
cls.shipping_location = cls.env['res.partner'].create({
'name': 'Shipping location',
'company_type': 'company',
'type': 'delivery',
'parent_id': cls.parent_co.id,
})
cls.site_contact1 = cls.env['res.partner'].create({
'name': 'Site Contact One',
'company_type': 'person',
'type': 'contact',
'parent_id': cls.shipping_location.id,
})
cls.site_contact2 = cls.env['res.partner'].create({
'name': 'Site Contact Two',
'company_type': 'person',
'type': 'contact',
'parent_id': cls.shipping_location.id,
})
cls.shipping_location.write({
'work_order_contacts': [Command.set([cls.contact_1.id, cls.contact_2.id])],
'site_contacts': [Command.set([cls.site_contact1.id, cls.site_contact2.id])],
})
def test_multilayer_site_contacts(self):
so = self.env['sale.order'].create({
'partner_id': self.parent_co.id,
'partner_shipping_id': self.shipping_location.id})
self.assertEqual(so.partner_shipping_id, self.shipping_location)
self.assertEqual(so.site_contacts, self.shipping_location.site_contacts)
self.assertEqual(so.work_order_contacts, self.shipping_location.work_order_contacts)
def test_onchange_shipping_address(self):
so = self.env['sale.order'].create({
'partner_id': self.parent_co.id,
'partner_shipping_id': self.parent_co.id,
})
self.assertFalse(so.work_order_contacts)
self.assertFalse(so.site_contacts)
form = Form(so)
form.partner_shipping_id = self.shipping_location
form.save()
self.assertEqual(so.work_order_contacts, self.shipping_location.work_order_contacts)
self.assertEqual(so.site_contacts, self.shipping_location.site_contacts)