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.
 
 

220 lines
7.4 KiB

# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
# Copyright 2015 Grupo ESOC Ingeniería de Servicios, S.L.U.
# Copyright 2015 Antiun Ingenieria S.L. - Antonio Espinosa
"""These tests try to mimic the behavior of the UI form.
The form operates in onchange mode, with its limitations.
"""
from odoo.tests.common import TransactionCase
class OnChangeCase(TransactionCase):
is_company = False
def setUp(self):
super(OnChangeCase, self).setUp()
self.env['ir.config_parameter'].set_param(
'partner_names_order', 'last_first_comma')
def new_partner(self):
"""Create an empty partner. Ensure it is (or not) a company."""
new = self.env["res.partner"].new()
new.is_company = self.is_company
return new
class PartnerCompanyCase(OnChangeCase):
is_company = True
def tearDown(self):
"""Companies never have ``firstname`` nor ``lastname2``."""
super(PartnerCompanyCase, self).tearDown()
self.assertEqual(self.partner.firstname, False)
self.assertEqual(self.partner.lastname2, False)
def set_name(self, value):
self.partner.name = value
# It triggers onchange
self.partner._onchange_name()
# Ensure it's properly set
self.assertEqual(self.partner.name, value)
def test_create_from_form(self):
"""A user creates a company from the form."""
name = "Sôme company"
with self.env.do_in_onchange():
# User presses ``new``
self.partner = self.new_partner()
# User changes fields
self.set_name(name)
self.assertEqual(self.partner.lastname, name)
def test_empty_name_and_subnames(self):
"""If the user empties ``name``, subnames must be ``False``.
Otherwise, the ``required`` attr will not work as expected.
"""
with self.env.do_in_onchange():
# User presses ``new``
self.partner = self.new_partner()
# User changes fields
self.set_name("Fóo")
self.set_name("")
self.assertEqual(self.partner.lastname, False)
class PartnerContactCase(OnChangeCase):
def set_field(self, field, value):
# Changes the field
setattr(self.partner, field, value)
if field in ("firstname", "lastname", "lastname2"):
# Trigger onchanges
self.partner._onchange_subnames()
self.partner._onchange_name()
# Check it's set OK
self.assertEqual(getattr(self.partner, field), value)
def test_create_from_form_empty(self):
"""A user creates a contact from the form.
All subfields must be false, or the ``required`` attr will not work as
expected.
"""
with self.env.do_in_onchange():
# User presses ``new``
self.partner = self.new_partner()
# Odoo tries to compute the name
self.partner._compute_name()
# This is then triggered
self.partner._onchange_name()
# Subnames must start as False to make the UI work fine
self.assertEqual(self.partner.firstname, False)
self.assertEqual(self.partner.lastname, False)
self.assertEqual(self.partner.lastname2, False)
# ``name`` cannot be False, or upstream Odoo will fail
self.assertEqual(self.partner.name, "")
def test_create_from_form_only_firstname(self):
"""A user creates a contact with only the firstname from the form."""
firstname = "Fïrst"
with self.env.do_in_onchange():
# User presses ``new``
self.partner = self.new_partner()
# User changes fields
self.set_field("firstname", firstname)
self.assertEqual(self.partner.lastname, False)
self.assertEqual(self.partner.lastname2, False)
self.assertEqual(self.partner.name, firstname)
def test_create_from_form_only_lastname(self):
"""A user creates a contact with only the lastname from the form."""
lastname = "Läst"
with self.env.do_in_onchange():
# User presses ``new``
self.partner = self.new_partner()
# User changes fields
self.set_field("lastname", lastname)
self.assertEqual(self.partner.firstname, False)
self.assertEqual(self.partner.lastname2, False)
self.assertEqual(self.partner.name, lastname)
def test_create_from_form_only_lastname2(self):
"""A user creates a contact with only the lastname2 from the form."""
lastname2 = "Läst2"
with self.env.do_in_onchange():
# User presses ``new``
self.partner = self.new_partner()
# User changes fields
self.set_field("lastname2", lastname2)
self.assertEqual(self.partner.firstname, False)
self.assertEqual(self.partner.lastname, False)
self.assertEqual(self.partner.name, lastname2)
def test_create_from_without_firstname(self):
"""A user creates a contact without firstname from the form."""
lastname = "Läst"
lastname2 = "Läst2"
with self.env.do_in_onchange():
# User presses ``new``
self.partner = self.new_partner()
# User changes fields
self.set_field("lastname", lastname)
self.set_field("lastname2", lastname2)
self.assertEqual(self.partner.firstname, False)
self.assertEqual(
self.partner.name,
"%s %s" % (lastname, lastname2))
def test_create_from_without_lastname(self):
"""A user creates a contact without lastname from the form."""
firstname = "Fïrst"
lastname2 = "Läst2"
with self.env.do_in_onchange():
# User presses ``new``
self.partner = self.new_partner()
# User changes fields
self.set_field("firstname", firstname)
self.set_field("lastname2", lastname2)
self.assertEqual(self.partner.lastname, False)
self.assertEqual(
self.partner.name,
"%s, %s" % (lastname2, firstname))
def test_create_from_without_lastname2(self):
"""A user creates a contact without lastname2 from the form."""
firstname = "Fïrst"
lastname = "Läst"
with self.env.do_in_onchange():
# User presses ``new``
self.partner = self.new_partner()
# User changes fields
self.set_field("firstname", firstname)
self.set_field("lastname", lastname)
self.assertEqual(self.partner.lastname2, False)
self.assertEqual(
self.partner.name,
"%s, %s" % (lastname, firstname))
def test_create_from_form_all(self):
"""A user creates a contact with all names from the form."""
firstname = "Fïrst"
lastname = "Läst"
lastname2 = "Läst2"
with self.env.do_in_onchange():
# User presses ``new``
self.partner = self.new_partner()
# User changes fields
self.set_field("firstname", firstname)
self.set_field("lastname", lastname)
self.set_field("lastname2", lastname2)
self.assertEqual(
self.partner.name,
"%s %s, %s" % (lastname, lastname2, firstname))