Files
enterprise-addons/sale_lazada/tests/common.py
T

260 lines
8.0 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from datetime import datetime, timedelta
from odoo import fields
from odoo.addons.base.tests.common import BaseCommon
ORDER_ID_MOCK = 123456789
# Mock data for buyer address
BUYER_ADDRESS_MOCK = {
'first_name': 'Gederic',
'last_name': 'Frilson',
'phone': '+1 234-567-8910',
'address1': '123 RainBowMan Street',
'address2': 'Apartment 4B',
'address3': '', # Used as state/region
'city': 'New Duck City',
'post_code': '12345',
'country': 'VN',
}
ORDER_ITEM_MOCK = {
"order_id": ORDER_ID_MOCK,
"name": "Test Product",
"item_price": "100.0",
"tax_amount": "0.0",
"status": "pending",
"paid_price": "80.0",
"sku": "TEST-SKU-001",
"sku_id": "10001",
"order_item_id": 90001,
"currency": "VND",
"buyer_id": 30001,
"shipping_provider_type": "standard",
"shipment_provider": "",
"updated_at": "2020-01-15 00:00:00 +0000",
"is_fbl": 0,
"package_id": "",
"tracking_code": "",
}
def build_order_mock(
order_id=ORDER_ID_MOCK, items=None, shipping_fee=10.0, currency="VND", **extra
):
"""Build a Lazada order-detail payload for tests.
Any keyword in ``extra`` overrides the default payload key of the same name,
or adds a new key if absent.
:param order_id: Lazada order identifier.
:param list items: List of dicts compatible with ORDER_ITEM_MOCK shape.
:param float shipping_fee: Shipping fee to embed in the payload.
:param str currency: Currency code used when building items if needed.
:return: An order-detail payload dict.
:rtype: dict
"""
if items is None:
items = [ORDER_ITEM_MOCK]
non_canceled_items = [i for i in items if i.get("status") != "canceled"]
total_paid = sum(float(item["paid_price"]) for item in non_canceled_items)
payload = {
"order_id": order_id,
"created_at": "2020-01-15 00:00:00 +0000",
"updated_at": "2020-01-15 00:00:00 +0000",
"address_billing": BUYER_ADDRESS_MOCK,
"address_shipping": BUYER_ADDRESS_MOCK,
"customer_last_name": "Frilson",
"customer_first_name": "Gederic",
"order_items": items,
"shipping_fee": str(shipping_fee),
"payment_method": "COD",
"statuses": ["pending"],
"price": str(total_paid),
"items_count": len(items),
"voucher": str(0.0),
"voucher_platform": str(0.0),
"voucher_seller": str(0.0),
"order_number": order_id,
}
payload.update(extra)
return payload
AUTH_RESPONSE_MOCK = {
'code': '0',
'request_id': '0001',
'access_token': 'ACCESS_TOKEN_123',
'refresh_token': 'REFRESH_TOKEN_123',
'expires_in': 14400, # 4 days
'refresh_expires_in': 30 * 24 * 3600, # 30 days
}
REFRESH_TOKEN_RESPONSE_MOCK = {**AUTH_RESPONSE_MOCK}
GET_SELLER_RESPONSE_MOCK = {
'code': '0',
'request_id': '0001',
'data': {'name': 'mock_lazada_shop', 'seller_id': 1, 'status': 'ACTIVE'},
}
GET_ORDERS_RESPONSE_MOCK = {
"code": "0",
"request_id": "0001",
"data": {"countTotal": 1, "count": 1, "orders": [build_order_mock()]},
}
GET_ORDER_ITEMS_RESPONSE_MOCK = {
'code': '0',
'request_id': '0001',
'data': [
{'order_id': ORDER_ID_MOCK, 'order_number': ORDER_ID_MOCK, 'order_items': [ORDER_ITEM_MOCK]}
],
}
GET_ORDER_RESPONSE_MOCK = {"code": "0", "request_id": "0001", "data": build_order_mock()}
GET_PRODUCTS_RESPONSE_MOCK = {
'code': '0',
'request_id': '0001',
'data': {
'total_products': 1,
'products': [
{
'item_id': 1111111111,
'status': 'Active',
'skus': [
{
'SellerSku': ORDER_ITEM_MOCK['sku'],
'Status': 'active',
'SkuId': int(ORDER_ITEM_MOCK['sku_id']),
'fblWarehouseInventories': [],
}
],
}
],
},
}
UPDATE_STOCK_RESPONSE_MOCK = {'code': '0', 'request_id': '0001'}
GET_SHIPMENT_PROVIDER_RESPONSE_MOCK = {
'code': '0',
'request_id': '0001',
'result': {
'success': True,
'data': {
'platform_default': 1,
'shipment_providers': [{'name': 'warehouse_name', 'provider_code': 'A'}],
'shipping_allocate_type': 'NTFS',
},
},
}
SET_RTS_RESPONSE_MOCK = {'code': '0', 'request_id': '0001', 'result': {'success': True}}
PRINT_AWB_RESPONSE_MOCK = {
'code': '0',
'request_id': '0001',
'result': {'success': True, 'data': {'pdf_url': 'https://lazada.com/lazada-label.pdf'}},
}
PACKAGE_PACK_RESPONSE_MOCK = {
'code': '0',
'request_id': '0001',
'result': {
'success': True,
'data': {
'pack_order_list': [
{
'order_item_list': [
{
'order_item_id': ORDER_ITEM_MOCK['order_item_id'],
'item_err_code': '0',
'package_id': 'PACK-001',
'tracking_number': 'TRACK-001',
}
]
}
]
},
},
}
# Map of API operations to their corresponding response data
OPERATIONS_RESPONSES_MAP = {
'RefreshAccessToken': REFRESH_TOKEN_RESPONSE_MOCK,
'GetSeller': GET_SELLER_RESPONSE_MOCK,
'GetOrders': GET_ORDERS_RESPONSE_MOCK,
'GetMultipleOrderItems': GET_ORDER_ITEMS_RESPONSE_MOCK,
'GetOrder': GET_ORDER_RESPONSE_MOCK,
'GetProducts': GET_PRODUCTS_RESPONSE_MOCK,
'UpdateSellableQuantity': UPDATE_STOCK_RESPONSE_MOCK,
'GetShipmentProvider': GET_SHIPMENT_PROVIDER_RESPONSE_MOCK,
'SetReadyToShip': SET_RTS_RESPONSE_MOCK,
'PrintAWB': PRINT_AWB_RESPONSE_MOCK,
'PackagePack': PACKAGE_PACK_RESPONSE_MOCK,
}
# Test class for common Lazada-related functionality
class TestLazadaCommon(BaseCommon):
def setUp(self):
super().setUp()
self.initial_sync_date = datetime(2020, 1, 1)
self.shop = self.env['lazada.shop'].create({
'name': "mock_lazada_shop",
'company_id': self.env.company.id,
'country_id': self.env.ref('base.vn').id,
'app_key': '1',
'app_secret': 'test_app_secret',
'shop_extern_id': '50001',
'access_token': 'test_access_token',
'access_token_expiration_date': fields.Datetime.now() + timedelta(hours=4),
'refresh_token': 'test_refresh_token',
'refresh_token_expiration_date': fields.Datetime.now() + timedelta(days=30),
'last_orders_sync_date': self.initial_sync_date,
'last_product_catalog_sync_date': self.initial_sync_date,
})
self.product = self.env['product.product'].create({
'name': "Test Product",
'type': 'consu',
'default_code': ORDER_ITEM_MOCK['sku'],
'list_price': 100.0,
'is_storable': True,
'tracking': 'none',
'taxes_id': [],
})
self.item = self.env['lazada.item'].create({
'product_id': self.product.id,
'shop_id': self.shop.id,
'lazada_item_extern_id': ORDER_ITEM_MOCK['sku_id'],
'lazada_sku': ORDER_ITEM_MOCK['sku'],
'sync_lazada_inventory': True,
})
self.partner = self.env['res.partner'].create({'name': "Test Partner"})
tax_group = self.env["account.tax.group"].create({
"name": "Lazada Test Tax Group",
})
self.tax_price_include_7 = self.env["account.tax"].create({
"name": "Lazada Test Tax 7% Included",
"amount": 7.0,
"price_include_override": "tax_included",
"tax_group_id": tax_group.id,
})
self.tax_price_exclude_7 = self.env["account.tax"].create({
"name": "Lazada Test Tax 7% Excluded",
"amount": 7.0,
"price_include_override": "tax_excluded",
"tax_group_id": tax_group.id,
})