104 lines
4.3 KiB
Python
104 lines
4.3 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from unittest.mock import patch
|
|
|
|
from odoo import Command
|
|
from odoo.exceptions import ValidationError
|
|
from odoo.tests import Form, tagged
|
|
|
|
from odoo.addons.website.tools import MockRequest
|
|
from odoo.addons.website_sale_collect.tests.common import ClickAndCollectCommon
|
|
from odoo.addons.website_sale_stock.tests.common import WebsiteSaleStockCommon
|
|
|
|
|
|
@tagged('post_install', '-at_install')
|
|
class TestDeliveryCarrier(ClickAndCollectCommon, WebsiteSaleStockCommon):
|
|
|
|
def test_prevent_publishing_when_no_warehouse(self):
|
|
self.in_store_dm.is_published = False
|
|
self.in_store_dm.warehouse_ids = [Command.clear()]
|
|
with self.assertRaises(ValidationError):
|
|
self.in_store_dm.is_published = True
|
|
|
|
def test_same_company_for_delivery_method_and_warehouse(self):
|
|
self.in_store_dm.company_id = self.company_id
|
|
self.companyA = self.env['res.company'].create({'name': 'Company A'})
|
|
self.warehouse_2 = self._create_warehouse(company_id=self.companyA.id)
|
|
with self.assertRaises(ValidationError):
|
|
self.in_store_dm.warehouse_ids = [Command.set([self.warehouse_2.id])]
|
|
|
|
def test_creating_in_store_delivery_method_sets_integration_level_to_rate(self):
|
|
new_in_store_carrier = self.env['delivery.carrier'].create({
|
|
'name': "Test Carrier",
|
|
'delivery_type': 'in_store',
|
|
'product_id': self.dm_product.id,
|
|
})
|
|
self.assertEqual(new_in_store_carrier.integration_level, 'rate')
|
|
|
|
def test_in_store_get_close_locations_returned_data(self):
|
|
so = self._create_in_store_delivery_order()
|
|
# Create a partner for a warehouse.
|
|
wh_address_partner = self.env['res.partner'].create({
|
|
**self.dummy_partner_address_values,
|
|
'name': "Shop 1",
|
|
'partner_latitude': 1.0,
|
|
'partner_longitude': 2.0,
|
|
})
|
|
self.warehouse.partner_id = wh_address_partner.id
|
|
self.warehouse.opening_hours = self.env['resource.calendar'].create({
|
|
'name': 'Opening hours',
|
|
'attendance_ids': [
|
|
Command.create({
|
|
'name': 'Monday Morning',
|
|
'dayofweek': '0',
|
|
'hour_from': 8,
|
|
'hour_to': 12,
|
|
'day_period': 'morning',
|
|
}),
|
|
Command.create({
|
|
'name': 'Monday Lunch',
|
|
'dayofweek': '0',
|
|
'hour_from': 12,
|
|
'hour_to': 13,
|
|
'day_period': 'lunch',
|
|
}),
|
|
Command.create({
|
|
'name': 'Monday Afternoon',
|
|
'dayofweek': '0',
|
|
'hour_from': 13,
|
|
'hour_to': 17,
|
|
'day_period': 'afternoon',
|
|
}),
|
|
],
|
|
})
|
|
|
|
with patch(
|
|
'odoo.addons.base_geolocalize.models.res_partner.ResPartner.geo_localize',
|
|
return_value=True
|
|
), MockRequest(self.env, website=self.website, sale_order_id=so.id):
|
|
locations = self.in_store_dm._in_store_get_close_locations(wh_address_partner)
|
|
self.assertEqual(
|
|
locations, [{
|
|
'id': self.warehouse.id,
|
|
'name': wh_address_partner['name'].title(),
|
|
'street': wh_address_partner['street'].title(),
|
|
'city': wh_address_partner.city.title(),
|
|
'zip_code': wh_address_partner.zip,
|
|
'state': wh_address_partner.state_id.code,
|
|
'country_code': wh_address_partner.country_code,
|
|
'latitude': wh_address_partner.partner_latitude,
|
|
'longitude': wh_address_partner.partner_longitude,
|
|
'additional_data': {'in_store_stock': {'in_stock': True}},
|
|
'opening_hours': {
|
|
'0': ['08:00 - 12:00', '13:00 - 17:00'],
|
|
'1': [],
|
|
'2': [],
|
|
'3': [],
|
|
'4': [],
|
|
'5': [],
|
|
'6': [],
|
|
},
|
|
'distance': 0.0,
|
|
}]
|
|
)
|