OCA reporting engine fork for dev and update.
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.

94 lines
3.9 KiB

  1. # Copyright 2017 Therp BV <http://therp.nl>
  2. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
  3. import mock
  4. from odoo.exceptions import ValidationError
  5. from odoo.addons.report_py3o.models.ir_actions_report import (
  6. PY3O_CONVERSION_COMMAND_PARAMETER,
  7. )
  8. from odoo.addons.report_py3o.tests import test_report_py3o
  9. @mock.patch(
  10. "requests.post",
  11. mock.Mock(
  12. return_value=mock.Mock(
  13. status_code=200, iter_content=mock.Mock(return_value=[b"test_result"])
  14. )
  15. ),
  16. )
  17. class TestReportPy3oFusionServer(test_report_py3o.TestReportPy3o):
  18. def setUp(self):
  19. super().setUp()
  20. py3o_server = self.env["py3o.server"].create({"url": "http://dummy"})
  21. # check the call to the fusion server
  22. self.report.write({"py3o_server_id": py3o_server.id, "py3o_filetype": "pdf"})
  23. self.py3o_server = py3o_server
  24. def test_no_local_fusion_without_fusion_server(self):
  25. self.assertTrue(self.report.py3o_is_local_fusion)
  26. # Fusion server is only required if not local...
  27. self.report.write({"py3o_server_id": None, "py3o_is_local_fusion": True})
  28. self.report.write(
  29. {"py3o_server_id": self.py3o_server.id, "py3o_is_local_fusion": True}
  30. )
  31. self.report.write(
  32. {"py3o_server_id": self.py3o_server.id, "py3o_is_local_fusion": False}
  33. )
  34. with self.assertRaises(ValidationError) as e:
  35. self.report.write({"py3o_server_id": None, "py3o_is_local_fusion": False})
  36. self.assertEqual(
  37. e.exception.name,
  38. "You can not use remote fusion without Fusion server. "
  39. "Please specify a Fusion Server",
  40. )
  41. def test_reports_no_local_fusion(self):
  42. self.report.py3o_is_local_fusion = False
  43. self.test_reports()
  44. def test_odoo2libreoffice_options(self):
  45. for options in self.env["py3o.pdf.options"].search([]):
  46. options_dict = options.odoo2libreoffice_options()
  47. self.assertIsInstance(options_dict, dict)
  48. def test_py3o_report_availability(self):
  49. # if the report is not into a native format, we must have at least
  50. # a libreoffice runtime or a fusion server. Otherwise the report is
  51. # not usable and will fail at rutime.
  52. # This test could fails if libreoffice is not available on the server
  53. self.report.py3o_filetype = "odt"
  54. self.assertTrue(self.report.lo_bin_path)
  55. self.assertTrue(self.report.py3o_server_id)
  56. self.assertTrue(self.report.is_py3o_native_format)
  57. self.assertFalse(self.report.is_py3o_report_not_available)
  58. self.assertFalse(self.report.msg_py3o_report_not_available)
  59. # specify a wrong lo bin path and a non native format.
  60. self.env["ir.config_parameter"].set_param(
  61. PY3O_CONVERSION_COMMAND_PARAMETER, "/wrong_path"
  62. )
  63. self.report.py3o_filetype = "pdf"
  64. self.report.refresh()
  65. # no native and no bin path, everything is still OK since a fusion
  66. # server is specified.
  67. self.assertFalse(self.report.lo_bin_path)
  68. self.assertTrue(self.report.py3o_server_id)
  69. self.assertFalse(self.report.is_py3o_native_format)
  70. self.assertFalse(self.report.is_py3o_report_not_available)
  71. self.assertFalse(self.report.msg_py3o_report_not_available)
  72. # if we remove the fusion server, the report becomes unavailable
  73. self.report.py3o_server_id = False
  74. self.assertTrue(self.report.is_py3o_report_not_available)
  75. self.assertTrue(self.report.msg_py3o_report_not_available)
  76. # if we set a libreffice runtime, the report is available again
  77. self.env["ir.config_parameter"].set_param(
  78. PY3O_CONVERSION_COMMAND_PARAMETER, "libreoffice"
  79. )
  80. self.report.refresh()
  81. self.assertTrue(self.report.lo_bin_path)
  82. self.assertFalse(self.report.is_py3o_report_not_available)
  83. self.assertFalse(self.report.msg_py3o_report_not_available)