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.

92 lines
2.8 KiB

  1. # Copyright 2020 Coop IT Easy SCRL fs
  2. # Robin Keunen <robin@coopiteasy.be>
  3. # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
  4. import requests
  5. import json
  6. import odoo
  7. from lxml import html
  8. from odoo.addons.base_rest.tests.common import BaseRestCase
  9. HOST = "127.0.0.1"
  10. PORT = odoo.tools.config["http_port"]
  11. class BaseEMCRestCase(BaseRestCase):
  12. @classmethod
  13. def setUpClass(cls, *args, **kwargs):
  14. super().setUpClass(*args, **kwargs)
  15. cls.AuthApiKey = cls.env["auth.api.key"]
  16. emc_manager = cls.env.ref("easy_my_coop.res_users_manager_emc_demo")
  17. cls.api_key_test = cls.AuthApiKey.create(
  18. {"name": "test-key", "key": "api-key", "user_id": emc_manager.id}
  19. )
  20. def setUp(self):
  21. super().setUp()
  22. self.session = requests.Session()
  23. self.demo_request_1 = self.browse_ref(
  24. "easy_my_coop.subscription_request_1_demo"
  25. )
  26. self.demo_request_1_dict = {
  27. "id": self.demo_request_1.id,
  28. "name": "Manuel Dublues",
  29. "email": "manuel@demo.net",
  30. "date": "2020-02-23",
  31. "ordered_parts": 3,
  32. "share_product": {
  33. "id": self.demo_request_1.share_product_id.id,
  34. "name": "Part B - Worker",
  35. },
  36. "address": {
  37. "street": "schaerbeekstraat",
  38. "zip_code": "1111",
  39. "city": "Brussels",
  40. "country": "BE",
  41. },
  42. "lang": "en_US",
  43. }
  44. def http_get(self, url, headers=None):
  45. key_dict = {"API-KEY": "api-key"}
  46. if headers:
  47. headers.update(key_dict)
  48. else:
  49. headers = key_dict
  50. if url.startswith("/"):
  51. url = "http://%s:%s%s" % (HOST, PORT, url)
  52. return self.session.get(url, headers=headers)
  53. def http_get_content(self, route, headers=None):
  54. response = self.http_get(route, headers=headers)
  55. self.assertEquals(response.status_code, 200)
  56. return json.loads(response.content)
  57. def http_post(self, url, data):
  58. if url.startswith("/"):
  59. url = "http://%s:%s%s" % (HOST, PORT, url)
  60. return self.session.post(url, data=data)
  61. @staticmethod
  62. def html_doc(response):
  63. """Get an HTML LXML document."""
  64. return html.fromstring(response.content)
  65. def login(self, login, password):
  66. url = "/web/login"
  67. response = self.http_get(url)
  68. self.assertEquals(response.status_code, 200)
  69. doc = self.html_doc(response)
  70. token = doc.xpath("//input[@name='csrf_token']")[0].get("value")
  71. response = self.http_post(
  72. url=url,
  73. data={"login": login, "password": password, "csrf_token": token},
  74. )
  75. self.assertEquals(response.status_code, 200)
  76. return response