1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
# -*- coding: utf-8 -*-
from odoo import tests
from odoo.addons.account.tests.common import AccountTestInvoicingCommon
from odoo.tools import mute_logger
@tests.tagged('post_install', '-at_install')
class TestSaleTransaction(AccountTestInvoicingCommon):
@classmethod
def setUpClass(cls, chart_template_ref=None):
super().setUpClass(chart_template_ref=chart_template_ref)
cls.company_data['company'].country_id = cls.env.ref('base.us')
cls.order = cls.env['sale.order'].create({
'partner_id': cls.partner_a.id,
'order_line': [
(0, False, {
'product_id': cls.product_a.id,
'name': '1 Product',
'price_unit': 100.0,
}),
],
})
cls.env.ref('payment.payment_acquirer_transfer').journal_id = cls.company_data['default_journal_cash']
cls.transaction = cls.order._create_payment_transaction({
'acquirer_id': cls.env.ref('payment.payment_acquirer_transfer').id,
})
def test_sale_invoicing_from_transaction(self):
''' Test the following scenario:
- Create a sale order
- Create a transaction for the sale order.
- Confirm the transaction but no invoice generated automatically.
- Create manually an invoice for this sale order.
=> The invoice must be paid.
'''
self.transaction._set_transaction_done()
self.transaction._post_process_after_done()
# Assert a posted payment has been generated at this point.
self.assertTrue(self.transaction.payment_id)
self.assertEqual(self.transaction.payment_id.state, 'posted')
# Doesn't work with stock installed.
# invoice = self.order._create_invoices()
# invoice.post()
#
# self.assertTrue(invoice.payment_state in ('in_payment', 'paid'), "Invoice should be paid")
def test_sale_transaction_mismatch(self):
"""Test that a transaction for the incorrect amount does not validate the SO."""
# modify order total
self.order.order_line[0].price_unit = 200.0
self.transaction._set_transaction_done()
with mute_logger('odoo.addons.sale.models.payment'):
self.transaction._post_process_after_done()
self.assertEqual(self.order.state, 'draft', 'a transaction for an incorrect amount should not validate a quote')
|