Files
enterprise-addons/sale_subscription/tests/test_subscription_invoice_payment.py
T

109 lines
4.4 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from werkzeug import urls
from odoo.tests import tagged, HttpCase
from odoo.addons.sale_subscription.tests.common_sale_subscription import TestSubscriptionCommon
@tagged('post_install', '-at_install')
class TestSubscriptionInvoicePayment(TestSubscriptionCommon, HttpCase):
def test_link_payment_to_invoice_when_portal_payment(self):
subscription = self.subscription.create({
'partner_id': self.partner.id,
'company_id': self.company.id,
'payment_token_id': self.payment_token.id,
'sale_order_template_id': self.subscription_tmpl.id,
})
subscription._onchange_sale_order_template_id()
subscription.action_confirm()
bank_journal = self.company_data['default_journal_bank']
dummy_provider = self.env['payment.provider'].create({
'name': "Dummy Provider",
'code': 'none',
'state': 'test',
'journal_id': bank_journal.id,
'is_published': True,
'payment_method_ids': [self.payment_method_id],
'allow_tokenization': True,
'redirect_form_view_id': self.env['ir.ui.view'].search([('type', '=', 'qweb')], limit=1).id,
})
data = {
'provider_id': dummy_provider.id,
'payment_method_id': self.payment_method_id,
'token_id': None,
'amount': subscription.amount_total,
'flow': 'direct',
'tokenization_requested': False,
'landing_route': subscription.get_portal_url(),
'access_token': subscription.access_token,
}
url = self._build_url("/my/orders/%s/transaction" % subscription.id)
self.make_jsonrpc_request(url, data)
subscription.transaction_ids._set_done()
subscription.transaction_ids.provider_id.journal_id.inbound_payment_method_line_ids[0].write({
'payment_provider_id': dummy_provider.id,
})
subscription.transaction_ids._post_process()
self.assertEqual(subscription.invoice_ids.matched_payment_ids, subscription.transaction_ids.payment_id)
expected_payment_state = self.env['account.move']._get_invoice_in_payment_state()
self.assertEqual(subscription.invoice_ids.payment_state, expected_payment_state)
def test_link_payment_to_invoice_when_payment_to_default_account(self):
subscription = self.subscription.create({
'partner_id': self.partner.id,
'company_id': self.company.id,
'payment_token_id': self.payment_token.id,
'sale_order_template_id': self.subscription_tmpl.id,
})
subscription._onchange_sale_order_template_id()
subscription.action_confirm()
bank_journal = self.company_data['default_journal_bank']
dummy_provider = self.env['payment.provider'].create({
'name': "Dummy Provider",
'code': 'none',
'state': 'test',
'journal_id': bank_journal.id,
'is_published': True,
'payment_method_ids': [self.payment_method_id],
'allow_tokenization': True,
'redirect_form_view_id': self.env['ir.ui.view'].search([('type', '=', 'qweb')], limit=1).id,
})
data = {
'provider_id': dummy_provider.id,
'payment_method_id': self.payment_method_id,
'token_id': None,
'amount': subscription.amount_total,
'flow': 'direct',
'tokenization_requested': False,
'landing_route': subscription.get_portal_url(),
'access_token': subscription.access_token,
}
url = self._build_url("/my/orders/%s/transaction" % subscription.id)
self.make_jsonrpc_request(url, data)
subscription.transaction_ids._set_done()
subscription.transaction_ids.provider_id.journal_id.inbound_payment_method_line_ids[0].write({
'payment_provider_id': dummy_provider.id,
'payment_account_id': bank_journal.default_account_id.id,
})
subscription.transaction_ids._post_process()
self.assertEqual(subscription.invoice_ids.matched_payment_ids, subscription.transaction_ids.payment_id)
self.assertEqual(subscription.invoice_ids.payment_state, "paid")
# Helper
def _build_url(self, route):
return urls.url_join(self.base_url(), route)