feat(douyu): 支持和平小店商品兑换
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
import json
|
||||
import unittest
|
||||
from types import SimpleNamespace
|
||||
from unittest.mock import Mock
|
||||
|
||||
from core.douyu.activity_client import DouyuActivityClient, DouyuActivityError
|
||||
|
||||
|
||||
class XpdExchangeTests(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.client = DouyuActivityClient(
|
||||
'acf_uid=100; acf_stk=stk; acf_ltkid=ltkid',
|
||||
)
|
||||
|
||||
def test_exchange_uses_fresh_embed_authorization_and_point_price(self):
|
||||
self.client._request = Mock(return_value=SimpleNamespace(
|
||||
text='var buyInfo={"ret":"0","msg":"ok","serial":"order-1","newBalance":88};',
|
||||
))
|
||||
|
||||
result = self.client.xpd_exchange_goods(
|
||||
embed_query={
|
||||
'gameId': 'cjm', 'actId': '46195', 'appId': 'bp_cf',
|
||||
'livePlatId': 'douyu', 'code': 'fresh-code',
|
||||
'timestamp': '123', 'v': '2.0', 'sig': 'fresh-signature',
|
||||
},
|
||||
act_id='46195',
|
||||
rid='9263298',
|
||||
commodity_id='goods-1',
|
||||
price=1200,
|
||||
picture='https://cdn.example/item.jpg',
|
||||
pay_type=1,
|
||||
action_id='46195',
|
||||
)
|
||||
|
||||
self.assertEqual(result['serial'], 'order-1')
|
||||
self.assertEqual(result['new_balance'], 88)
|
||||
call = self.client._request.call_args
|
||||
self.assertEqual(call.args[:2], ('get', self.client.XPD_LIVE_BUY_API))
|
||||
params = call.kwargs['params']
|
||||
self.assertEqual(params['code'], 'fresh-code')
|
||||
self.assertEqual(params['sig'], 'fresh-signature')
|
||||
self.assertEqual(params['propid'], 'goods-1')
|
||||
self.assertEqual(params['paytype'], '1')
|
||||
self.assertEqual(json.loads(params['appext']), {
|
||||
'user_price': 1200,
|
||||
'sGoodsPic': 'https://cdn.example/item.jpg',
|
||||
'paytype': 1,
|
||||
})
|
||||
|
||||
def test_exchange_surfaces_daoju_failure_message(self):
|
||||
self.client._request = Mock(return_value=SimpleNamespace(
|
||||
text='var buyInfo={"ret":"-1","msg":"点券不足"};',
|
||||
))
|
||||
|
||||
with self.assertRaisesRegex(DouyuActivityError, '点券不足'):
|
||||
self.client.xpd_exchange_goods(
|
||||
embed_query={'code': 'fresh-code'},
|
||||
act_id='46195',
|
||||
rid='9263298',
|
||||
commodity_id='goods-1',
|
||||
price=1200,
|
||||
)
|
||||
|
||||
def test_list_goods_requests_and_preserves_inventory(self):
|
||||
self.client._request = Mock(return_value=SimpleNamespace(
|
||||
text=(
|
||||
'var recommend={"data":{"client_data":{"itemsdetail":[{'
|
||||
'"iGoodsId":"goods-1","sGoodsName":"测试商品","iPrice":"6800",'
|
||||
'"iJb2Price":"0","iGoodsLeft":"0"}]}}};'
|
||||
),
|
||||
))
|
||||
|
||||
result = self.client.xpd_list_goods(
|
||||
embed_query={}, act_id='46195', openid='openid', roleid='roleid',
|
||||
)
|
||||
|
||||
self.assertEqual(result['goods'][0]['price'], 6800)
|
||||
self.assertEqual(result['goods'][0]['goods_left'], 0)
|
||||
fields = self.client._request.call_args.kwargs['params']['fields']
|
||||
self.assertIn('iGoodsLeft', fields.split(','))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user