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.

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