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.

116 lines
3.7 KiB

  1. # Copyright 2017 ACSONE SA/NV
  2. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
  3. from odoo.tests.common import TransactionCase
  4. class TestParser(TransactionCase):
  5. def test_getting_parser(self):
  6. expected_parser = [
  7. "name",
  8. "active",
  9. "credit_limit",
  10. "color",
  11. ("category_id", ["name"]),
  12. ("country_id", ["name", "code"]),
  13. (
  14. "child_ids",
  15. [
  16. "name",
  17. "id",
  18. "email",
  19. ("country_id", ["name", "code"]),
  20. ("child_ids", ["name"]),
  21. ],
  22. ),
  23. "lang",
  24. "comment",
  25. ]
  26. exporter = self.env.ref("base_jsonify.ir_exp_partner")
  27. parser = exporter.get_json_parser()
  28. self.assertListEqual(parser, expected_parser)
  29. # modify an ir.exports_line to put an alias for a field
  30. self.env.ref("base_jsonify.category_id_name").write(
  31. {"alias": "category_id:category/name"}
  32. )
  33. expected_parser[4] = ("category_id:category", ["name"])
  34. parser = exporter.get_json_parser()
  35. self.assertEqual(parser, expected_parser)
  36. def test_json_export(self):
  37. parser = [
  38. "lang",
  39. "comment",
  40. "credit_limit",
  41. "name",
  42. "color",
  43. (
  44. "child_ids:children",
  45. [
  46. ("child_ids:children", ["name"]),
  47. "email",
  48. ("country_id:country", ["code", "name"]),
  49. "name",
  50. "id",
  51. ],
  52. ),
  53. ("country_id:country", ["code", "name"]),
  54. "active",
  55. ("category_id", ["name"]),
  56. ]
  57. partner = self.env["res.partner"].create(
  58. {
  59. "name": "Akretion",
  60. "country_id": self.env.ref("base.fr").id,
  61. "lang": "en_US", # default
  62. "category_id": [(0, 0, {"name": "Inovator"})],
  63. "child_ids": [
  64. (
  65. 0,
  66. 0,
  67. {
  68. "name": "Sebatien Beau",
  69. "country_id": self.env.ref("base.fr").id,
  70. },
  71. )
  72. ],
  73. }
  74. )
  75. expected_json = {
  76. "lang": "en_US",
  77. "comment": None,
  78. "credit_limit": 0.0,
  79. "name": "Akretion",
  80. "color": 0,
  81. "country": {"code": "FR", "name": "France"},
  82. "active": True,
  83. "category_id": [{"name": "Inovator"}],
  84. "children": [
  85. {
  86. "id": partner.child_ids.id,
  87. "country": {"code": "FR", "name": "France"},
  88. "children": [],
  89. "name": "Sebatien Beau",
  90. "email": None,
  91. }
  92. ],
  93. }
  94. json_partner = partner.jsonify(parser)
  95. self.assertDictEqual(json_partner[0], expected_json)
  96. json_partner = partner.jsonify(parser)
  97. self.assertDictEqual(json_partner[0], expected_json)
  98. # Check that only boolean fields have boolean values into json
  99. # By default if a field is not set into Odoo, the value is always False
  100. # This value is not the expected one into the json
  101. partner.write({"child_ids": [(6, 0, [])], "active": False, "lang": False})
  102. json_partner = partner.jsonify(parser)
  103. expected_json["active"] = False
  104. expected_json["lang"] = None
  105. expected_json["children"] = []
  106. self.assertDictEqual(json_partner[0], expected_json)