From 04e5456e2d215d6b3b4d5d0bf79e665c37ca1655 Mon Sep 17 00:00:00 2001 From: Jared Kipe Date: Mon, 31 Oct 2022 23:15:32 +0000 Subject: [PATCH] [IMP] delivery_hibou: initial common delivery tests --- delivery_hibou/tests/__init__.py | 1 + delivery_hibou/tests/common.py | 132 +++++++++++++++++++++++++++++++ 2 files changed, 133 insertions(+) create mode 100644 delivery_hibou/tests/common.py diff --git a/delivery_hibou/tests/__init__.py b/delivery_hibou/tests/__init__.py index d4e6373e..fa1a5173 100644 --- a/delivery_hibou/tests/__init__.py +++ b/delivery_hibou/tests/__init__.py @@ -1 +1,2 @@ +from . import common from . import test_delivery_hibou diff --git a/delivery_hibou/tests/common.py b/delivery_hibou/tests/common.py new file mode 100644 index 00000000..dcd609e5 --- /dev/null +++ b/delivery_hibou/tests/common.py @@ -0,0 +1,132 @@ + +from odoo.tests.common import Form, TransactionCase +from odoo.exceptions import UserError + + +class CommonTestCarrier(TransactionCase): + def setUp(self): + super().setUp() + # fill in your carrier in setUp + self.carrier = False + + self.state_us_wa = self.env.ref('base.state_us_48') + self.country_us = self.state_us_wa.country_id + + self.shipper_partner = self.env['res.partner'].create({ + 'name': 'Start Warehouse', + 'street': '2901 174th St. NE', + 'city': 'Marysville', # note other city will return error for this field+zip + 'state_id': self.state_us_wa.id, + 'country_id': self.country_us.id, + 'zip': '98271', + }) + self.shipper_warehouse = self.env['stock.warehouse'].create({ + 'partner_id': self.shipper_partner.id, + 'name': 'US Warehouse', + 'code': 'TWH', + }) + self.receiver_partner = self.env['res.partner'].create({ + 'name': 'Receiver Address', + 'street': '336 Chardonnay Ave.', + 'street2': 'Suite A', + 'city': 'Prosser', + 'state_id': self.state_us_wa.id, + 'country_id': self.country_us.id, + 'zip': '99350', + }) + self.order_product = self.env['product.product'].create({ + 'name': 'Test physical product', + 'type': 'product', + 'weight': 1.5, + 'volume': 0.8, + }) + # Make some available + self.env['stock.quant']._update_available_quantity(self.order_product, self.shipper_warehouse.lot_stock_id, 100) + self.sale_order = self.env['sale.order'].create({ + 'partner_id': self.receiver_partner.id, + 'warehouse_id': self.shipper_warehouse.id, + 'order_line': [(0, 0, { + 'name': self.order_product.name, + 'product_id': self.order_product.id, + 'product_uom_qty': 3.0, + 'product_uom': self.order_product.uom_id.id, + 'price_unit': self.order_product.lst_price, + })], + }) + + def _so_pick_shipping(self, default_carrier_id=False): + # Regular Update Shipping functionality + delivery_wizard = Form(self.env['choose.delivery.carrier'].with_context({ + 'default_order_id': self.sale_order.id, + 'default_carrier_id': default_carrier_id or self.carrier.id, + })) + choose_delivery_carrier = delivery_wizard.save() + choose_delivery_carrier.update_price() + self.assertGreater(choose_delivery_carrier.delivery_price, 0.0, "No delivery price during carrier selection.") + choose_delivery_carrier.button_confirm() + self.assertEqual(self.sale_order.carrier_id, self.carrier) + + def _test_01_assert_rate_shipment_multi_rates_order(self, rates, order): + self.assertTrue(rates) + + def _test_01_assert_rate_shipment_multi_rates_picking(self, rates, picking): + self.assertTrue(rates) + + def _test_01_assert_rate_shipment_multi_rates_package(self, rates, picking, package): + self.assertTrue(rates) + + def test_01_rate_order(self): + if not self.carrier: + return + self._so_pick_shipping() + + # Multi-rating with sale order + rates = self.carrier.rate_shipment_multi(order=self.sale_order) + self._test_01_assert_rate_shipment_multi_rates_order(rates, self.sale_order) + + # Multi-rating with picking + self.sale_order.action_confirm() + picking = self.sale_order.picking_ids + self.assertEqual(len(picking), 1) + rates = self.carrier.rate_shipment_multi(picking=picking) + self._test_01_assert_rate_shipment_multi_rates_picking(rates, picking) + + # Multi-rate package + self.assertEqual(picking.move_lines.reserved_availability, 3.0) + picking.move_line_ids.qty_done = 1.0 + context = dict( + current_package_carrier_type=picking.carrier_id.delivery_type, + default_picking_id=picking.id + ) + choose_package_wizard = self.env['choose.delivery.package'].with_context(context).create({}) + self.assertEqual(choose_package_wizard.shipping_weight, 1.5) + choose_package_wizard.action_put_in_pack() + package = picking.move_line_ids.mapped('result_package_id') + self.assertEqual(len(package), 1) + + rates = self.carrier.rate_shipment_multi(picking=picking, packages=package) + self._test_01_assert_rate_shipment_multi_rates_package(rates, picking, package) + + def _test_02_assert_post_send_to_shipper(self, picking): + self.assertTrue(picking.carrier_tracking_ref) + self.assertEqual(picking.message_attachment_count, 1) + self.assertGreater(picking.carrier_price, 0.0) + + def _test_02_assert_post_cancel_shipment(self, picking): + self.assertFalse(picking.carrier_tracking_ref) + + def test_02_shipping(self): + if not self.carrier: + return + self._so_pick_shipping() + self.sale_order.action_confirm() + picking = self.sale_order.picking_ids + self.assertEqual(picking.carrier_id, self.carrier) + self.assertEqual(picking.message_attachment_count, 0) + + picking.send_to_shipper() + self._test_02_assert_post_send_to_shipper(picking) + + # Void + picking.cancel_shipment() + self._test_02_assert_post_cancel_shipment(picking)