Initial commit: Sale packages

This commit is contained in:
Ernad Husremovic 2025-08-29 15:20:49 +02:00
commit 14e3d26998
6469 changed files with 2479670 additions and 0 deletions

View file

@ -0,0 +1,8 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import test_express_checkout_flows
from . import test_ui
from . import test_controller
from . import test_sale_order
from . import test_website_sale_controller

View file

@ -0,0 +1,149 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from unittest.mock import patch
from odoo.exceptions import UserError, ValidationError
from odoo.fields import Command
from odoo.tests import tagged
from odoo.addons.payment.tests.common import PaymentCommon
from odoo.addons.sale.tests.common import SaleCommon
from odoo.addons.website_sale_delivery.controllers.main import WebsiteSaleDelivery, PaymentPortalDelivery
from odoo.addons.website.tools import MockRequest
@tagged('post_install', '-at_install')
class TestWebsiteSaleDeliveryController(PaymentCommon, SaleCommon):
def setUp(self):
super().setUp()
self.website = self.env.ref('website.default_website')
self.Controller = WebsiteSaleDelivery()
# test that changing the carrier while there is a pending transaction raises an error
def test_controller_change_carrier_when_transaction(self):
with MockRequest(self.env, website=self.website):
order = self.website.sale_get_order(force_create=True)
order.transaction_ids = self._create_transaction(flow='redirect', state='pending')
with self.assertRaises(UserError):
with patch(
'odoo.addons.website_sale.models.website.Website.sale_get_order',
return_value=order,
): # Patch to retrieve the order even if it is linked to a pending transaction.
self.Controller.update_eshop_carrier(carrier_id=1)
# test that changing the carrier while there is a draft transaction doesn't raise an error
def test_controller_change_carrier_when_draft_transaction(self):
with MockRequest(self.env, website=self.website):
order = self.website.sale_get_order(force_create=True)
order.transaction_ids = self._create_transaction(flow='redirect', state='draft')
self.Controller.update_eshop_carrier(carrier_id=1)
def test_address_states(self):
US = self.env.ref('base.us')
MX = self.env.ref('base.mx')
# Set all carriers to mexico
self.env['delivery.carrier'].sudo().search([('website_published', '=', True)]).country_ids = [(6, 0, [MX.id])]
# Create a new carrier to only one state in mexico
self.env['delivery.carrier'].create({
'name': "One_state",
'product_id': self.env['product.product'].create({'name': "delivery product"}).id,
'website_published': True,
'country_ids': [(6, 0, [MX.id])],
'state_ids': [(6, 0, [MX.state_ids.ids[0]])]
})
country_info = self.Controller.country_infos(country=MX, mode="shipping")
self.assertEqual(len(country_info['states']), len(MX.state_ids))
country_info = self.Controller.country_infos(country=US, mode="shipping")
self.assertEqual(len(country_info['states']), 0)
def test_available_methods(self):
self.env['delivery.carrier'].search([]).action_archive()
self.product_delivery_poste = self.env['product.product'].create({
'name': 'The Poste',
'type': 'service',
'categ_id': self.env.ref('delivery.product_category_deliveries').id,
'sale_ok': False,
'purchase_ok': False,
'list_price': 20.0,
})
self.env['delivery.carrier'].create([
{
'name': 'Over 300',
'delivery_type': 'base_on_rule',
'product_id': self.product_delivery_poste.id,
'website_published': True,
'price_rule_ids': [
Command.create({
'operator': '>=',
'max_value': 300,
'variable': 'price',
}),
],
}, {
'name': 'Under 300',
'delivery_type': 'base_on_rule',
'product_id': self.product_delivery_poste.id,
'website_published': True,
'price_rule_ids': [
Command.create({
'operator': '<',
'max_value': 300,
'variable': 'price',
}),
],
}, {
'name': 'No rules',
'delivery_type': 'base_on_rule',
'product_id': self.product_delivery_poste.id,
'website_published': True,
}, {
'name': 'Fixed',
'product_id': self.product_delivery_poste.id,
'website_published': True,
},
])
self.assertEqual(self.empty_order._get_delivery_methods().mapped('name'), ['Under 300', 'Fixed'])
def test_validate_payment_with_no_available_delivery_method(self):
"""
An error should be raised if you try to validate an order with a storable
product without any delivery method available
"""
storable_product = self.env['product.product'].create({
'name': 'Storable Product',
'sale_ok': True,
'type': 'product',
'website_published': True,
})
carriers = self.env['delivery.carrier'].search([])
carriers.write({'website_published': False})
with MockRequest(self.env, website=self.website):
self.website.sale_get_order(force_create=True)
self.Controller.cart_update_json(product_id=storable_product.id, add_qty=1)
with self.assertRaises(ValidationError):
self.Controller.shop_payment_validate()
def test_check_order_delivery_before_payment(self):
product = self.env['product.product'].create({
'name': 'Test Product',
'sale_ok': True,
'website_published': True,
'lst_price': 1000.0,
'standard_price': 800.0,
})
website = self.website.with_user(self.public_user)
with MockRequest(product.with_user(self.public_user).env, website=website):
sale_order = self.env['sale.order'].create({
'partner_id': self.public_user.id,
'order_line': [Command.create({'product_id': product.id})],
'access_token': 'test_token',
})
# Try processing payment with a storable product and no carrier_id
with self.assertRaises(ValidationError):
PaymentPortalDelivery().shop_payment_transaction(sale_order.id, sale_order.access_token)

View file

@ -0,0 +1,387 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import json
from uuid import uuid4
from unittest.mock import Mock, patch
from werkzeug import urls
from odoo import Command
from odoo.http import root
from odoo.tests import tagged
from odoo.addons.base.tests.common import HttpCaseWithUserDemo
from odoo.addons.website_sale_delivery.controllers.main import WebsiteSaleDelivery as WebsiteSaleDeliveryController
@tagged('post_install', '-at_install')
class TestWebsiteSaleDeliveryExpressCheckoutFlows(HttpCaseWithUserDemo):
""" The goal of this method class is to test the address management on
express checkout.
"""
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.website = cls.env.ref('website.default_website')
cls.country_id = cls.env.ref('base.be').id
cls.sale_order = cls.env['sale.order'].create({
'partner_id': cls.website.user_id.partner_id.id,
'website_id': cls.website.id,
'order_line': [Command.create({
'product_id': cls.env['product.product'].create({
'name': 'Product A',
'list_price': 100,
'website_published': True,
'sale_ok': True}).id,
'name': 'Product A',
})]
})
cls.rate_shipment_result = {
'success': True,
'price': 5.0,
'warning_message': '',
}
cls.express_checkout_billing_values = {
'name': 'Express Checkout Partner',
'email': 'express@check.out',
'phone': '0000000000',
'street': 'ooo',
'street2': 'ppp',
'city': 'ooo',
'zip': '1200',
'country': 'US',
'state': 'AL',
}
cls.express_checkout_shipping_values = {
'name': 'Express Checkout Shipping Partner',
'email': 'express_shipping@check.out',
'phone': '1111111111',
'street': 'ooo shipping',
'street2': 'ppp shipping',
'city': 'ooo shipping',
'zip': '25781',
'country': 'US',
'state': 'WA',
}
cls.express_checkout_anonymized_shipping_values = {
'city': 'ooo shipping',
'zip': '25781',
'country': 'US',
'state': 'WA',
}
cls.express_checkout_anonymized_shipping_values_2 = {
'city': 'ooo shipping 2',
'zip': '91200',
'country': 'US',
'state': 'AL',
}
# Ensure demo user address exists and is valid
cls.user_demo.write({
'street': "215 Vine St",
'city': "Scranton",
'zip': "18503",
'country_id': cls.env.ref('base.us').id,
'state_id': cls.env.ref('base.state_us_39').id,
})
def setUp(self):
super().setUp()
self.express_checkout_demo_shipping_values = {
'name': self.user_demo.partner_id.name,
'email': self.user_demo.partner_id.email,
'phone': self.user_demo.partner_id.phone,
'street': self.user_demo.partner_id.street,
'street2': self.user_demo.partner_id.street2,
'city': self.user_demo.partner_id.city,
'zip': self.user_demo.partner_id.zip,
'country': self.user_demo.partner_id.country_id.code,
'state': self.user_demo.partner_id.state_id.code,
}
self.express_checkout_anonymized_demo_shipping_values = {
'city': self.user_demo.partner_id.city,
'zip': self.user_demo.partner_id.zip,
'country': self.user_demo.partner_id.country_id.code,
'state': self.user_demo.partner_id.state_id.code,
}
self.express_checkout_demo_shipping_values_2 = {
'name': 'Express Checkout Shipping Partner',
'email': 'express_shipping@check.out',
'phone': '1111111111',
'street': 'ooo shipping',
'street2': 'ppp shipping',
'city': self.user_demo.partner_id.city,
'zip': self.user_demo.partner_id.zip,
'country': self.user_demo.partner_id.country_id.code,
'state': self.user_demo.partner_id.state_id.code,
}
def assertPartnerShippingValues(self, partner, shipping_values):
for key, expected in shipping_values.items():
if key in ('state', 'country'):
value = partner[f'{key}_id'].code
else:
value = partner[key]
self.assertEqual(value, expected, "Shipping value should match")
if partner.state_id:
self.assertEqual(
partner.state_id.country_id,
partner.country_id,
"Partner's state should be within partner's country",
)
def _make_json_rpc_request(self, url, data=None):
""" Make a JSON-RPC request to the provided URL.
:param str url: The URL to make the request to
:param dict data: The data to be send in the request body in JSON-RPC 2.0 format
:return dict: The result of the JSON-RPC request
"""
rpc_request = {
"jsonrpc": "2.0",
"method": "call",
"id": str(uuid4()),
"params": data,
}
result = self.url_open(
url,
data=json.dumps(rpc_request).encode(),
headers={"Content-Type": "application/json"},
timeout=None,
)
if not result.ok:
return {}
return result.json().get("result", {})
def test_express_checkout_public_user_shipping_address_change(self):
""" Test that when using express checkout as a public user and selecting a shipping address,
a new partner is created if the partner of the SO is the public partner.
"""
session = self.authenticate(None, None)
session['sale_order_id'] = self.sale_order.id
root.session_store.save(session)
with patch(
'odoo.addons.delivery.models.delivery_carrier.DeliveryCarrier.rate_shipment',
return_value=self.rate_shipment_result
):
self._make_json_rpc_request(
urls.url_join(
self.base_url(), WebsiteSaleDeliveryController._express_checkout_shipping_route
), data={
'partial_shipping_address': dict(self.express_checkout_anonymized_shipping_values)
}
)
new_partner = self.sale_order.partner_shipping_id
self.assertNotEqual(new_partner, self.website.user_id.partner_id)
self.assertTrue(new_partner.name.endswith(self.sale_order.name))
self.assertPartnerShippingValues(
new_partner,
self.express_checkout_anonymized_shipping_values,
)
def test_express_checkout_public_user_shipping_address_change_twice(self):
""" Test that when using express checkout as a public user and selecting a shipping address
more than once, a new partner is created if the partner of the SO is the public partner
(only creates one new partner that is updated).
"""
session = self.authenticate(None, None)
session['sale_order_id'] = self.sale_order.id
root.session_store.save(session)
with patch(
'odoo.addons.delivery.models.delivery_carrier.DeliveryCarrier.rate_shipment',
return_value=self.rate_shipment_result
):
self._make_json_rpc_request(
urls.url_join(
self.base_url(), WebsiteSaleDeliveryController._express_checkout_shipping_route
), data={
'partial_shipping_address': dict(self.express_checkout_anonymized_shipping_values)
}
)
new_partner = self.sale_order.partner_shipping_id
self._make_json_rpc_request(
urls.url_join(
self.base_url(), WebsiteSaleDeliveryController._express_checkout_shipping_route
), data={
'partial_shipping_address': dict(self.express_checkout_anonymized_shipping_values_2)
}
)
self.assertEqual(new_partner.id, self.sale_order.partner_shipping_id.id)
self.assertPartnerShippingValues(
new_partner,
self.express_checkout_anonymized_shipping_values_2,
)
def test_express_checkout_registered_user_exisiting_shipping_address_change(self):
""" Test that when using express checkout as a registered user and selecting an exisiting
shipping address, the existing partner (the one of the so) is reused.
"""
self.sale_order.partner_id = self.user_demo.partner_id.id
session = self.authenticate(self.user_demo.login, self.user_demo.login)
session['sale_order_id'] = self.sale_order.id
root.session_store.save(session)
with patch(
'odoo.addons.delivery.models.delivery_carrier.DeliveryCarrier.rate_shipment',
return_value=self.rate_shipment_result
):
self._make_json_rpc_request(
urls.url_join(
self.base_url(), WebsiteSaleDeliveryController._express_checkout_shipping_route
), data={
'partial_shipping_address': dict(self.express_checkout_anonymized_shipping_values)
}
)
self.assertEqual(self.sale_order.partner_id.id, self.user_demo.partner_id.id)
def test_express_checkout_registered_user_new_shipping_address_change(self):
""" Test that when using express checkout as a registered user and selecting a new shipping
address, a new partner is created if the partner of the SO or his children are different
than the delivery information received.
"""
self.sale_order.partner_id = self.user_demo.partner_id.id
session = self.authenticate(self.user_demo.login, self.user_demo.login)
session['sale_order_id'] = self.sale_order.id
root.session_store.save(session)
with patch(
'odoo.addons.delivery.models.delivery_carrier.DeliveryCarrier.rate_shipment',
return_value=self.rate_shipment_result
):
self._make_json_rpc_request(
urls.url_join(
self.base_url(), WebsiteSaleDeliveryController._express_checkout_shipping_route
), data={
'partial_shipping_address': dict(self.express_checkout_anonymized_shipping_values)
}
)
new_partner = self.sale_order.partner_shipping_id
self.assertEqual(self.sale_order.partner_id.id, self.user_demo.partner_id.id)
self.assertNotEqual(new_partner.id, self.user_demo.partner_id.id)
self.assertTrue(new_partner.name.endswith(self.sale_order.name))
self.assertPartnerShippingValues(
new_partner,
self.express_checkout_anonymized_shipping_values,
)
def test_express_checkout_registered_user_new_shipping_address_change_twice(self):
""" Test that when using express checkout as a registered user and selecting a new
shipping address more than once, a new partner is created if the partner of the SO is
the public partner (only creates one new partner that is updated).
"""
self.sale_order.partner_id = self.user_demo.partner_id.id
session = self.authenticate(self.user_demo.login, self.user_demo.login)
session['sale_order_id'] = self.sale_order.id
root.session_store.save(session)
with patch(
'odoo.addons.delivery.models.delivery_carrier.DeliveryCarrier.rate_shipment',
return_value=self.rate_shipment_result
):
self._make_json_rpc_request(
urls.url_join(
self.base_url(), WebsiteSaleDeliveryController._express_checkout_shipping_route
), data={
'partial_shipping_address': dict(self.express_checkout_anonymized_shipping_values)
}
)
new_partner = self.sale_order.partner_shipping_id
self._make_json_rpc_request(
urls.url_join(
self.base_url(), WebsiteSaleDeliveryController._express_checkout_shipping_route
), data={
'partial_shipping_address': dict(self.express_checkout_anonymized_shipping_values_2)
}
)
self.assertEqual(new_partner.id, self.sale_order.partner_shipping_id.id)
self.assertPartnerShippingValues(
new_partner,
self.express_checkout_anonymized_shipping_values_2
)
def test_express_checkout_partial_delivery_address_context_key(self):
""" Test that when using express checkout with only partial delivery information,
`express_checkout_partial_delivery_address` context key is in the context.
"""
delivery_carrier_mock = Mock()
delivery_carrier_mock.rate_shipment = Mock(
# Since we didn't mock the product ids for the mocked carrier, we return an unsuccessful
# response to skip the part where the product ids are checked on the carrier.
return_value=dict(self.rate_shipment_result, **{'success': False})
)
WebsiteSaleDeliveryController._get_rate(
delivery_carrier_mock, self.sale_order, is_express_checkout_flow=True
)
sale_order = delivery_carrier_mock.rate_shipment.call_args[0][0]
self.assertTrue(sale_order._context.get('express_checkout_partial_delivery_address'))
def test_express_checkout_registered_user_with_shipping_option(self):
""" Test that when you use the express checkout as a registered user and the shipping
address sent by the express checkout form exactly matches to one of the addresses linked
to this user in odoo, we do not create a new partner and reuse the existing one.
"""
self.sale_order.partner_id = self.user_demo.partner_id.id
session = self.authenticate(self.user_demo.login, self.user_demo.login)
session['sale_order_id'] = self.sale_order.id
root.session_store.save(session)
with patch(
'odoo.addons.delivery.models.delivery_carrier.DeliveryCarrier.rate_shipment',
return_value=self.rate_shipment_result
):
shipping_options = self._make_json_rpc_request(
urls.url_join(
self.base_url(), WebsiteSaleDeliveryController._express_checkout_shipping_route
), data={
'partial_shipping_address': dict(self.express_checkout_anonymized_demo_shipping_values)
}
)
self.assertEqual(self.sale_order.partner_id.id, self.user_demo.partner_id.id)
self._make_json_rpc_request(urls.url_join(self.base_url(), '/shop/express'), data={
'billing_address': dict(self.express_checkout_billing_values),
'shipping_address': dict(self.express_checkout_demo_shipping_values),
'shipping_option': shipping_options[0],
})
self.assertEqual(self.sale_order.partner_id.id, self.user_demo.partner_id.id)
def test_express_checkout_registered_user_with_shipping_option_new_address(self):
""" Test that when you use the express checkout as a registered user and the shipping
address sent by the express checkout form doesn't exist in odoo, we create a new partner.
"""
self.sale_order.partner_id = self.user_demo.partner_id.id
session = self.authenticate(self.user_demo.login, self.user_demo.login)
session['sale_order_id'] = self.sale_order.id
root.session_store.save(session)
with patch(
'odoo.addons.delivery.models.delivery_carrier.DeliveryCarrier.rate_shipment',
return_value=self.rate_shipment_result
):
# Won't create a new partner because the partial information are the same the an
# exisiting partner linked to the SO
shipping_options = self._make_json_rpc_request(
urls.url_join(
self.base_url(), WebsiteSaleDeliveryController._express_checkout_shipping_route
), data={
'partial_shipping_address': dict(self.express_checkout_anonymized_demo_shipping_values)
}
)
self.assertEqual(self.sale_order.partner_shipping_id, self.user_demo.partner_id)
# Will create a new partner because the complete shipping information are different than
# the partner actually selected.
self._make_json_rpc_request(
urls.url_join(
self.base_url(),
WebsiteSaleDeliveryController._express_checkout_route
), data={
'billing_address': dict(self.express_checkout_billing_values),
'shipping_address': dict(self.express_checkout_demo_shipping_values_2),
'shipping_option': shipping_options[0],
}
)
self.assertNotEqual(
self.sale_order.partner_shipping_id.id, self.user_demo.partner_id.id
)
self.assertFalse(
self.sale_order.partner_shipping_id.name.endswith(self.sale_order.name)
)

View file

@ -0,0 +1,59 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import Command
from odoo.tests import tagged
from odoo.addons.sale.tests.common import SaleCommon
@tagged('post_install', '-at_install')
class TestSaleOrder(SaleCommon):
def test_delivery_methods_match_order_company(self):
company_1 = self.env['res.company'].create({'name': 'Test Company 1'})
company_2 = self.env['res.company'].create({'name': 'Test Company 2'})
product_delivery_1 = self.env['product.product'].create(
{
'name': 'Delivery Product 1',
'type': 'service',
'company_id': company_1.id,
}
)
product_delivery_2 = self.env['product.product'].create(
{
'name': 'Delivery Product 2',
'type': 'service',
'company_id': company_2.id,
}
)
delivery_1 = self.env['delivery.carrier'].create(
{
'name': 'Delivery 1',
'delivery_type': 'fixed',
'product_id': product_delivery_1.id,
'is_published': True,
}
)
delivery_2 = self.env['delivery.carrier'].create(
{
'name': 'Delivery 2',
'delivery_type': 'fixed',
'product_id': product_delivery_2.id,
'is_published': True,
}
)
sale_order = self.env['sale.order'].create(
{
'partner_id': self.partner.id,
'company_id': company_1.id,
'order_line': [
Command.create(
{
'product_id': self.product.id,
}
)],
}
)
available_dms = sale_order._get_delivery_methods()
self.assertIn(delivery_1, available_dms)
self.assertNotIn(delivery_2, available_dms)

View file

@ -0,0 +1,73 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import odoo.tests
@odoo.tests.tagged('post_install', '-at_install')
class TestUi(odoo.tests.HttpCase):
def test_01_free_delivery_when_exceed_threshold(self):
if not self.env['ir.module.module']._get('payment_custom').state == 'installed':
return self.skipTest('The payment_custom module is not installed thus the tour cannot be tested.')
# Avoid Shipping/Billing address page
self.env.ref('base.partner_admin').write({
'street': '215 Vine St',
'city': 'Scranton',
'zip': '18503',
'country_id': self.env.ref('base.us').id,
'state_id': self.env.ref('base.state_us_39').id,
'phone': '+1 555-555-5555',
'email': 'admin@yourcompany.example.com',
})
office_chair = self.env['product.product'].create({
'name': 'Office Chair Black TEST',
'list_price': 12.50,
})
self.env.ref("delivery.free_delivery_carrier").write({
'name': 'Delivery Now Free Over 10',
'fixed_price': 2,
'free_over': True,
'amount': 10,
})
self.product_delivery_poste = self.env['product.product'].create({
'name': 'The Poste',
'type': 'service',
'categ_id': self.env.ref('delivery.product_category_deliveries').id,
'sale_ok': False,
'purchase_ok': False,
'list_price': 20.0,
})
self.carrier = self.env['delivery.carrier'].create({
'name': 'The Poste',
'sequence': 9999, # ensure last to load price async
'fixed_price': 20.0,
'delivery_type': 'base_on_rule',
'product_id': self.product_delivery_poste.id,
'website_published': True,
})
self.env['delivery.price.rule'].create([{
'carrier_id': self.carrier.id,
'max_value': 5,
'list_base_price': 20,
}, {
'carrier_id': self.carrier.id,
'operator': '>=',
'max_value': 5,
'list_base_price': 50,
}, {
'carrier_id': self.carrier.id,
'operator': '>=',
'max_value': 300,
'variable': 'price',
'list_base_price': 0,
}])
self.env['account.journal'].create({'name': 'Cash - Test', 'type': 'cash', 'code': 'CASH - Test'})
# Ensure "Wire Transfer" is the default provider.
# Providers are sorted by state, showing `test` providers first (don't ask why).
self.env.ref("payment.payment_provider_transfer").write({"state": "test"})
self.start_tour("/", 'check_free_delivery', login="admin")

View file

@ -0,0 +1,70 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.fields import Command
from odoo.tests import tagged
from odoo.addons.website_sale.tests.test_sale_process import TestWebsiteSaleCheckoutAddress
from odoo.addons.website_sale_delivery.controllers.main import WebsiteSaleDelivery
from odoo.addons.website.tools import MockRequest
@tagged('post_install', '-at_install')
class TestWebsiteSaleController(TestWebsiteSaleCheckoutAddress):
def setUp(self):
super().setUp()
def test_carrier_update_on_shop_payment(self):
""" Test that a correct carrier is set on SO on shop/payment when partner_shipping_id is
changed. """
# Unpublish all carriers.
self.env['delivery.carrier'].search([]).website_published = False
country_be = self.env.ref('base.be')
country_fr = self.env.ref('base.fr')
# Create a delivery product.
self.product_delivery_poste = self.env['product.product'].create({
'name': 'The Poste',
'type': 'service',
'categ_id': self.env.ref('delivery.product_category_deliveries').id,
'sale_ok': False,
'purchase_ok': False,
})
# Create a carrier which ships only to Belgium.
carrier_be = self.env['delivery.carrier'].create([{
'name': 'Fixed BE',
'product_id': self.product_delivery_poste.id,
'country_ids': [Command.set([country_be.id])],
'website_published': True,
}])
# Create a carrier which ships only to France.
carrier_fr = self.env['delivery.carrier'].create([{
'name': 'Fixed FR',
'product_id': self.product_delivery_poste.id,
'country_ids': [Command.set([country_fr.id])],
'website_published': True,
}])
# Create partner_shipping_id with BE country.
p = self.env.user.partner_id
so = self._create_so(p.id)
so.partner_shipping_id = self.env['res.partner'].create({
'name': 'a res.partner address',
'email': 'email@email.email',
'street': 'ooo',
'city': 'ooo',
'zip': '1200',
'country_id': country_be.id,
'parent_id': p.id,
'type': 'delivery',
})
so.set_delivery_line(carrier_be, carrier_be.fixed_price)
with MockRequest(self.env, website=self.website, sale_order_id=so.id):
# Change the country of the partner_shipping_id.
so.partner_shipping_id.country_id = country_fr
WebsiteSaleDelivery().shop_payment()
# Check that a carrier is updated.
self.assertEqual(so.carrier_id, carrier_fr)