summaryrefslogtreecommitdiff
path: root/addons/delivery/tests/test_delivery_stock_move.py
diff options
context:
space:
mode:
Diffstat (limited to 'addons/delivery/tests/test_delivery_stock_move.py')
-rw-r--r--addons/delivery/tests/test_delivery_stock_move.py100
1 files changed, 100 insertions, 0 deletions
diff --git a/addons/delivery/tests/test_delivery_stock_move.py b/addons/delivery/tests/test_delivery_stock_move.py
new file mode 100644
index 00000000..a9d5b7d5
--- /dev/null
+++ b/addons/delivery/tests/test_delivery_stock_move.py
@@ -0,0 +1,100 @@
+# -*- coding: utf-8 -*-
+
+from odoo.addons.account.tests.common import AccountTestInvoicingCommon
+from odoo.tests import tagged, Form
+
+
+@tagged('post_install', '-at_install')
+class StockMoveInvoice(AccountTestInvoicingCommon):
+
+ @classmethod
+ def setUpClass(cls, chart_template_ref=None):
+ super().setUpClass(chart_template_ref=chart_template_ref)
+
+ cls.ProductProduct = cls.env['product.product']
+ cls.SaleOrder = cls.env['sale.order']
+ cls.AccountJournal = cls.env['account.journal']
+
+ cls.partner_18 = cls.env['res.partner'].create({'name': 'My Test Customer'})
+ cls.pricelist_id = cls.env.ref('product.list0')
+ cls.product_11 = cls.env['product.product'].create({'name': 'A product to deliver'})
+ cls.product_cable_management_box = cls.env['product.product'].create({
+ 'name': 'Another product to deliver',
+ 'weight': 1.0,
+ 'invoice_policy': 'order',
+ })
+ cls.product_uom_unit = cls.env.ref('uom.product_uom_unit')
+ cls.product_delivery_normal = cls.env['product.product'].create({
+ 'name': 'Normal Delivery Charges',
+ 'invoice_policy': 'order',
+ 'type': 'service',
+ 'list_price': 10.0,
+ 'categ_id': cls.env.ref('delivery.product_category_deliveries').id,
+ })
+ cls.normal_delivery = cls.env['delivery.carrier'].create({
+ 'name': 'Normal Delivery Charges',
+ 'fixed_price': 10,
+ 'delivery_type': 'fixed',
+ 'product_id': cls.product_delivery_normal.id,
+ })
+
+ def test_01_delivery_stock_move(self):
+ # Test if the stored fields of stock moves are computed with invoice before delivery flow
+ self.product_11.write({
+ 'weight': 0.25,
+ })
+
+ self.sale_prepaid = self.SaleOrder.create({
+ 'partner_id': self.partner_18.id,
+ 'partner_invoice_id': self.partner_18.id,
+ 'partner_shipping_id': self.partner_18.id,
+ 'pricelist_id': self.pricelist_id.id,
+ 'order_line': [(0, 0, {
+ 'name': 'Cable Management Box',
+ 'product_id': self.product_cable_management_box.id,
+ 'product_uom_qty': 2,
+ 'product_uom': self.product_uom_unit.id,
+ 'price_unit': 750.00,
+ })],
+ })
+
+ # I add delivery cost in Sales order
+ delivery_wizard = Form(self.env['choose.delivery.carrier'].with_context({
+ 'default_order_id': self.sale_prepaid.id,
+ 'default_carrier_id': self.normal_delivery.id,
+ }))
+ choose_delivery_carrier = delivery_wizard.save()
+ choose_delivery_carrier.button_confirm()
+
+ # I confirm the SO.
+ self.sale_prepaid.action_confirm()
+ self.sale_prepaid._create_invoices()
+
+ # I check that the invoice was created
+ self.assertEqual(len(self.sale_prepaid.invoice_ids), 1, "Invoice not created.")
+
+ # I confirm the invoice
+
+ self.invoice = self.sale_prepaid.invoice_ids
+ self.invoice.action_post()
+
+ # I pay the invoice.
+ self.journal = self.AccountJournal.search([('type', '=', 'cash'), ('company_id', '=', self.sale_prepaid.company_id.id)], limit=1)
+
+ register_payments = self.env['account.payment.register'].with_context(active_model='account.move', active_ids=self.invoice.ids).create({
+ 'journal_id': self.journal.id,
+ })
+ register_payments._create_payments()
+
+ # Check the SO after paying the invoice
+ self.assertNotEqual(self.sale_prepaid.invoice_count, 0, 'order not invoiced')
+ self.assertTrue(self.sale_prepaid.invoice_status == 'invoiced', 'order is not invoiced')
+ self.assertEqual(len(self.sale_prepaid.picking_ids), 1, 'pickings not generated')
+
+ # Check the stock moves
+ moves = self.sale_prepaid.picking_ids.move_lines
+ self.assertEqual(moves[0].product_qty, 2, 'wrong product_qty')
+ self.assertEqual(moves[0].weight, 2.0, 'wrong move weight')
+
+ # Ship
+ self.picking = self.sale_prepaid.picking_ids._action_done()