[IMP] stock_delivery_planner: improve unit tests

This commit is contained in:
Cedric Collins
2021-09-13 16:33:15 -05:00
parent e43377e500
commit b64e2f25d7

View File

@@ -1,34 +1,33 @@
from odoo import fields from odoo import fields
from odoo.tests.common import Form, TransactionCase from odoo.tests.common import Form, TransactionCase
# import logging
# _logger = logging.getLogger(__name__)
class TestStockDeliveryPlanner(TransactionCase): class TestStockDeliveryPlanner(TransactionCase):
def setUp(self): def setUp(self):
"""
NOTE: demo Fedex credentials may not work. Test credentials may not return all service types.
Configuring production credentials may be necessary for this test to run.
"""
super(TestStockDeliveryPlanner, self).setUp() super(TestStockDeliveryPlanner, self).setUp()
try: try:
self.fedex_delivery = self.browse_ref('delivery_fedex.delivery_carrier_fedex_us') self.fedex_ground = self.browse_ref('delivery_fedex.delivery_carrier_fedex_us')
except ValueError: except ValueError:
self.skipTest('FedEx Shipping Connector demo data is required to run this test.') self.skipTest('FedEx Shipping Connector demo data is required to run this test.')
self.env['ir.config_parameter'].sudo().set_param('sale.order.planner.carrier_domain', self.env['ir.config_parameter'].sudo().set_param('sale.order.planner.carrier_domain',
"[('id', 'in', (%d,))]" % self.fedex_delivery.id) "[('id', 'in', (%d,))]" % self.fedex_ground.id)
self.env['ir.config_parameter'].sudo().set_param('stock.delivery.planner.carrier_domain', self.env['ir.config_parameter'].sudo().set_param('stock.delivery.planner.carrier_domain',
"[('id', 'in', (%d,))]" % self.fedex_delivery.id) "[('id', 'in', (%d,))]" % self.fedex_ground.id)
# Does it make sense to set default package in fedex_rate_shipment_multi # Does it make sense to set default package in fedex_rate_shipment_multi
# instead of relying on a correctly configured delivery method? # instead of relying on a correctly configured delivery method?
self.fedex_package = self.browse_ref('delivery_fedex.fedex_packaging_FEDEX_25KG_BOX') self.fedex_package = self.browse_ref('delivery_fedex.fedex_packaging_FEDEX_25KG_BOX')
self.default_package = self.browse_ref('delivery_fedex.fedex_packaging_YOUR_PACKAGING') self.default_package = self.browse_ref('delivery_fedex.fedex_packaging_YOUR_PACKAGING')
self.fedex_delivery.fedex_default_packaging_id = self.default_package self.fedex_ground.fedex_default_packaging_id = self.default_package
# PRIORITY_OVERNIGHT might not be available depending on time of day? # PRIORITY_OVERNIGHT might not be available depending on time of day?
self.fedex_delivery.fedex_service_type = 'GROUND_HOME_DELIVERY' self.fedex_ground.fedex_service_type = 'FEDEX_GROUND'
self.fedex_delivery_express = self.fedex_delivery.fedex_find_delivery_carrier_for_service('FEDEX_EXPRESS_SAVER')
if self.fedex_delivery_express: self.fedex_2_day = self.fedex_ground.copy()
self.fedex_delivery_express.fedex_default_packaging_id = self.default_package self.fedex_2_day.name = 'Test FedEx Delivery'
else: self.fedex_2_day.fedex_service_type = 'FEDEX_2_DAY'
self.fedex_delivery_express = self.fedex_delivery.copy()
self.fedex_delivery_express.name = 'Test FedEx Delivery'
self.fedex_delivery_express.fedex_service_type = 'FEDEX_EXPRESS_SAVER'
delivery_calendar = self.env['resource.calendar'].create({ delivery_calendar = self.env['resource.calendar'].create({
'name': 'Test Delivery Calendar', 'name': 'Test Delivery Calendar',
@@ -41,8 +40,8 @@ class TestStockDeliveryPlanner(TransactionCase):
(0, 0, {'name': 'Friday', 'dayofweek': '4', 'hour_from': 0, 'hour_to': 24, 'day_period': 'morning'}), (0, 0, {'name': 'Friday', 'dayofweek': '4', 'hour_from': 0, 'hour_to': 24, 'day_period': 'morning'}),
], ],
}) })
self.fedex_delivery.delivery_calendar_id = delivery_calendar self.fedex_ground.delivery_calendar_id = delivery_calendar
self.fedex_delivery_express.delivery_calendar_id = delivery_calendar self.fedex_2_day.delivery_calendar_id = delivery_calendar
self.env['stock.warehouse'].search([]).write({'shipping_calendar_id': delivery_calendar.id}) self.env['stock.warehouse'].search([]).write({'shipping_calendar_id': delivery_calendar.id})
# needs a valid address for sender and recipient # needs a valid address for sender and recipient
@@ -68,6 +67,7 @@ class TestStockDeliveryPlanner(TransactionCase):
'zip': '98270', 'zip': '98270',
'country_id': self.country_usa.id, 'country_id': self.country_usa.id,
'property_product_pricelist': pricelist.id, 'property_product_pricelist': pricelist.id,
'is_company': True,
# 'partner_latitude': 48.05636, # 'partner_latitude': 48.05636,
# 'partner_longitude': -122.14922, # 'partner_longitude': -122.14922,
}) })
@@ -97,7 +97,7 @@ class TestStockDeliveryPlanner(TransactionCase):
order_plan_action = self.sale_order.action_planorder() order_plan_action = self.sale_order.action_planorder()
order_plan = self.env[order_plan_action['res_model']].browse(order_plan_action['res_id']) order_plan = self.env[order_plan_action['res_model']].browse(order_plan_action['res_id'])
order_plan.planning_option_ids.filtered(lambda o: o.carrier_id == self.fedex_delivery).select_plan() order_plan.planning_option_ids.filtered(lambda o: o.carrier_id == self.fedex_ground).select_plan()
self.sale_order.action_confirm() self.sale_order.action_confirm()
self.picking = self.sale_order.picking_ids self.picking = self.sale_order.picking_ids
@@ -109,7 +109,7 @@ class TestStockDeliveryPlanner(TransactionCase):
grp_pack = self.env.ref('stock.group_tracking_lot') grp_pack = self.env.ref('stock.group_tracking_lot')
self.env.user.write({'groups_id': [(4, grp_pack.id)]}) self.env.user.write({'groups_id': [(4, grp_pack.id)]})
self.assertEqual(self.picking.carrier_id, self.fedex_delivery, 'Carrier did not carry over to Delivery Order') self.assertEqual(self.picking.carrier_id, self.fedex_ground, 'Carrier did not carry over to Delivery Order')
self.assertEqual(self.picking.weight, 5.0) self.assertEqual(self.picking.weight, 5.0)
self.assertEqual(self.picking.shipping_weight, 0.0) self.assertEqual(self.picking.shipping_weight, 0.0)
@@ -125,21 +125,18 @@ class TestStockDeliveryPlanner(TransactionCase):
planner = self.env[action['res_model']].browse(action['res_id']) planner = self.env[action['res_model']].browse(action['res_id'])
self.assertEqual(planner.picking_id, self.picking) self.assertEqual(planner.picking_id, self.picking)
# _logger.warn('delivery plan options: %s' % ', '.join(planner.plan_option_ids.mapped('carrier_id.name'))) self.assertGreater(len(planner.plan_option_ids), 1)
# Why am I only getting one rate back? Does FEDEX_EXPRESS_SAVER not work on Fridays or something?
# self.assertGreater(len(planner.plan_option_ids), 1)
# plan_option = planner.plan_option_ids.filtered(lambda o: o.carrier_id == self.fedex_delivery_express) plan_option = planner.plan_option_ids.filtered(lambda o: o.carrier_id == self.fedex_2_day)
plan_option = planner.plan_option_ids.filtered(lambda o: o.carrier_id == self.fedex_delivery)
self.assertEqual(len(plan_option), 1) self.assertEqual(len(plan_option), 1)
self.assertGreater(plan_option.price, 0.0) self.assertGreater(plan_option.price, 0.0)
self.assertEqual(plan_option.date_planned.date(), fields.Date().today()) self.assertEqual(plan_option.date_planned.date(), fields.Date().today())
self.assertTrue(plan_option.requested_date) self.assertTrue(plan_option.requested_date)
# self.assertEqual(plan_option.transit_days, 3) self.assertEqual(plan_option.transit_days, 2)
self.assertEqual(plan_option.transit_days, 1)
self.assertEqual(plan_option.sale_requested_date, self.sale_order.requested_date) self.assertEqual(plan_option.sale_requested_date, self.sale_order.requested_date)
# self.assertEqual(plan_option.days_different, 2) # Order Planner expects to ship tomorrow: we are shipping a day early and using
# 2-day shipping instead of 3, giving us 2 days difference
self.assertEqual(plan_option.days_different, -2.0)
plan_option.select_plan() plan_option.select_plan()
# self.assertEqual(self.picking.carrier_id, self.fedex_delivery_express) self.assertEqual(self.picking.carrier_id, self.fedex_2_day)
self.assertEqual(self.picking.carrier_id, self.fedex_delivery)