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.

90 lines
3.5 KiB

  1. # Copyright 2017 LasLabs Inc.
  2. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
  3. from odoo.tests import common
  4. from odoo.exceptions import ValidationError
  5. from .fake_models import ResPartner, setup_test_model, teardown_test_model
  6. class TestResPartner(common.SavepointCase):
  7. at_install = False
  8. post_install = True
  9. @classmethod
  10. def setUpClass(cls):
  11. super().setUpClass()
  12. setup_test_model(cls.env, ResPartner)
  13. bad_cat = cls.env['res.partner.id_category'].create({
  14. 'code': 'another_code',
  15. 'name': 'another_name',
  16. })
  17. cls.env['res.partner.id_number'].create({
  18. 'name': 'Bad ID',
  19. 'category_id': bad_cat.id,
  20. 'partner_id': cls.env.user.partner_id.id,
  21. })
  22. cls.partner_id_category = cls.env['res.partner.id_category'].create({
  23. 'code': 'id_code',
  24. 'name': 'id_name',
  25. })
  26. cls.partner = cls.env.user.partner_id
  27. cls.partner_id = cls.env['res.partner.id_number'].create({
  28. 'name': 'Good ID',
  29. 'category_id': cls.partner_id_category.id,
  30. 'partner_id': cls.partner.id,
  31. })
  32. @classmethod
  33. def tearDownClass(cls):
  34. teardown_test_model(cls.env, ResPartner)
  35. super().tearDownClass()
  36. def test_compute_identification(self):
  37. """ It should set the proper field to the proper ID name. """
  38. self.partner._compute_identification('name', 'id_code')
  39. self.assertEqual(self.partner.name, self.partner_id.name)
  40. def test_inverse_identification_saves(self):
  41. """ It should set the ID name to the proper field value. """
  42. self.partner._inverse_identification('name', 'id_code')
  43. self.assertEqual(self.partner_id.name, self.partner.name)
  44. def test_inverse_identification_creates_new_category(self):
  45. """ It should create a new category of the type if non-existent. """
  46. self.partner._inverse_identification('name', 'new_code_type')
  47. category = self.env['res.partner.id_category'].search([
  48. ('code', '=', 'new_code_type'),
  49. ])
  50. self.assertTrue(category)
  51. def test_inverse_identification_creates_new_id(self):
  52. """ It should create a new ID of the type if non-existent. """
  53. category = self.env['res.partner.id_category'].create({
  54. 'code': 'new_code_type',
  55. 'name': 'new_code_type',
  56. })
  57. self.partner._inverse_identification('name', 'new_code_type')
  58. identification = self.env['res.partner.id_number'].search([
  59. ('category_id', '=', category.id),
  60. ('partner_id', '=', self.partner.id),
  61. ])
  62. self.assertEqual(identification.name, self.partner.name)
  63. def test_inverse_identification_multi_exception(self):
  64. """ It should not allow a write when multiple IDs of same type. """
  65. self.env['res.partner.id_number'].create({
  66. 'name': 'Another ID',
  67. 'category_id': self.partner_id_category.id,
  68. 'partner_id': self.partner.id,
  69. })
  70. with self.assertRaises(ValidationError):
  71. self.partner._inverse_identification('name', 'id_code')
  72. def test_search_identification(self):
  73. """ It should return the right record when searched by ID. """
  74. self.partner.social_security = 'Test'
  75. partner = self.env['res.partner'].search([
  76. ('social_security', '=', 'Test'),
  77. ])
  78. self.assertEqual(partner, self.partner)