261 lines
8.5 KiB
Python
261 lines
8.5 KiB
Python
from datetime import datetime
|
|
|
|
from odoo.tests import TransactionCase
|
|
|
|
ORDER_ID_MOCK = "580193230867958565"
|
|
|
|
BUYER_ADDRESS_MOCK = {
|
|
"address_detail": "Su***************",
|
|
"address_line1": "Su****************",
|
|
"address_line2": "",
|
|
"address_line3": "",
|
|
"address_line4": "",
|
|
"district_info": [
|
|
{"address_level": "L0", "address_level_name": "Country", "address_name": "Indonesia"},
|
|
{"address_level": "L1", "address_level_name": "province", "address_name": "Jakarta"},
|
|
{"address_level": "L2", "address_level_name": "city", "address_name": "South Jakarta"},
|
|
{"address_level": "L3", "address_level_name": "Sub-district", "address_name": "Se*******"},
|
|
{
|
|
"address_level": "L4",
|
|
"address_level_name": "Urban Community",
|
|
"address_name": "Se********",
|
|
},
|
|
],
|
|
"first_name": "",
|
|
"first_name_local_script": "",
|
|
"full_address": "Indonesia, Jakarta, South Jakarta, Se*******, Se********,Su*******",
|
|
"last_name": "",
|
|
"last_name_local_script": "",
|
|
"name": "a***",
|
|
"phone_number": "(+86)123******43",
|
|
"postal_code": "",
|
|
"region_code": "ID",
|
|
}
|
|
|
|
PAYMENT_MOCK = {
|
|
"buyer_service_fee": "0",
|
|
"currency": "IDR",
|
|
"original_shipping_fee": "1",
|
|
"original_total_product_price": "10000",
|
|
"platform_discount": "0",
|
|
"seller_discount": "0",
|
|
"shipping_fee": "1",
|
|
"shipping_fee_cofunded_discount": "0",
|
|
"shipping_fee_platform_discount": "0",
|
|
"shipping_fee_seller_discount": "0",
|
|
"sub_total": "10000",
|
|
"tax": "0",
|
|
"total_amount": "10001",
|
|
}
|
|
|
|
ORDER_ITEM_MOCK = {
|
|
"buyer_service_fee": "1000",
|
|
"currency": "IDR",
|
|
"display_status": "AWAITING_COLLECTION",
|
|
"id": "1234",
|
|
"is_gift": False,
|
|
"original_price": "10000",
|
|
"package_id": "1162106018708884261",
|
|
"package_status": "TO_FULFILL",
|
|
"platform_discount": "0",
|
|
"product_id": "1731432205220938862",
|
|
"product_name": "Test Product Test Product 1",
|
|
"rts_time": 1000000000,
|
|
"sale_price": "10000",
|
|
"seller_discount": "0",
|
|
"seller_sku": "1234",
|
|
"shipping_provider_id": "6617675021119438849",
|
|
"shipping_provider_name": "TT Virtual# JNT express",
|
|
"sku_id": "1731432230997951598",
|
|
"sku_image": "https://test",
|
|
"sku_name": "Default",
|
|
"sku_type": "NORMAL",
|
|
"tracking_number": "17398843105328",
|
|
}
|
|
|
|
ORDER_MOCK = {
|
|
"next_page_token": False,
|
|
"orders": [
|
|
{
|
|
"id": ORDER_ID_MOCK,
|
|
"buyer_email": "[email protected]",
|
|
"buyer_message": "",
|
|
"cancel_order_sla_time": 1579215600,
|
|
"collection_due_time": 1579042800,
|
|
"collection_time": 1579042800,
|
|
"commerce_platform": "TIKTOK_SHOP",
|
|
"create_time": 1578956400,
|
|
"delivery_option_id": "6956553057215710977",
|
|
"delivery_option_name": "Global Standard Shipping(Test)",
|
|
"delivery_time": 1578956400,
|
|
"delivery_type": "HOME_DELIVERY",
|
|
"fulfillment_type": "FULFILLMENT_BY_SELLER",
|
|
"has_updated_recipient_address": False,
|
|
"is_cod": False,
|
|
"is_on_hold_order": False,
|
|
"is_replacement_order": False,
|
|
"is_sample_order": False,
|
|
"paid_time": 1578956400,
|
|
"payment_method_name": "Credit/debit card",
|
|
"rts_sla_time": 1578956400,
|
|
"rts_time": 1578956400,
|
|
"shipping_due_time": 1579042800,
|
|
"shipping_provider": "TT Virtual# JNT express",
|
|
"shipping_provider_id": "6617675021119438849",
|
|
"shipping_type": "TIKTOK",
|
|
"status": "AWAITING_COLLECTION",
|
|
"tracking_number": "17398843105328",
|
|
"tts_sla_time": 1578956400,
|
|
"update_time": 1578956400,
|
|
"user_id": "7496200873847458597",
|
|
"warehouse_id": "7498560733279340293",
|
|
"line_items": [ORDER_ITEM_MOCK],
|
|
"payment": PAYMENT_MOCK,
|
|
"recipient_address": BUYER_ADDRESS_MOCK,
|
|
}
|
|
],
|
|
}
|
|
|
|
|
|
GET_ACCESS_TOKEN_RESPONSE_MOCK = {
|
|
"access_token": "dummy_access_token",
|
|
"access_token_expire_in": 1000000000,
|
|
"refresh_token": "dummy_access_token",
|
|
"refresh_token_expire_in": 1000000000,
|
|
"open_id": "1234",
|
|
"seller_name": "dummy_shop",
|
|
"seller_base_region": "ID",
|
|
"user_type": 0,
|
|
}
|
|
|
|
GET_AUTHORIZED_SHOP_MOCK = {
|
|
"shops": [
|
|
{
|
|
"id": "1234",
|
|
"name": "dummy_name",
|
|
"region": "ID",
|
|
"cipher": "dummy_cipher",
|
|
"code": "1234",
|
|
}
|
|
]
|
|
}
|
|
|
|
GET_PACKAGE_MOCK = {"doc_url": "https://tiktokshop.com/dummy_url", "tracking_number": "1234"}
|
|
|
|
GET_PRODUCT_MOCK = {
|
|
"next_page_token": False,
|
|
"products": [
|
|
{
|
|
"create_time": 1747378410,
|
|
"id": "1731432205220938862",
|
|
"skus": [
|
|
{
|
|
"id": "1731432230997951598",
|
|
"inventory": [
|
|
{"quantity": 98, "warehouse_id": "7498560733279340293"},
|
|
{"quantity": 1, "warehouse_id": "7516069702856214273"},
|
|
],
|
|
"price": {"currency": "IDR", "tax_exclusive_price": "10000"},
|
|
"seller_sku": "1234",
|
|
}
|
|
],
|
|
"status": "ACTIVATE",
|
|
"title": "Test Product Test Product 1",
|
|
"update_time": 1750129945,
|
|
}
|
|
],
|
|
"total_count": 1,
|
|
}
|
|
|
|
GET_WAREHOUSE_MOCK = {
|
|
"warehouses": [
|
|
{
|
|
"address": {
|
|
"address_line1": "Jl. Jenderal Sudirman No.Kav. 25",
|
|
"city": "South Jakarta City",
|
|
"contact_person": "TikTok Shop Partner Center",
|
|
"distict": "Setiabudi",
|
|
"full_address": "Jl. Jenderal Sudirman No.Kav. 25",
|
|
"phone_number": "(+44)07153419266",
|
|
"postal_code": "12920",
|
|
"region": "Republic of Indonesia",
|
|
"region_code": "ID",
|
|
"state": "Jakarta Province",
|
|
"town": "Karet",
|
|
},
|
|
"effect_status": "ENABLED",
|
|
"id": "7498560733279340293",
|
|
"is_default": True,
|
|
"name": "Sandbox ID Local Sales warehouse",
|
|
"sub_type": "DOMESTIC_WAREHOUSE",
|
|
"type": "SALES_WAREHOUSE",
|
|
}
|
|
]
|
|
}
|
|
|
|
GET_ACTIVE_SHOPS_MOCK = {"shops": [{"id": "dummy_shop_id"}]}
|
|
|
|
GET_FEES_MOCK = {
|
|
"order_id": "580193230867958565",
|
|
"order_create_time": 1750129945,
|
|
"currency": "IDR",
|
|
"revenue_amount": "12000",
|
|
"fee_and_tax_amount": "-1000",
|
|
"shipping_cost_amount": "-3000",
|
|
"settlement_amount": "9000",
|
|
"sku_transactions": [{}],
|
|
"total_count": 1,
|
|
}
|
|
|
|
|
|
OPERATIONS_RESPONSES_MAP = {
|
|
"refresh_token": GET_ACCESS_TOKEN_RESPONSE_MOCK,
|
|
"get_token": GET_ACCESS_TOKEN_RESPONSE_MOCK,
|
|
"get_authorized_shop": GET_AUTHORIZED_SHOP_MOCK,
|
|
"update_inventory": None,
|
|
"get_products": GET_PRODUCT_MOCK,
|
|
"get_order_list": ORDER_MOCK,
|
|
"get_order_detail": ORDER_MOCK,
|
|
"get_package_label": GET_PACKAGE_MOCK,
|
|
}
|
|
|
|
|
|
# Test class for common TikTok Shop-related functionality
|
|
class TestTikTokShopCommon(TransactionCase):
|
|
def setUp(self):
|
|
super().setUp()
|
|
self.initial_sync_date = datetime(2020, 1, 1)
|
|
|
|
self.shop = self.env["tiktok.shop"].create({
|
|
"name": "dummy_name",
|
|
"tiktok_shop_ref": "dummy_shop_id",
|
|
"tiktok_cipher": "dummy_cipher",
|
|
"app_key": "dummy_app_key",
|
|
"app_secret": "dummy_app_secret",
|
|
"service_extern_id": "dummy_service",
|
|
"last_orders_sync_date": self.initial_sync_date,
|
|
"access_token": "dummy_access_token",
|
|
"access_token_expire_datetime": datetime(2020, 6, 1),
|
|
"refresh_token": "dummy_refresh_token",
|
|
"refresh_token_expire_datetime": datetime(2025, 6, 1),
|
|
})
|
|
|
|
# Create a product
|
|
self.product = self.env["product.product"].create({
|
|
"name": "Test Product 1",
|
|
"type": "consu",
|
|
"default_code": ORDER_ITEM_MOCK["seller_sku"],
|
|
"list_price": 0.0,
|
|
"taxes_id": None,
|
|
"is_storable": True,
|
|
})
|
|
|
|
# Create a TikTok Shop item linked to the product
|
|
self.item = self.env["tiktok.item"].create({
|
|
"product_id": self.product.id,
|
|
"shop_id": self.shop.id,
|
|
"tiktok_sku_extern_id": ORDER_ITEM_MOCK["sku_id"],
|
|
"tiktok_item_extern_id": ORDER_ITEM_MOCK["product_id"],
|
|
"last_inventory_sync_date": self.initial_sync_date,
|
|
})
|