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.

142 lines
5.1 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 json
  5. from datetime import timedelta
  6. import odoo
  7. from odoo.fields import Date
  8. from odoo.addons.base_rest.controllers.main import _PseudoCollection
  9. from odoo.addons.component.core import WorkContext
  10. from .common import BaseEMCRestCase
  11. class TestSRController(BaseEMCRestCase):
  12. def setUp(self):
  13. super().setUp()
  14. collection = _PseudoCollection("emc.services", self.env)
  15. emc_services_env = WorkContext(
  16. model_name="rest.service.registration", collection=collection
  17. )
  18. self.service = emc_services_env.component(usage="subscription_request")
  19. def test_service(self):
  20. # kept as example
  21. # useful if you need to change data in database and check db type
  22. result = self.service.get(self.demo_request_1.id)
  23. self.assertEquals(self.demo_request_1_dict, result)
  24. all_sr = self.service.search()
  25. self.assertTrue(all_sr)
  26. sr_date = self.demo_request_1.date
  27. date_from = Date.to_string(sr_date - timedelta(days=1))
  28. date_to = Date.to_string(sr_date + timedelta(days=1))
  29. date_sr = self.service.search(date_from=date_from, date_to=date_to)
  30. self.assertTrue(date_sr)
  31. def test_route_get(self):
  32. id_ = self.demo_request_1.id
  33. route = "/api/subscription_request/%s" % id_
  34. content = self.http_get_content(route)
  35. self.assertEquals(self.demo_request_1_dict, content)
  36. @odoo.tools.mute_logger("odoo.addons.base_rest.http")
  37. def test_route_get_returns_not_found(self):
  38. route = "/api/subscription_request/%s" % "99999"
  39. response = self.http_get(route)
  40. self.assertEquals(response.status_code, 404)
  41. def test_route_get_string_returns_method_not_allowed(self):
  42. route = "/api/subscription_request/%s" % "abc"
  43. response = self.http_get(route)
  44. self.assertEquals(response.status_code, 405)
  45. def test_route_search_all(self):
  46. route = "/api/subscription_request"
  47. content = self.http_get_content(route)
  48. self.assertIn(self.demo_request_1_dict, content["rows"])
  49. def test_route_search_by_date(self):
  50. sr_date = self.demo_request_1.date
  51. date_from = Date.to_string(sr_date - timedelta(days=1))
  52. date_to = Date.to_string(sr_date + timedelta(days=1))
  53. route = "/api/subscription_request?date_from=%s" % date_from
  54. content = self.http_get_content(route)
  55. self.assertIn(self.demo_request_1_dict, content["rows"])
  56. route = "/api/subscription_request?date_to=%s" % date_to
  57. content = self.http_get_content(route)
  58. self.assertIn(self.demo_request_1_dict, content["rows"])
  59. route = "/api/subscription_request?date_from=%s&date_to=%s" % (
  60. date_from,
  61. date_to,
  62. )
  63. content = self.http_get_content(route)
  64. self.assertIn(self.demo_request_1_dict, content["rows"])
  65. route = "/api/subscription_request?date_from=%s" % "2300-01-01"
  66. content = self.http_get_content(route)
  67. self.assertEquals(content["count"], 0)
  68. route = "/api/subscription_request?date_to=%s" % "1900-01-01"
  69. content = self.http_get_content(route)
  70. self.assertEquals(content["count"], 0)
  71. @odoo.tools.mute_logger("odoo.addons.base_rest.http")
  72. def test_route_search_acd_date_returns_bad_request(self):
  73. route = "/api/subscription_request?date_from=%s" % "20200101"
  74. response = self.http_get(route)
  75. self.assertEquals(response.status_code, 400)
  76. def test_route_create(self):
  77. url = "/api/subscription_request"
  78. data = {
  79. "name": "Lisa des Danses",
  80. "email": "lisa@desdanses.be",
  81. "ordered_parts": 3,
  82. "share_product": self.demo_share_product.id,
  83. "address": {
  84. "street": "schaerbeekstraat",
  85. "zip_code": "1111",
  86. "city": "Brussels",
  87. "country": "BE",
  88. },
  89. "lang": "en_US",
  90. }
  91. response = self.http_post(url, data=data)
  92. self.assertEquals(response.status_code, 200)
  93. content = json.loads(response.content.decode("utf-8"))
  94. content.pop("id") # can't know id in advance
  95. expected = {
  96. **data,
  97. **{
  98. "date": Date.to_string(Date.today()),
  99. "state": "draft",
  100. "share_product": {
  101. "id": self.demo_share_product.id,
  102. "name": self.demo_share_product.name,
  103. },
  104. },
  105. }
  106. self.assertEquals(expected, content)
  107. def test_route_update(self):
  108. url = "/api/subscription_request/%s" % self.demo_request_1.id
  109. data = {"state": "done"}
  110. response = self.http_post(url, data=data)
  111. self.assertEquals(response.status_code, 200)
  112. content = json.loads(response.content.decode("utf-8"))
  113. expected = self.demo_request_1_dict
  114. expected["state"] = "done"
  115. self.assertEquals(expected, content)