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.

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