mirror of
https://github.com/OCA/stock-logistics-warehouse.git
synced 2025-01-21 14:27:28 +02:00
71 lines
2.9 KiB
Python
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)
|