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.

58 lines
2.0 KiB

  1. # Copyright (C) 2015 Akretion (<http://www.akretion.com>)
  2. # @author: Florian da Costa
  3. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
  4. import base64
  5. from odoo.tests.common import TransactionCase
  6. from odoo.exceptions import Warning as UserError
  7. class TestExportSqlQuery(TransactionCase):
  8. def setUp(self):
  9. super(TestExportSqlQuery, self).setUp()
  10. self.sql_export_obj = self.env['sql.export']
  11. self.wizard_obj = self.env['sql.file.wizard']
  12. self.sql_report_demo = self.env.ref('sql_export.sql_export_partner')
  13. def test_sql_query(self):
  14. wizard = self.wizard_obj.create({
  15. 'sql_export_id': self.sql_report_demo.id,
  16. })
  17. wizard.export_sql()
  18. export = base64.b64decode(wizard.binary_file)
  19. self.assertEqual(export.split(';')[0], 'name')
  20. self.assertTrue(len(export.split(';')) > 6)
  21. def test_prohibited_queries(self):
  22. prohibited_queries = [
  23. "upDaTe res_partner SET name = 'test' WHERE id = 1",
  24. "DELETE FROM sql_export WHERE name = 'test';",
  25. " DELETE FROM sql_export WHERE name = 'test' ;",
  26. """DELETE
  27. FROM
  28. sql_export
  29. WHERE name = 'test'
  30. """,
  31. ]
  32. for query in prohibited_queries:
  33. with self.assertRaises(UserError):
  34. sql_export = self.sql_export_obj.create({
  35. 'name': 'test_prohibited',
  36. 'query': query})
  37. sql_export.button_validate_sql_expression()
  38. def test_authorized_queries(self):
  39. authorized_queries = [
  40. "SELECT create_date FROM res_partner",
  41. ]
  42. for query in authorized_queries:
  43. sql_export = self.sql_export_obj.create({
  44. 'name': 'test_authorized',
  45. 'query': query})
  46. sql_export.button_validate_sql_expression()
  47. self.assertEqual(
  48. sql_export.state, 'sql_valid',
  49. "%s is a valid request" % (query))