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.6 KiB

  1. # Copyright 2017 Onestein (<http://www.onestein.eu>)
  2. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
  3. from odoo.exceptions import AccessError, UserError
  4. from odoo.tests import tagged
  5. from odoo.tests.common import SingleTransactionCase
  6. @tagged("-at_install", "post_install")
  7. class TestBiSqlViewEditor(SingleTransactionCase):
  8. @classmethod
  9. def setUpClass(cls):
  10. super(TestBiSqlViewEditor, cls).setUpClass()
  11. cls.res_partner = cls.env["res.partner"]
  12. cls.res_users = cls.env["res.users"]
  13. cls.bi_sql_view = cls.env["bi.sql.view"]
  14. cls.group_bi_user = cls.env.ref(
  15. "sql_request_abstract.group_sql_request_manager"
  16. )
  17. cls.group_user = cls.env.ref("base.group_user")
  18. cls.view = cls.bi_sql_view.create(
  19. {
  20. "name": "Partners View 2",
  21. "is_materialized": True,
  22. "technical_name": "partners_view_2",
  23. "query": "SELECT name as x_name, street as x_street,"
  24. "company_id as x_company_id FROM res_partner "
  25. "ORDER BY name",
  26. }
  27. )
  28. cls.company = cls.env.ref("base.main_company")
  29. # Create bi user
  30. cls.bi_user = cls._create_user("bi_user", cls.group_bi_user, cls.company)
  31. cls.no_bi_user = cls._create_user("no_bi_user", cls.group_user, cls.company)
  32. @classmethod
  33. def _create_user(cls, login, groups, company):
  34. """Create a user."""
  35. user = cls.res_users.create(
  36. {
  37. "name": login,
  38. "login": login,
  39. "password": "demo",
  40. "email": "example@yourcompany.com",
  41. "company_id": company.id,
  42. "groups_id": [(6, 0, groups.ids)],
  43. }
  44. )
  45. return user
  46. def test_process_view(self):
  47. view = self.view
  48. self.assertEqual(view.state, "draft", "state not draft")
  49. view.button_validate_sql_expression()
  50. self.assertEqual(view.state, "sql_valid", "state not sql_valid")
  51. view.button_create_sql_view_and_model()
  52. self.assertEqual(view.state, "model_valid", "state not model_valid")
  53. view.button_create_ui()
  54. self.assertEqual(view.state, "ui_valid", "state not ui_valid")
  55. view.button_update_model_access()
  56. self.assertEqual(view.has_group_changed, False, "has_group_changed not False")
  57. cron_res = view.cron_id.method_direct_trigger()
  58. self.assertEqual(cron_res, True, "something went wrong with the cron")
  59. def test_copy(self):
  60. copy_view = self.view.copy()
  61. self.assertEqual(copy_view.name, "Partners View 2 (Copy)", "Wrong name")
  62. def test_security(self):
  63. with self.assertRaises(AccessError):
  64. self.bi_sql_view.with_user(self.no_bi_user.id).search(
  65. [("name", "=", "Partners View 2")]
  66. )
  67. bi = self.bi_sql_view.with_user(self.bi_user.id).search(
  68. [("name", "=", "Partners View 2")]
  69. )
  70. self.assertEqual(
  71. len(bi), 1, "Bi user should not have access to " "bi %s" % self.view.name
  72. )
  73. def test_unlink(self):
  74. self.assertEqual(self.view.state, "ui_valid", "state not ui_valid")
  75. with self.assertRaises(UserError):
  76. self.view.unlink()
  77. self.view.button_set_draft()
  78. self.assertNotEqual(
  79. self.view.cron_id,
  80. False,
  81. "Set to draft materialized view should" " not unlink cron",
  82. )
  83. self.view.unlink()
  84. res = self.bi_sql_view.search([("name", "=", "Partners View 2")])
  85. self.assertEqual(len(res), 0, "View not deleted")