251 lines
10 KiB
Python
251 lines
10 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import Command
|
|
from odoo.tests import Form, tagged
|
|
|
|
from odoo.addons.delivery.tests.common import DeliveryCommon
|
|
from odoo.addons.sale.tests.common import SaleCommon
|
|
|
|
|
|
@tagged('post_install', '-at_install')
|
|
class TestDeliveryAvailability(DeliveryCommon, SaleCommon):
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super().setUpClass()
|
|
|
|
cls.must_have_tag = cls.env['product.tag'].create({
|
|
'name': 'Must Have',
|
|
})
|
|
cls.exclude_tag = cls.env['product.tag'].create({
|
|
'name': 'Exclude',
|
|
})
|
|
|
|
cls.non_restricted_carrier = cls._prepare_carrier(cls.carrier.product_id)
|
|
cls.product2 = cls._prepare_carrier_product(name='Test Product 2')
|
|
|
|
def test_00_order_with_heavy_product_simple(self):
|
|
self.carrier.write({
|
|
'max_weight': 10.0,
|
|
})
|
|
|
|
self.product.write({
|
|
'weight': 11.0,
|
|
})
|
|
|
|
self.sale_order = self.env['sale.order'].create({
|
|
'partner_id': self.partner.id,
|
|
'partner_invoice_id': self.partner.id,
|
|
'order_line': [Command.create({
|
|
'product_id': self.product.id,
|
|
'product_uom_qty': 1,
|
|
})],
|
|
})
|
|
|
|
delivery_wizard = Form(self.env['choose.delivery.carrier'].with_context({
|
|
'default_order_id': self.sale_order.id,
|
|
'default_carrier_id': self.non_restricted_carrier.id,
|
|
}))
|
|
choose_delivery_carrier = delivery_wizard.save()
|
|
self.assertFalse(self.carrier.id in choose_delivery_carrier.available_carrier_ids.ids, "Product weight exceeds carrier's max weight")
|
|
|
|
def test_01_order_with_heavy_product_different_uom(self):
|
|
self.carrier.write({
|
|
'max_weight': 10.0,
|
|
})
|
|
|
|
self.product.write({
|
|
'weight': 1.0,
|
|
})
|
|
|
|
self.sale_order = self.env['sale.order'].create({
|
|
'partner_id': self.partner.id,
|
|
'partner_invoice_id': self.partner.id,
|
|
'order_line': [Command.create({
|
|
'product_id': self.product.id,
|
|
'product_uom_qty': 1,
|
|
'product_uom': self.uom_dozen.id,
|
|
})],
|
|
})
|
|
|
|
delivery_wizard = Form(self.env['choose.delivery.carrier'].with_context({
|
|
'default_order_id': self.sale_order.id,
|
|
'default_carrier_id': self.non_restricted_carrier.id,
|
|
}))
|
|
choose_delivery_carrier = delivery_wizard.save()
|
|
self.assertFalse(self.carrier.id in choose_delivery_carrier.available_carrier_ids.ids, "Order lines should be converted to the default UoM before checking weight")
|
|
|
|
def test_02_order_with_big_product_simple(self):
|
|
self.carrier.write({
|
|
'max_volume': 10.0,
|
|
})
|
|
|
|
self.product.write({
|
|
'volume': 11.0,
|
|
})
|
|
|
|
self.sale_order = self.env['sale.order'].create({
|
|
'partner_id': self.partner.id,
|
|
'partner_invoice_id': self.partner.id,
|
|
'order_line': [Command.create({
|
|
'product_id': self.product.id,
|
|
'product_uom_qty': 1,
|
|
})],
|
|
})
|
|
|
|
delivery_wizard = Form(self.env['choose.delivery.carrier'].with_context({
|
|
'default_order_id': self.sale_order.id,
|
|
'default_carrier_id': self.non_restricted_carrier.id,
|
|
}))
|
|
choose_delivery_carrier = delivery_wizard.save()
|
|
self.assertFalse(self.carrier.id in choose_delivery_carrier.available_carrier_ids.ids, "Product volume exceeds carrier's max volume")
|
|
|
|
def test_03_order_with_big_product_different_uom(self):
|
|
self.carrier.write({
|
|
'max_volume': 10.0,
|
|
})
|
|
|
|
self.product.write({
|
|
'volume': 1.0,
|
|
})
|
|
|
|
self.sale_order = self.env['sale.order'].create({
|
|
'partner_id': self.partner.id,
|
|
'partner_invoice_id': self.partner.id,
|
|
'order_line': [Command.create({
|
|
'product_id': self.product.id,
|
|
'product_uom_qty': 1,
|
|
'product_uom': self.uom_dozen.id,
|
|
})],
|
|
})
|
|
|
|
delivery_wizard = Form(self.env['choose.delivery.carrier'].with_context({
|
|
'default_order_id': self.sale_order.id,
|
|
'default_carrier_id': self.non_restricted_carrier.id,
|
|
}))
|
|
choose_delivery_carrier = delivery_wizard.save()
|
|
self.assertFalse(self.carrier.id in choose_delivery_carrier.available_carrier_ids.ids, "Order lines should be converted to the default UoM before checking volume")
|
|
|
|
def test_04_check_must_have_tag(self):
|
|
self.carrier.write({
|
|
'must_have_tag_ids': [self.must_have_tag.id],
|
|
})
|
|
|
|
self.sale_order = self.env['sale.order'].create({
|
|
'partner_id': self.partner.id,
|
|
'partner_invoice_id': self.partner.id,
|
|
'order_line': [Command.create({
|
|
'product_id': self.product.id,
|
|
'product_uom_qty': 1,
|
|
})],
|
|
})
|
|
|
|
delivery_wizard = Form(self.env['choose.delivery.carrier'].with_context({
|
|
'default_order_id': self.sale_order.id,
|
|
'default_carrier_id': self.non_restricted_carrier.id,
|
|
}))
|
|
choose_delivery_carrier = delivery_wizard.save()
|
|
self.assertFalse(self.carrier.id in choose_delivery_carrier.available_carrier_ids.ids, "Carrier must have tag is not set on any product in the order")
|
|
|
|
self.product.write({
|
|
'product_tag_ids': [self.must_have_tag.id],
|
|
})
|
|
delivery_wizard = Form(self.env['choose.delivery.carrier'].with_context({
|
|
'default_order_id': self.sale_order.id,
|
|
'default_carrier_id': self.non_restricted_carrier.id,
|
|
}))
|
|
choose_delivery_carrier = delivery_wizard.save()
|
|
self.assertTrue(self.carrier.id in choose_delivery_carrier.available_carrier_ids.ids, "Carrier must have tag is set on one product in the order")
|
|
|
|
def test_05_check_excluded_tag(self):
|
|
self.carrier.write({
|
|
'excluded_tag_ids': [self.exclude_tag.id],
|
|
})
|
|
|
|
self.sale_order = self.env['sale.order'].create({
|
|
'partner_id': self.partner.id,
|
|
'partner_invoice_id': self.partner.id,
|
|
'order_line': [Command.create({
|
|
'product_id': self.product.id,
|
|
'product_uom_qty': 1,
|
|
})],
|
|
})
|
|
|
|
delivery_wizard = Form(self.env['choose.delivery.carrier'].with_context({
|
|
'default_order_id': self.sale_order.id,
|
|
'default_carrier_id': self.non_restricted_carrier.id,
|
|
}))
|
|
choose_delivery_carrier = delivery_wizard.save()
|
|
self.assertTrue(self.carrier.id in choose_delivery_carrier.available_carrier_ids.ids, "Carrier excluded tag is not set on any product in the order")
|
|
|
|
self.product.write({
|
|
'product_tag_ids': [self.exclude_tag.id],
|
|
})
|
|
delivery_wizard = Form(self.env['choose.delivery.carrier'].with_context({
|
|
'default_order_id': self.sale_order.id,
|
|
'default_carrier_id': self.non_restricted_carrier.id,
|
|
}))
|
|
choose_delivery_carrier = delivery_wizard.save()
|
|
self.assertFalse(self.carrier.id in choose_delivery_carrier.available_carrier_ids.ids, "Carrier excluded tag is set on one product in the order")
|
|
|
|
def test_06_check_tags_complex(self):
|
|
self.carrier.write({
|
|
'must_have_tag_ids': [self.must_have_tag.id],
|
|
'excluded_tag_ids': [self.exclude_tag.id],
|
|
})
|
|
|
|
self.sale_order = self.env['sale.order'].create({
|
|
'partner_id': self.partner.id,
|
|
'partner_invoice_id': self.partner.id,
|
|
'order_line': [
|
|
Command.create({
|
|
'product_id': self.product.id,
|
|
'product_uom_qty': 1,
|
|
}),
|
|
Command.create({
|
|
'product_id': self.product2.id,
|
|
'product_uom_qty': 1,
|
|
})
|
|
],
|
|
})
|
|
|
|
delivery_wizard = Form(self.env['choose.delivery.carrier'].with_context({
|
|
'default_order_id': self.sale_order.id,
|
|
'default_carrier_id': self.non_restricted_carrier.id,
|
|
}))
|
|
choose_delivery_carrier = delivery_wizard.save()
|
|
self.assertFalse(self.carrier.id in choose_delivery_carrier.available_carrier_ids.ids, "Carrier must have tag is not set on any product in the order")
|
|
|
|
self.product.write({
|
|
'product_tag_ids': [self.must_have_tag.id],
|
|
})
|
|
delivery_wizard = Form(self.env['choose.delivery.carrier'].with_context({
|
|
'default_order_id': self.sale_order.id,
|
|
'default_carrier_id': self.non_restricted_carrier.id,
|
|
}))
|
|
choose_delivery_carrier = delivery_wizard.save()
|
|
self.assertTrue(self.carrier.id in choose_delivery_carrier.available_carrier_ids.ids, "Carrier must have tag is set on one product in the order")
|
|
|
|
self.product.write({
|
|
'product_tag_ids': [self.exclude_tag.id, self.must_have_tag.id],
|
|
})
|
|
delivery_wizard = Form(self.env['choose.delivery.carrier'].with_context({
|
|
'default_order_id': self.sale_order.id,
|
|
'default_carrier_id': self.non_restricted_carrier.id,
|
|
}))
|
|
choose_delivery_carrier = delivery_wizard.save()
|
|
self.assertFalse(self.carrier.id in choose_delivery_carrier.available_carrier_ids.ids, "Carrier excluded tag is set on one product in the order")
|
|
|
|
self.product.write({
|
|
'product_tag_ids': [self.must_have_tag.id],
|
|
})
|
|
self.product2.write({
|
|
'product_tag_ids': [self.exclude_tag.id],
|
|
})
|
|
delivery_wizard = Form(self.env['choose.delivery.carrier'].with_context({
|
|
'default_order_id': self.sale_order.id,
|
|
'default_carrier_id': self.non_restricted_carrier.id,
|
|
}))
|
|
choose_delivery_carrier = delivery_wizard.save()
|
|
self.assertFalse(self.carrier.id in choose_delivery_carrier.available_carrier_ids.ids, "Carrier excluded tag is set on one product in the order")
|