import unittest from types import SimpleNamespace from unittest.mock import Mock from core.douyu.login import DouyuLogin from core.douyu.login_api_wgapi import WgapiLoginAPI class MobileBindSkipTests(unittest.TestCase): def setUp(self): self.login = DouyuLogin.__new__(DouyuLogin) self.login.api = WgapiLoginAPI() self.login.account = SimpleNamespace(username='test-user', password='test-password') self.login._request_json = Mock() def test_second_login_skips_mobile_bind_with_unique_key(self): self.login._request_json.side_effect = [ { 'error': 130014, 'msg': '需要进行手机号绑定', 'data': {'mobileBind': {'uniqueKey': 'one-time-key'}}, }, { 'error': 0, 'data': {'url': '//www.douyu.com/api/passport/login?code=callback-code'}, }, ] next_step, login_url = self.login._second_login( 'gt', 'challenge', 'validate', 'validate|jordan', 'code-token', ) self.assertEqual(next_step, 'mobile_bind_skip') self.assertEqual( login_url, 'https://www.douyu.com/api/passport/login?code=callback-code', ) self.assertEqual(self.login._request_json.call_count, 2) skip_call = self.login._request_json.call_args_list[1] self.assertEqual(skip_call.args[:3], ( 'post', 'https://passport.douyu.com/wgapi/member/passport/login', '跳过手机号绑定接口', )) self.assertEqual(skip_call.kwargs['data'], { 'type': '3', 'uniqueKey': 'one-time-key', 'biz_type': '1', }) def test_second_login_preserves_remote_email_flow_without_unique_key(self): self.login._request_json.return_value = { 'error': 130014, 'data': {'remoteLogin': {'code': 'remote-code'}}, } next_step, remote_code = self.login._second_login( 'gt', 'challenge', 'validate', 'validate|jordan', 'code-token', ) self.assertEqual((next_step, remote_code), ('remote_email', 'remote-code')) self.assertEqual(self.login._request_json.call_count, 1) if __name__ == '__main__': unittest.main()