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.

117 lines
4.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. from odoo.fields import Date
  5. from odoo.addons.base_rest.controllers.main import _PseudoCollection
  6. from odoo.addons.component.core import WorkContext
  7. from .common import BaseEMCRestCase
  8. class TestAccountInvoiceController(BaseEMCRestCase):
  9. @classmethod
  10. def setUpClass(cls, *args, **kwargs):
  11. super().setUpClass(*args, **kwargs)
  12. def setUp(self):
  13. res = 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.ai_service = emc_services_env.component(usage="invoice")
  19. self.share_type_A = self.browse_ref(
  20. "easy_my_coop.product_template_share_type_1_demo"
  21. )
  22. self._capital_release_create()
  23. today = Date.to_string(Date.today())
  24. self.demo_invoice_dict = {
  25. "id": self.capital_release.get_api_external_id(),
  26. "number": "xxx", # can't guess it
  27. "partner": {
  28. "id": self.coop_candidate.get_api_external_id(),
  29. "name": self.coop_candidate.name,
  30. },
  31. "account": {
  32. "id": self.cooperator_account.get_api_external_id(),
  33. "name": self.cooperator_account.name,
  34. },
  35. "journal": {
  36. "id": self.subscription_journal.get_api_external_id(),
  37. "name": self.subscription_journal.name,
  38. },
  39. "subscription_request": {},
  40. "state": "open",
  41. "date": today,
  42. "date_invoice": today,
  43. "date_due": today,
  44. "type": "out_invoice",
  45. "invoice_lines": [
  46. {
  47. "name": "Share Type A",
  48. "product": {"id": 1, "name": "Part A - Founder"},
  49. "price_unit": 100.0,
  50. "quantity": 2.0,
  51. "account": {
  52. "id": self.equity_account.get_api_external_id(),
  53. "name": self.equity_account.name,
  54. },
  55. }
  56. ],
  57. }
  58. return res
  59. def _capital_release_create(self):
  60. self.coop_candidate = self.env["res.partner"].create(
  61. {
  62. "name": "Catherine des Champs",
  63. "company_id": self.company.id,
  64. "property_account_receivable_id": self.receivable.id,
  65. "property_account_payable_id": self.payable.id,
  66. }
  67. )
  68. capital_release_line = [
  69. (
  70. 0,
  71. False,
  72. {
  73. "name": "Share Type A",
  74. "account_id": self.equity_account.id,
  75. "quantity": 2.0,
  76. "price_unit": 100.0,
  77. "product_id": self.share_type_A.product_variant_id.id,
  78. },
  79. )
  80. ]
  81. self.capital_release = self.env["account.invoice"].create(
  82. {
  83. "number": "Capital Release Example",
  84. "partner_id": self.coop_candidate.id,
  85. "type": "out_invoice",
  86. "invoice_line_ids": capital_release_line,
  87. "account_id": self.cooperator_account.id,
  88. "journal_id": self.subscription_journal.id,
  89. }
  90. )
  91. self.capital_release.action_invoice_open()
  92. def test_service_get(self):
  93. external_id = self.capital_release.get_api_external_id()
  94. result = self.ai_service.get(external_id)
  95. expected = self.demo_invoice_dict.copy()
  96. expected["number"] = result["number"]
  97. self.assertEquals(expected, result)
  98. def test_route_get(self):
  99. external_id = self.capital_release.get_api_external_id()
  100. route = "/api/invoice/%s" % external_id
  101. content = self.http_get_content(route)
  102. expected = self.demo_invoice_dict.copy()
  103. expected["number"] = content["number"]
  104. self.assertEquals(expected, content)