Files
stock-logistics-warehouse/stock_reserve/tests/test_stock_reserve.py
2023-04-19 11:22:19 +02:00

71 lines
2.9 KiB
Python

# Copyright 2021 Tecnativa - Carlos Roca
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import fields
from odoo.tests import Form, common
class TestStockReserve(common.TransactionCase):
def setUp(self):
super().setUp()
warehouse_form = Form(self.env["stock.warehouse"])
warehouse_form.name = "Test warehouse"
warehouse_form.code = "TEST"
self.warehouse = warehouse_form.save()
product_form = Form(self.env["product.product"])
product_form.name = "Test Product"
product_form.detailed_type = "product"
self.product = product_form.save()
self.env["stock.quant"].create(
{
"product_id": self.product.id,
"location_id": self.warehouse.lot_stock_id.id,
"quantity": 10.0,
}
)
def _create_stock_reservation(self, qty):
form_reservation = Form(self.env["stock.reservation"])
form_reservation.product_id = self.product
form_reservation.product_uom_qty = qty
form_reservation.location_id = self.warehouse.lot_stock_id
return form_reservation.save()
def test_reservation_and_reservation_release(self):
reservation_1 = self._create_stock_reservation(6)
reservation_1.reserve()
self.assertFalse(reservation_1.picking_id)
self.assertEqual(self.product.virtual_available, 4)
reservation_2 = self._create_stock_reservation(1)
reservation_2.reserve()
self.assertFalse(reservation_2.picking_id)
self.assertEqual(self.product.virtual_available, 3)
reservation_1.release_reserve()
self.assertEqual(self.product.virtual_available, 9)
def test_cron_release(self):
reservation_1 = self._create_stock_reservation(6)
reservation_1.date_validity = fields.Date.from_string("2021-01-01")
reservation_1.reserve()
self.assertFalse(reservation_1.picking_id)
self.assertEqual(self.product.virtual_available, 4)
cron = self.env.ref("stock_reserve.ir_cron_release_stock_reservation")
cron.method_direct_trigger()
self.assertEqual(self.product.virtual_available, 10)
def test_cron_reserve(self):
reservation_1 = self._create_stock_reservation(11)
reservation_1.reserve()
self.assertFalse(reservation_1.picking_id)
self.assertEqual(reservation_1.state, "partially_available")
self.env["stock.quant"].create(
{
"product_id": self.product.id,
"location_id": self.warehouse.lot_stock_id.id,
"quantity": 10.0,
}
)
cron = self.env.ref("stock_reserve.ir_cron_reserve_waiting_confirmed")
cron.method_direct_trigger()
self.assertEqual(reservation_1.state, "assigned")
self.assertEqual(self.product.virtual_available, 9)