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.

89 lines
3.5 KiB

  1. # -*- coding: utf-8 -*-
  2. # Copyright 2017 Onestein (<http://www.onestein.eu>)
  3. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
  4. from odoo.tests.common import SingleTransactionCase, at_install, post_install
  5. from odoo.exceptions import AccessError, UserError
  6. @at_install(False)
  7. @post_install(True)
  8. class TestBiSqlViewEditor(SingleTransactionCase):
  9. @classmethod
  10. def setUpClass(cls):
  11. super(TestBiSqlViewEditor, cls).setUpClass()
  12. cls.res_partner = cls.env['res.partner']
  13. cls.res_users = cls.env['res.users']
  14. cls.bi_sql_view = cls.env['bi.sql.view']
  15. cls.group_bi_user = cls.env.ref(
  16. 'sql_request_abstract.group_sql_request_manager')
  17. cls.group_user = cls.env.ref(
  18. 'base.group_user')
  19. cls.view = cls.bi_sql_view.create({
  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. cls.company = cls.env.ref('base.main_company')
  28. # Create bi user
  29. cls.bi_user = cls._create_user('bi_user', cls.group_bi_user,
  30. cls.company)
  31. cls.no_bi_user = cls._create_user('no_bi_user', cls.group_user,
  32. cls.company)
  33. @classmethod
  34. def _create_user(cls, login, groups, company):
  35. """Create a user."""
  36. user = cls.res_users.create({
  37. 'name': 'Test BI User',
  38. 'login': login,
  39. 'password': 'demo',
  40. 'email': 'example@yourcompany.com',
  41. 'notify_email': 'none',
  42. 'company_id': company.id,
  43. 'groups_id': [(6, 0, groups.ids)]
  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,
  57. 'has_group_changed not False')
  58. cron_res = view.cron_id.method_direct_trigger()
  59. self.assertEqual(cron_res, True, 'something went wrong with the cron')
  60. def test_copy(self):
  61. copy_view = self.view.copy()
  62. self.assertEqual(
  63. copy_view.name, 'Partners View 2 (Copy)', 'Wrong name')
  64. def test_security(self):
  65. with self.assertRaises(AccessError):
  66. self.bi_sql_view.sudo(self.no_bi_user.id).search(
  67. [('name', '=', 'Partners View 2')])
  68. bi = self.bi_sql_view.sudo(self.bi_user.id).search(
  69. [('name', '=', 'Partners View 2')])
  70. self.assertEqual(len(bi), 1, 'Bi user should not have access to '
  71. 'bi %s' % self.view.name)
  72. def test_unlink(self):
  73. self.assertEqual(self.view.state, 'ui_valid', 'state not ui_valid')
  74. with self.assertRaises(UserError):
  75. self.view.unlink()
  76. self.view.button_set_draft()
  77. self.view.unlink()
  78. res = self.bi_sql_view.search([('name', '=', 'Partners View 2')])
  79. self.assertEqual(len(res), 0, 'View not deleted')