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.

128 lines
5.5 KiB

  1. # Copyright 2020 Florent de Labarre
  2. # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
  3. from datetime import datetime
  4. from unittest import mock
  5. from odoo import fields
  6. from odoo.tests import common
  7. _module_ns = 'odoo.addons.account_bank_statement_import_online_ponto'
  8. _provider_class = (
  9. _module_ns
  10. + '.models.online_bank_statement_provider_ponto'
  11. + '.OnlineBankStatementProviderPonto'
  12. )
  13. class TestAccountBankAccountStatementImportOnlineQonto(
  14. common.TransactionCase
  15. ):
  16. def setUp(self):
  17. super().setUp()
  18. self.now = fields.Datetime.now()
  19. self.currency_eur = self.env.ref('base.EUR')
  20. self.currency_usd = self.env.ref('base.USD')
  21. self.AccountJournal = self.env['account.journal']
  22. self.ResPartnerBank = self.env['res.partner.bank']
  23. self.OnlineBankStatementProvider = self.env[
  24. 'online.bank.statement.provider'
  25. ]
  26. self.AccountBankStatement = self.env['account.bank.statement']
  27. self.AccountBankStatementLine = self.env['account.bank.statement.line']
  28. self.bank_account = self.ResPartnerBank.create(
  29. {'acc_number': 'FR0214508000302245362775K46',
  30. 'partner_id': self.env.user.company_id.partner_id.id})
  31. self.journal = self.AccountJournal.create({
  32. 'name': 'Bank',
  33. 'type': 'bank',
  34. 'code': 'BANK',
  35. 'currency_id': self.currency_eur.id,
  36. 'bank_statements_source': 'online',
  37. 'online_bank_statement_provider': 'ponto',
  38. 'bank_account_id': self.bank_account.id,
  39. })
  40. self.provider = self.journal.online_bank_statement_provider_id
  41. self.mock_header = lambda: mock.patch(
  42. _provider_class + '._ponto_header',
  43. return_value={'Accept': 'application/json',
  44. 'Authorization': 'Bearer --TOKEN--'},
  45. )
  46. self.mock_account_ids = lambda: mock.patch(
  47. _provider_class + '._ponto_get_account_ids',
  48. return_value={'FR0214508000302245362775K46': 'id'},
  49. )
  50. self.mock_synchronisation = lambda: mock.patch(
  51. _provider_class + '._ponto_synchronisation',
  52. return_value=None,
  53. )
  54. self.mock_transaction = lambda: mock.patch(
  55. _provider_class + '._ponto_get_transaction',
  56. return_value=[{
  57. 'type': 'transaction',
  58. 'relationships': {'account': {
  59. 'links': {
  60. 'related': 'https://api.myponto.com/accounts/'},
  61. 'data': {'type': 'account',
  62. 'id': 'fd3d5b1d-fca9-4310-a5c8-76f2a9dc7c75'}}},
  63. 'id': '701ab965-21c4-46ca-b157-306c0646e0e2',
  64. 'attributes': {'valueDate': '2019-11-18T00:00:00.000Z',
  65. 'remittanceInformationType': 'unstructured',
  66. 'remittanceInformation': 'Minima vitae totam!',
  67. 'executionDate': '2019-11-20T00:00:00.000Z',
  68. 'description': 'Wire transfer',
  69. 'currency': 'EUR',
  70. 'counterpartReference': 'BE26089479973169',
  71. 'counterpartName': 'Osinski Group',
  72. 'amount': 6.08}},
  73. {'type': 'transaction',
  74. 'relationships': {
  75. 'account': {'links': {
  76. 'related': 'https://api.myponto.com/accounts/'},
  77. 'data': {
  78. 'type': 'account',
  79. 'id': 'fd3d5b1d-fca9-4310-a5c8-76f2a9dc7c75'}}},
  80. 'id': '9ac50483-16dc-4a82-aa60-df56077405cd',
  81. 'attributes': {
  82. 'valueDate': '2019-11-04T00:00:00.000Z',
  83. 'remittanceInformationType': 'unstructured',
  84. 'remittanceInformation': 'Quia voluptatem blanditiis.',
  85. 'executionDate': '2019-11-06T00:00:00.000Z',
  86. 'description': 'Wire transfer',
  87. 'currency': 'EUR',
  88. 'counterpartReference': 'BE97201830401438',
  89. 'counterpartName': 'Stokes-Miller',
  90. 'amount': 5.48}},
  91. {'type': 'transaction', 'relationships': {'account': {'links': {
  92. 'related': 'https://api.myponto.com/accounts/'},
  93. 'data': {
  94. 'type': 'account',
  95. 'id': 'fd3d5b1d-fca9-4310-a5c8-76f2a9dc7c75'}}},
  96. 'id': 'b21a6c65-1c52-4ba6-8cbc-127d2b2d85ff',
  97. 'attributes': {
  98. 'valueDate': '2019-11-04T00:00:00.000Z',
  99. 'remittanceInformationType': 'unstructured',
  100. 'remittanceInformation': 'Laboriosam repelo?',
  101. 'executionDate': '2019-11-04T00:00:00.000Z',
  102. 'description': 'Wire transfer', 'currency': 'EUR',
  103. 'counterpartReference': 'BE10325927501996',
  104. 'counterpartName': 'Strosin-Veum', 'amount': 5.83}}],
  105. )
  106. def test_ponto(self):
  107. with self.mock_transaction(), \
  108. self.mock_header(),\
  109. self.mock_synchronisation(), \
  110. self.mock_account_ids():
  111. lines, statement_values = self.provider._obtain_statement_data(
  112. datetime(2019, 11, 3),
  113. datetime(2019, 11, 17),
  114. )
  115. self.assertEqual(len(lines), 3)