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.

102 lines
3.9 KiB

  1. # -*- coding: utf-8 -*-
  2. #
  3. #
  4. # Authors: Guewen Baconnier
  5. # Copyright 2015 Camptocamp SA
  6. #
  7. # This program is free software: you can redistribute it and/or modify
  8. # it under the terms of the GNU Affero General Public License as
  9. # published by the Free Software Foundation, either version 3 of the
  10. # License, or (at your option) any later version.
  11. #
  12. # This program is distributed in the hope that it will be useful,
  13. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. # GNU Affero General Public License for more details.
  16. #
  17. # You should have received a copy of the GNU Affero General Public License
  18. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  19. #
  20. #
  21. from openerp.tests import common
  22. class TestChangesetFieldRule(common.TransactionCase):
  23. def setUp(self):
  24. super(TestChangesetFieldRule, self).setUp()
  25. self.partner_model_id = self.env.ref('base.model_res_partner').id
  26. self.company_model_id = self.env.ref('base.model_res_company').id
  27. self.field_name = self.env.ref('base.field_res_partner_name')
  28. self.field_street = self.env.ref('base.field_res_partner_street')
  29. def test_get_rules(self):
  30. ChangesetFieldRule = self.env['changeset.field.rule']
  31. ChangesetFieldRule.search([]).unlink()
  32. rule1 = ChangesetFieldRule.create({
  33. 'model_id': self.partner_model_id,
  34. 'field_id': self.field_name.id,
  35. 'action': 'validate',
  36. })
  37. rule2 = ChangesetFieldRule.create({
  38. 'model_id': self.partner_model_id,
  39. 'field_id': self.field_street.id,
  40. 'action': 'never',
  41. })
  42. get_rules = ChangesetFieldRule.get_rules('res.partner', None)
  43. self.assertEqual(get_rules, {'name': rule1, 'street': rule2})
  44. def test_get_rules_source(self):
  45. ChangesetFieldRule = self.env['changeset.field.rule']
  46. ChangesetFieldRule.search([]).unlink()
  47. rule1 = ChangesetFieldRule.create({
  48. 'model_id': self.partner_model_id,
  49. 'field_id': self.field_name.id,
  50. 'action': 'validate',
  51. })
  52. rule2 = ChangesetFieldRule.create({
  53. 'model_id': self.partner_model_id,
  54. 'field_id': self.field_street.id,
  55. 'action': 'never',
  56. })
  57. rule3 = ChangesetFieldRule.create({
  58. 'model_id': self.partner_model_id,
  59. 'source_model_id': self.company_model_id,
  60. 'field_id': self.field_street.id,
  61. 'action': 'never',
  62. })
  63. model = ChangesetFieldRule
  64. rules = model.get_rules('res.partner', None)
  65. self.assertEqual(rules, {'name': rule1, 'street': rule2})
  66. rules = model.get_rules('res.partner', 'res.company')
  67. self.assertEqual(rules, {'name': rule1, 'street': rule3})
  68. def test_get_rules_cache(self):
  69. ChangesetFieldRule = self.env['changeset.field.rule']
  70. ChangesetFieldRule.search([]).unlink()
  71. rule = ChangesetFieldRule.create({
  72. 'model_id': self.partner_model_id,
  73. 'field_id': self.field_name.id,
  74. 'action': 'validate',
  75. })
  76. self.assertEqual(
  77. ChangesetFieldRule.get_rules('res.partner', None)['name'].action,
  78. 'validate',
  79. )
  80. # Write on cursor to bypass the cache invalidation for the
  81. # matter of the test
  82. self.env.cr.execute("UPDATE changeset_field_rule "
  83. "SET action = 'never' "
  84. "WHERE id = %s", (rule.id,))
  85. self.assertEqual(
  86. ChangesetFieldRule.get_rules('res.partner', None)['name'].action,
  87. 'validate',
  88. )
  89. rule.action = 'auto'
  90. self.assertEqual(
  91. ChangesetFieldRule.get_rules('res.partner', None)['name'].action,
  92. 'auto',
  93. )
  94. rule.unlink()
  95. self.assertFalse(ChangesetFieldRule.get_rules('res.partner', None))