class TestMerchantAdminModelManager(TestCase): def setUp(self): self.factory = PayunionFactory() self.merchant = self.factory.create_merchant() self.merchant_admin = self.factory.create_merchant_admin( work_merchant=self.merchant) self.manager = MerchantAdminModelManager() def test_has_openid(self): # create multiple merchant for _ in range(10): self.factory.create_merchant() self.assertEqual( self.manager.get_merchant_admin( self.merchant_admin.wechat_unionid), self.merchant_admin) old_unionid = self.merchant_admin.wechat_unionid self.merchant_admin.wechat_unionid = 'another openid' self.merchant_admin.save() self.assertIsNone(self.manager.get_merchant_admin(old_unionid)) def test_remove_cashier(self): cashier = self.factory.create_merchant_admin( status=SYSTEM_USER_STATUS['USING'], work_merchant=self.merchant, merchant_admin_type=MERCHANT_ADMIN_TYPES['CASHIER']) self.manager.remove_cashier(cashier) cashier = MerchantAdmin.objects.get(id=cashier.id) self.assertEqual(cashier.status, SYSTEM_USER_STATUS['DISABLED'])
def setUp(self): self.factory = PayunionFactory() try: self.platform_account = Account.objects.get(id=1) except Account.DoesNotExist: self.platform_account = self.factory.create_account( id=1, balance=0, withdrawable_balance=0, alipay_balance=0, alipay_withdrawable_balance=0) self.originator_account = self.factory.create_account( real_name='引流商户', balance=0, withdrawable_balance=0, alipay_balance=0, alipay_withdrawable_balance=0) self.merchant_account = self.factory.create_account( real_name='收款', balance=0, withdrawable_balance=0, alipay_balance=0, alipay_withdrawable_balance=0) self.inviter_account = self.factory.create_account( real_name='邀请人', balance=0, withdrawable_balance=0, alipay_balance=0, alipay_withdrawable_balance=0) self.inviter = self.factory.create_marketer( account=self.inviter_account) self.test_client = self.factory.create_client(openid='1234567890', status=0) self.merchant = self.factory.create_merchant( account=self.merchant_account, inviter=self.inviter, status=MERCHANT_STATUS.USING) self.originator = self.factory.create_merchant( account=self.originator_account) self.rule = self.factory.create_coupon_rule( merchant=self.merchant, valid_strategy=VALID_STRATEGY.EXPIRATION, expiration_days=30) self.coupon = self.factory.create_coupon( rule=self.rule, client=self.test_client, originator_merchant=self.originator, min_charge=1000, discount=100, obtain_datetime=timezone.now(), status=COUPON_STATUS['NOT_USED']) self.merchant_admin = self.factory.create_merchant_admin( merchant_admin_type=MERCHANT_ADMIN_TYPES.ADMIN, work_merchant=self.merchant) super(TestWechatPaySteps, self).setUpTestData()
def prepare_data(self): from .base_data import create_base_data create_base_data() fake_factory = PayunionFactory() curr_time = timezone.now() yesterday = curr_time - timedelta(days=1) client = fake_factory.create_client(status=SYSTEM_USER_STATUS['USING']) inviter = fake_factory.create_marketer( inviter_type=MARKETER_TYPES['SALESMAN'], status=SYSTEM_USER_STATUS['USING']) merchant = fake_factory.create_merchant( status=MERCHANT_STATUS['USING'], inviter=inviter) merchant.type = MERCHANT_TYPE['ENTERPRISE'] merchant.save() pay_money = 10 * 100 payment = Payment.objects.create( serial_number="20181102172102347024194949482317", datetime=yesterday, pay_channel=PAY_CHANNELS['WECHAT'], status=PAYMENT_STATUS['FINISHED'], merchant=merchant, client=client, order_price=pay_money, coupon=None, coupon_granted=True, platform_share=0, inviter_share=0, originator_share=0, ) merchant.account.balance = pay_money merchant.account.withdrawable_balance = pay_money pay_money = 5 * 100 payment = Payment.objects.create( serial_number="20181102172106671737943971236656", datetime=yesterday, pay_channel=PAY_CHANNELS['ALIPAY'], status=PAYMENT_STATUS['FINISHED'], merchant=merchant, client=client, order_price=5 * 100, coupon=None, coupon_granted=True, platform_share=0, inviter_share=0, originator_share=0, ) merchant.account.alipay_balance = pay_money merchant.account.alipay_withdrawable_balance = pay_money merchant.account.save() return merchant
def test_encrypt_filed(self): self.factory = PayunionFactory() for i in self.value_list: merchant_admin = self.factory.create_merchant_admin( wechat_openid=i, ) self.assertEqual(merchant_admin.wechat_openid, i) marketer = self.factory.create_marketer(wechat_openid=i, ) self.assertEqual(marketer.wechat_openid, i) client = self.factory.create_client(openid=i, ) self.assertEqual(client.openid, i)
class TestMerchantAdminManager(TestCase): def setUp(self): self.factory = PayunionFactory() self.merchant = self.factory.create_merchant() self.merchant_admin = self.factory.create_merchant_admin( work_merchant=self.merchant, alipay_user_name='周杰偷') self.manager = MerchantAdminManager(self.merchant_admin) def test_work_merchant(self): merchant = self.manager.work_merchant.obj self.assertEqual(merchant, self.merchant) def test_insensitive_alipay_user_name(self): self.assertEqual(self.manager.insensitive_alipay_user_name, '**偷')
def setUp(self): # We use a faked ALIPAY_PUBLIC_KEY to mock the alipay response. # ALIPAY_PUBLIC_KEY and its corresponding private key is generated by ourselves. self.ALIPAY_PUBLIC_KEY_backup = dynasettings.ALIPAY_PUBLIC_KEY dynasettings.ALIPAY_PUBLIC_KEY = AutoTestConfig.self_generated_alipay_public_key alipay_payment.api_instance.alipay_public_key = AutoTestConfig.self_generated_alipay_public_key self.factory = PayunionFactory() try: self.platform_account = Account.objects.get(id=1) except Account.DoesNotExist: self.platform_account = self.factory.create_account(id=1, balance=0, withdrawable_balance=0, alipay_balance=0, alipay_withdrawable_balance=0) self.originator_account = self.factory.create_account(real_name='引流商户', balance=0, withdrawable_balance=0, alipay_balance=0, alipay_withdrawable_balance=0) self.merchant_account = self.factory.create_account(real_name='收款', balance=0, withdrawable_balance=0, alipay_balance=0, alipay_withdrawable_balance=0) self.inviter_account = self.factory.create_account(real_name='邀请人', balance=0, withdrawable_balance=0, alipay_balance=0, alipay_withdrawable_balance=0) self.inviter = self.factory.create_marketer(account=self.inviter_account) self.test_client = self.factory.create_client(openid='1234567890', status=0) self.merchant = self.factory.create_merchant(account=self.merchant_account, inviter=self.inviter, status=MERCHANT_STATUS.USING) self.originator = self.factory.create_merchant(account=self.originator_account) self.rule = self.factory.create_coupon_rule(merchant=self.merchant, valid_strategy=VALID_STRATEGY.EXPIRATION, expiration_days=30) self.coupon = self.factory.create_coupon(rule=self.rule, client=self.test_client, originator_merchant=self.originator, min_charge=1000, discount=100, obtain_datetime=timezone.now(), status=COUPON_STATUS['NOT_USED']) self.merchant_admin = self.factory.create_merchant_admin( merchant_admin_type=MERCHANT_ADMIN_TYPES.ADMIN, work_merchant=self.merchant ) super(TestWechatPaySteps, self).setUpTestData()
def setUp(self): self.ALIPAY_PUBLIC_KEY_backup = dynasettings.ALIPAY_PUBLIC_KEY dynasettings.ALIPAY_PUBLIC_KEY = AutoTestConfig.self_generated_alipay_public_key alipay_payment.api_instance.alipay_public_key = AutoTestConfig.self_generated_alipay_public_key create_base_data() self.factory = PayunionFactory() try: self.platform_account = Account.objects.get(id=1) except Account.DoesNotExist: self.platform_account = self.factory.create_account( id=1, balance=100, withdrawable_balance=100, alipay_balance=100, alipay_withdrawable_balance=100) merchant_data = dict( address_info=dict(adcode='510107062000', address='成都市武侯区锦城大道666号奥克斯广场F1', location_lon=30.57592, location_lat=104.06147), merchant_name='提现测试商户', merchant_acct_data=dict(bank_name="工商银行", bank_card_number='622312131213121', real_name="提现测试"), ) inviter_workflow = GenerateInviterWorkflow(self) new_work_ids = [ area.id for area in Area.objects.filter(parent__name='武侯区') ] salesman_info = dict(set_salesman=True, system_admin_name='*****@*****.**', system_admin_password='******', new_work_ids=new_work_ids, worker_number='00001') res_info = inviter_workflow.generate_inviter( name='提现测试邀请人a', salesman_info=salesman_info) res_data = inviter_workflow.invite_merchant( inviter_token=res_info['token'], merchant_info=merchant_data) inviter_workflow.aduit_merchant(config.MERCHANT_STATUS.USING, token=res_info['token'], merchant_id=res_data['merchant_id']) self.merchant_info = res_data super(TestMerchantWithdraw, self).setUpTestData()
def setUpTestData(cls): cls.factory = PayunionFactory() # 创建一个商铺及其管理员和收银员各一个 cls.wechat_person_admin = WechatPerson() cls.wechat_person_cashier = WechatPerson() # 创建商户b 并设管理员, 收银员 cls.merchatn_b = cls.factory.create_merchant( status=config.MERCHANT_STATUS['USING']) cls.factory.create_merchant_admin( wechat_openid=cls.wechat_person_admin.subscription_openid, wechat_unionid=cls.wechat_person_admin.unionid, wechat_avatar_url=cls.wechat_person_admin.user_info['headimgurl'], wechat_nickname=cls.wechat_person_admin.user_info['nickname'], merchant_admin_type=config.MERCHANT_ADMIN_TYPES['ADMIN'], status=config.SYSTEM_USER_STATUS['USING'], work_merchant=cls.merchatn_b) cls.factory.create_merchant_admin( wechat_openid=cls.wechat_person_cashier.subscription_openid, wechat_unionid=cls.wechat_person_cashier.unionid, wechat_avatar_url=cls.wechat_person_cashier. user_info['headimgurl'], wechat_nickname=cls.wechat_person_cashier.user_info['nickname'], merchant_admin_type=config.MERCHANT_ADMIN_TYPES['CASHIER'], status=config.SYSTEM_USER_STATUS['USING'], work_merchant=cls.merchatn_b)
def setUpTestData(cls): cls.factory = PayunionFactory() cls.merchant = cls.factory.create_merchant( status=MERCHANT_STATUS['USING']) cls.merchant_admin = cls.factory.create_merchant_admin( merchant_admin_type=MERCHANT_ADMIN_TYPES['ADMIN'], work_merchant=cls.merchant) # create cashiers cls.merchant_cashier = cls.factory.create_merchant_admin( status=SYSTEM_USER_STATUS['USING'], work_merchant=cls.merchant, merchant_admin_type=MERCHANT_ADMIN_TYPES['CASHIER']) cls.normal_cashier_b = cls.factory.create_merchant_admin( status=SYSTEM_USER_STATUS['USING'], work_merchant=cls.merchant, merchant_admin_type=MERCHANT_ADMIN_TYPES['CASHIER']) cls.other_merchant_cashier = cls.factory.create_merchant_admin( status=SYSTEM_USER_STATUS['USING'], merchant_admin_type=MERCHANT_ADMIN_TYPES['CASHIER']) cls.disabled_cashier = cls.factory.create_merchant_admin( status=SYSTEM_USER_STATUS['DISABLED'], work_merchant=cls.merchant, merchant_admin_type=MERCHANT_ADMIN_TYPES['CASHIER']) # 创建token并缓存, 绕过登录 super(TestCashierViewSet, cls).setUpTestData()
def setUpTestData(cls): cls.factory = PayunionFactory() cls.account = cls.factory.create_account( bank_name='工商银行成都建设路支行', bank_card_number='7778889990123', real_name='鹏飞') cls.merchant = cls.factory.create_merchant(account=cls.account)
class TestEncryptCharFileds(TestCase): """ 测试自定义的EncryptCharFiled""" value_list = ['', ' ', '0', '12344', 'asdasdasd', 'kjhfujewhff=ds+sd=='] def test_encrypt_filed(self): self.factory = PayunionFactory() for i in self.value_list: merchant_admin = self.factory.create_merchant_admin( wechat_openid=i, ) self.assertEqual(merchant_admin.wechat_openid, i) marketer = self.factory.create_marketer(wechat_openid=i, ) self.assertEqual(marketer.wechat_openid, i) client = self.factory.create_client(openid=i, ) self.assertEqual(client.openid, i)
def setUpTestData(cls): cls.factory = PayunionFactory() # 商户分类 cls.merchant_category = None for p in range(4): parent = cls.factory.create_merchant_category( name='parent{}'.format(p)) for c in range(4): cls.merchant_category = cls.factory.create_merchant_category( parent=parent, name='{}_child{}'.format(parent.name, c)) # 商户街道 for p in range(4): parent = cls.factory.create_area(name='市{}'.format(p)) for c in range(4): child = cls.factory.create_area(parent=parent, name='{}_区{}'.format( parent.name, c)) for cc in range(4): cls.area = cls.factory.create_area( parent=child, name='{}_区{}_街道{}'.format(parent.name, c, cc)) cls.account = cls.factory.create_account( balance=set_amount(1000.00), withdrawable_balance=set_amount('500.05'), alipay_balance=set_amount(2000), alipay_withdrawable_balance=set_amount('1000.05'), real_name='张三', bank_card_number='1234567890123', bank_name='中国招商银行成都玉林路支行') cls.merchant = cls.factory.create_merchant( name='就是这个公司', status=MERCHANT_STATUS['USING'], account=cls.account, area=cls.area, category=cls.merchant_category, avatar_url='https://merchant_avatar.jpg', photo_url='https://merchant_photo.jpg', id_card_back_url=True, id_card_front_url=True, day_begin_minute=8 * 60, # 商户订单日结时间设置为08:00 ) cls.merchant_admin = cls.factory.create_merchant_admin( merchant_admin_type=MERCHANT_ADMIN_TYPES['ADMIN'], work_merchant=cls.merchant, wechat_nickname='张微信', alipay_user_name='张付宝', voice_on=True) cls.merchant_cashier = cls.factory.create_merchant_admin( merchant_admin_type=MERCHANT_ADMIN_TYPES['CASHIER'], work_merchant=cls.merchant) # 创建token并缓存, 绕过登录 super(TestMerchantViewSet, cls).setUpTestData()
def setUpTestData(cls): cls.factory = PayunionFactory() cls.merchant = cls.factory.create_merchant( status=MERCHANT_STATUS['USING']) cls.merchant_admin = cls.factory.create_merchant_admin( work_merchant=cls.merchant) # 创建token并缓存, 绕过登录 super(TestCouponViewSet, cls).setUpTestData()
def setUp(self): self.factory = PayunionFactory() try: self.platform_account = Account.objects.get(id=1) except Account.DoesNotExist: self.platform_account = self.factory.create_account(id=1, balance=0, withdrawable_balance=0, alipay_balance=0, alipay_withdrawable_balance=0) self.originator_account = self.factory.create_account(real_name='引流商户', balance=0, withdrawable_balance=0, alipay_balance=0, alipay_withdrawable_balance=0) self.merchant_account = self.factory.create_account(real_name='收款', balance=0, withdrawable_balance=0, alipay_balance=0, alipay_withdrawable_balance=0) self.inviter_account = self.factory.create_account(real_name='邀请人', balance=0, withdrawable_balance=0, alipay_balance=0, alipay_withdrawable_balance=0) self.inviter = self.factory.create_marketer(account=self.inviter_account) self.test_client = self.factory.create_client(openid='oUkVN5ZFKfLOkAFwkk4oGYVc0rfg', status=0) self.merchant = self.factory.create_merchant(account=self.merchant_account, status=1, inviter=self.inviter) self.originator = self.factory.create_merchant(account=self.originator_account) self.rule = self.factory.create_coupon_rule(merchant=self.merchant) self.coupon = self.factory.create_coupon(rule=self.rule, client=self.test_client, originator_merchant=self.originator, min_charge=1000, discount=100, status=COUPON_STATUS['NOT_USED']) self.merchant_admin = self.factory.create_merchant_admin( merchant_admin_type=MERCHANT_ADMIN_TYPES.ADMIN, work_merchant=self.merchant ) super(GetMerchantInfoTestCase, self).setUp()
def setUpTestData(cls): cls.factory = PayunionFactory() cls.account = cls.factory.create_account( bank_name='工商银行成都建设路支行', bank_card_number='7778889990123', real_name='鹏飞' ) cls.merchant = cls.factory.create_merchant( account=cls.account, day_begin_minute=8 * 60, status=MERCHANT_STATUS['USING'] ) cls.merchant_admin = cls.factory.create_merchant_admin(work_merchant=cls.merchant) # 创建token并缓存, 绕过登录 super(TestTransactionViewSet, cls).setUpTestData()
def setUpTestData(cls): cls.factory = PayunionFactory() cls.merchant = cls.factory.create_merchant() cls.merchant_admin = cls.factory.create_merchant_admin( status=SYSTEM_USER_STATUS['USING'], work_merchant=cls.merchant, merchant_admin_type=MERCHANT_ADMIN_TYPES['ADMIN'], wechat_openid=Config.my_account_openid) cls.payment = cls.factory.create_payment( merchant=cls.merchant, order_price=300, ) cls.refund = cls.factory.create_refund( serial_number='refund serial_number', payment=cls.payment, ) cls.manager = RefundManager(cls.refund)
def setUpTestData(cls): cls.factory = PayunionFactory() cls.account = cls.factory.create_account( balance=set_amount(1000.00), withdrawable_balance=set_amount('500.05'), alipay_balance=set_amount(2000), alipay_withdrawable_balance=set_amount(0.99), bank_card_number='1234567890123' ) cls.merchant = cls.factory.create_merchant( name='就是这个公司', account=cls.account, day_begin_minute=8 * 60, # 商户订单日结时间设置为08:00 ) cls.merchant_admin = cls.factory.create_merchant_admin( status=SYSTEM_USER_STATUS['USING'], work_merchant=cls.merchant, merchant_admin_type=MERCHANT_ADMIN_TYPES['ADMIN'] ) cls.manager = MerchantManager(cls.merchant) # create cashiers cls.normal_cashier_a = cls.factory.create_merchant_admin( status=SYSTEM_USER_STATUS['USING'], work_merchant=cls.merchant, merchant_admin_type=MERCHANT_ADMIN_TYPES['CASHIER'] ) cls.normal_cashier_b = cls.factory.create_merchant_admin( status=SYSTEM_USER_STATUS['USING'], work_merchant=cls.merchant, merchant_admin_type=MERCHANT_ADMIN_TYPES['CASHIER'] ) cls.other_merchant_cashier = cls.factory.create_merchant_admin( status=SYSTEM_USER_STATUS['USING'], merchant_admin_type=MERCHANT_ADMIN_TYPES['CASHIER'] ) cls.disabled_cashier = cls.factory.create_merchant_admin( status=SYSTEM_USER_STATUS['DISABLED'], work_merchant=cls.merchant, merchant_admin_type=MERCHANT_ADMIN_TYPES['CASHIER'] )
def setUpTestData(cls): cls.factory = PayunionFactory() # 5个微信号和两个商铺 cls.wechat_person_A = WechatPerson() cls.wechat_person_B = WechatPerson() cls.wechat_person_C = WechatPerson() cls.wechat_person_D = WechatPerson() cls.wechat_person_E = WechatPerson() # 创建商户a 并设管理员为A cls.merchatn_a = cls.factory.create_merchant( status=config.MERCHANT_STATUS['USING']) cls.factory.create_merchant_admin( wechat_openid=cls.wechat_person_A.subscription_openid, wechat_unionid=cls.wechat_person_A.unionid, wechat_avatar_url=cls.wechat_person_A.user_info['headimgurl'], wechat_nickname=cls.wechat_person_A.user_info['nickname'], merchant_admin_type=config.MERCHANT_ADMIN_TYPES['ADMIN'], status=config.SYSTEM_USER_STATUS['USING'], work_merchant=cls.merchatn_a) # 创建商户b 并设管理员为D, 收银员为E cls.merchatn_b = cls.factory.create_merchant( status=config.MERCHANT_STATUS['USING']) cls.factory.create_merchant_admin( wechat_openid=cls.wechat_person_D.subscription_openid, wechat_unionid=cls.wechat_person_D.unionid, wechat_avatar_url=cls.wechat_person_D.user_info['headimgurl'], wechat_nickname=cls.wechat_person_D.user_info['nickname'], merchant_admin_type=config.MERCHANT_ADMIN_TYPES['ADMIN'], status=config.SYSTEM_USER_STATUS['USING'], work_merchant=cls.merchatn_b) cls.factory.create_merchant_admin( wechat_openid=cls.wechat_person_E.subscription_openid, wechat_unionid=cls.wechat_person_E.unionid, wechat_avatar_url=cls.wechat_person_E.user_info['headimgurl'], wechat_nickname=cls.wechat_person_E.user_info['nickname'], merchant_admin_type=config.MERCHANT_ADMIN_TYPES['CASHIER'], status=config.SYSTEM_USER_STATUS['USING'], work_merchant=cls.merchatn_b)
def setUpTestData(cls): cls.factory = PayunionFactory() try: cls.platform_account = Account.objects.get(id=1) except Account.DoesNotExist: cls.platform_account = cls.factory.create_account(id=1, balance=0, withdrawable_balance=0, alipay_balance=0, alipay_withdrawable_balance=0) cls.originator_account = cls.factory.create_account(real_name='引流商户', balance=0, withdrawable_balance=0, alipay_balance=0, alipay_withdrawable_balance=0) cls.merchant_account = cls.factory.create_account(real_name='收款', balance=0, withdrawable_balance=0, alipay_balance=0, alipay_withdrawable_balance=0) cls.inviter_account = cls.factory.create_account(real_name='邀请人', balance=0, withdrawable_balance=0, alipay_balance=0, alipay_withdrawable_balance=0) cls.inviter = cls.factory.create_marketer(account=cls.inviter_account) cls.test_client = cls.factory.create_client(openid='1234567890', status=0) cls.merchant = cls.factory.create_merchant(account=cls.merchant_account, inviter=cls.inviter) cls.originator = cls.factory.create_merchant(account=cls.originator_account) cls.rule = cls.factory.create_coupon_rule(merchant=cls.merchant) cls.coupon = cls.factory.create_coupon(rule=cls.rule, client=cls.test_client, originator_merchant=cls.originator, min_charge=1000, discount=100, status=COUPON_STATUS['NOT_USED']) cls.merchant_admin = cls.factory.create_merchant_admin( merchant_admin_type=MERCHANT_ADMIN_TYPES.ADMIN, work_merchant=cls.merchant ) super(GetMerchantInfoTestCase, cls).setUpTestData()
def setUp(self): self.ALIPAY_PUBLIC_KEY_backup = dynasettings.ALIPAY_PUBLIC_KEY dynasettings.ALIPAY_PUBLIC_KEY = AutoTestConfig.self_generated_alipay_public_key alipay_payment.api_instance.alipay_public_key = AutoTestConfig.self_generated_alipay_public_key create_base_data() self.factory = PayunionFactory() try: self.platform_account = Account.objects.get(id=1) except Account.DoesNotExist: self.platform_account = self.factory.create_account( id=1, balance=0, withdrawable_balance=0, alipay_balance=0, alipay_withdrawable_balance=0) # 三个商户信息 # 创建三个商户ABC # |A-B = 4| < 5 && |B-C=4| < 5 && |A-C=8| > 5 # A: 成都市武侯区锦城大道666号奥克斯广场F1 lng= 104.06147 lat= 30.57592 adcode = 510107062000 # B: 成都市武侯区益州大道1999号银泰城F1 lng= 104.05847 lat= 30.54097 adcode = 510107062000 # C: 成都市天府新区华阳街道正西街88号 lng= 104.05365 lat= 30.5062 adcode = 510116003000 merchant_info_a = dict( address_info=dict(adcode='510107062000', address='成都市武侯区锦城大道666号奥克斯广场F1', location_lon=30.57592, location_lat=104.06147), merchant_name='商户a', merchant_acct_data=dict(bank_name="工商银行", bank_card_number='622312131213122', real_name="商户a")) merchant_info_b = dict( address_info=dict(adcode='510107062000', address='成都市武侯区益州大道1999号银泰城F1', location_lon=30.54097, location_lat=104.05847), merchant_name='商户b', merchant_acct_data=dict(bank_name="工商银行", bank_card_number='622312131213123', real_name="商户b")) merchant_info_c = dict(address_info=dict(adcode='510116003000', address='成都市天府新区华阳街道正西街88号', location_lon=30.5062, location_lat=104.05365), merchant_name='商户c', merchant_acct_data=dict( bank_name="工商银行", bank_card_number='622312131213124', real_name="商户c")) inviter_workflow = GenerateInviterWorkflow(self) new_work_ids_1 = [ area.id for area in Area.objects.filter(parent__name='武侯区') ] salesman_info_1 = dict(set_salesman=True, system_admin_name='*****@*****.**', system_admin_password='******', new_work_ids=new_work_ids_1, worker_number='0001') new_work_ids_2 = [ area.id for area in Area.objects.filter(parent__name='武侯区') ] salesman_info_2 = dict(set_salesman=True, system_admin_name='*****@*****.**', system_admin_password='******', new_work_ids=new_work_ids_2, worker_number='0002') new_work_ids_3 = [ area.id for area in Area.objects.filter(parent__name='双流区') ] salesman_info_3 = dict(set_salesman=True, system_admin_name='*****@*****.**', system_admin_password='******', new_work_ids=new_work_ids_3, worker_number='0003') # 成为邀请人且设为业务员 res_info_1 = inviter_workflow.generate_inviter( name='邀请人1', salesman_info=salesman_info_1) res_info_2 = inviter_workflow.generate_inviter( name='邀请人2', salesman_info=salesman_info_2) res_info_3 = inviter_workflow.generate_inviter( name='邀请人3', salesman_info=salesman_info_3) res_data_1 = inviter_workflow.invite_merchant( inviter_token=res_info_1['token'], merchant_info=merchant_info_a) res_data_2 = inviter_workflow.invite_merchant( inviter_token=res_info_2['token'], merchant_info=merchant_info_b) res_data_3 = inviter_workflow.invite_merchant( inviter_token=res_info_3['token'], merchant_info=merchant_info_c) # 业务员1,2, 3 分别审核a,b,c 通过 aduit_a = inviter_workflow.aduit_merchant( config.MERCHANT_STATUS.USING, token=res_info_1['token'], merchant_id=res_data_1['merchant_id']) aduit_b = inviter_workflow.aduit_merchant( config.MERCHANT_STATUS.USING, token=res_info_2['token'], merchant_id=res_data_2['merchant_id']) aduit_c = inviter_workflow.aduit_merchant( config.MERCHANT_STATUS.USING, token=res_info_3['token'], merchant_id=res_data_3['merchant_id']) res_info_1.update( dict(db_instance=models.Marketer.objects.get(pk=res_info_1['id']))) res_info_2.update( dict(db_instance=models.Marketer.objects.get(pk=res_info_2['id']))) res_info_3.update( dict(db_instance=models.Marketer.objects.get(pk=res_info_3['id']))) res_data_1.update( dict(db_instance=models.Merchant.objects.get( pk=res_data_1['merchant_id']))) res_data_2.update( dict(db_instance=models.Merchant.objects.get( pk=res_data_2['merchant_id']))) res_data_3.update( dict(db_instance=models.Merchant.objects.get( pk=res_data_3['merchant_id']))) self.inviter_info = { "a": res_info_1, "b": res_info_2, "c": res_info_3, } self.merchatn_info = { "a": res_data_1, "b": res_data_2, "c": res_data_3, } self.system_admin_info = { 'username': '******', 'password': '******' } # # 每个商户分别创建4种优惠券 coupon_data_1 = dict( discount=5, min_charge=11, valid_strategy=config.VALID_STRATEGY['DATE_RANGE'], stock=10, start_date='2018-10-1', end_date='2019-5-1', photo_url=fake.image_url()) coupon_data_2 = dict( discount=8, min_charge=15, valid_strategy=config.VALID_STRATEGY['DATE_RANGE'], stock=10, start_date='2018-10-1', end_date='2019-5-1', photo_url=fake.image_url()) coupon_data_3 = dict( discount=12, min_charge=17, valid_strategy=config.VALID_STRATEGY['DATE_RANGE'], stock=10, start_date='2018-10-1', end_date='2019-5-1', photo_url=fake.image_url()) coupon_data_4 = dict( discount=15, min_charge=19, valid_strategy=config.VALID_STRATEGY['DATE_RANGE'], stock=10, start_date='2018-10-1', end_date='2019-5-1', photo_url=fake.image_url()) self.create_coupon_rule_data(res_data_1['merchant_id'], coupon_data_1) self.create_coupon_rule_data(res_data_1['merchant_id'], coupon_data_2) self.create_coupon_rule_data(res_data_1['merchant_id'], coupon_data_3) self.create_coupon_rule_data(res_data_1['merchant_id'], coupon_data_4) # b商户 coupon_data_1 = dict( discount=10, min_charge=20, valid_strategy=config.VALID_STRATEGY['DATE_RANGE'], stock=1, start_date='2018-10-1', end_date='2019-5-1', photo_url=fake.image_url()) coupon_data_2 = dict( discount=10, min_charge=20, valid_strategy=config.VALID_STRATEGY['DATE_RANGE'], stock=1, start_date='2018-10-1', end_date='2019-5-1', photo_url=fake.image_url()) coupon_data_3 = dict( discount=20, min_charge=30, valid_strategy=config.VALID_STRATEGY['DATE_RANGE'], stock=1, start_date='2018-10-1', end_date='2019-5-1', photo_url=fake.image_url()) coupon_data_4 = dict( discount=20, min_charge=30, valid_strategy=config.VALID_STRATEGY['DATE_RANGE'], stock=1, start_date='2018-10-1', end_date='2019-5-1', photo_url=fake.image_url()) self.create_coupon_rule_data(res_data_2['merchant_id'], coupon_data_1) self.create_coupon_rule_data(res_data_2['merchant_id'], coupon_data_2) self.create_coupon_rule_data(res_data_2['merchant_id'], coupon_data_3) self.create_coupon_rule_data(res_data_2['merchant_id'], coupon_data_4) coupon_data_1 = dict( discount=45, min_charge=51, valid_strategy=config.VALID_STRATEGY['DATE_RANGE'], stock=10, start_date='2018-10-1', end_date='2019-5-1', photo_url=fake.image_url()) coupon_data_2 = dict( discount=48, min_charge=55, valid_strategy=config.VALID_STRATEGY['DATE_RANGE'], stock=10, start_date='2018-10-1', end_date='2019-5-1', photo_url=fake.image_url()) coupon_data_3 = dict( discount=52, min_charge=57, valid_strategy=config.VALID_STRATEGY['DATE_RANGE'], stock=10, start_date='2018-10-1', end_date='2019-5-1', photo_url=fake.image_url()) coupon_data_4 = dict( discount=55, min_charge=59, valid_strategy=config.VALID_STRATEGY['DATE_RANGE'], stock=10, start_date='2018-10-1', end_date='2019-5-1', photo_url=fake.image_url()) self.create_coupon_rule_data(res_data_3['merchant_id'], coupon_data_1) self.create_coupon_rule_data(res_data_3['merchant_id'], coupon_data_2) self.create_coupon_rule_data(res_data_3['merchant_id'], coupon_data_3) self.create_coupon_rule_data(res_data_3['merchant_id'], coupon_data_4) super(TestUserPay, self).setUpTestData()
class TestMarketerManager(TestCase): factory = PayunionFactory() def test_has_area(self): manager = AreaModelManager() area = self.factory.create_area(adcode='110119110000') marketer = self.factory.create_marketer( status=SYSTEM_USER_STATUS.USING, inviter_type=MARKETER_TYPES.SALESMAN) marketer.working_areas.add(area) self.assertEqual(manager.has_marketer(adcode='110119110000'), True) def test_get_merchant_sharing(self): manager = PaymentModelManager() merchant = self.factory.create_merchant(name='this merchant') self.factory.create_payment(merchant=merchant, inviter_share=1989, number=10, status=PAYMENT_STATUS.FINISHED) sharing = manager.get_merchant_sharing(obj=merchant) self.assertEqual(sharing, 1989 * 10) def test_create_marketer(self): manager = CreateMarketerManager() data = dict(wechat_openid='this open id', wechat_unionid='this union id', inviter_type=MARKETER_TYPES.MARKETER, status=SYSTEM_USER_STATUS.USING, name='this marketer name', phone='this phone num', id_card_front_url='this id card front url', id_card_back_url='this id card back url') marketer_instance = manager.create(data) self.assertEqual(marketer_instance.name, data.get('name')) def test_create_merchant(self): manager = CreateMerchantManager() merchant_data = dict( status=MERCHANT_STATUS.USING, name='this name', inviter=self.factory.create_marketer(), payment_qr_code=self.factory.create_payment_qrcode(), category=self.factory.create_merchant_category(), contact_phone='this phone number', area=self.factory.create_area(), address='this address', location_lon=123, location_lat=132, description='this description', avatar_url='this url', photo_url='this url', license_url='this url', id_card_front_url='', id_card_back_url='', create_datetime=timezone.now()) admin_data = dict(wechat_openid='this openid', wechat_unionid='this unionid', wechat_avatar_url='this url', wechat_nickname='this nickname') merchant_acct_data = { 'bank_name': 'bank name', 'bank_card_number': '88888888888', 'real_name': 'real name' } merchant = manager.create(merchant_data=merchant_data, merchant_admin_data=admin_data, merchant_acct_data=merchant_acct_data) pass def test_audit_merchant(self): marketer = self.factory.create_marketer(name='this marketer') to_using_merchant = self.factory.create_merchant( name='to_using_merchant', status=MERCHANT_STATUS.REVIEWING) to_reject_merchant = self.factory.create_merchant( name='to_reject_merchant', status=MERCHANT_STATUS.REVIEWING) manager = UserMerchantModelManager(user=marketer) to_using_merchant = manager.audit_merchant( merchant_instance=to_using_merchant, to_status=MERCHANT_STATUS.USING) to_reject_merchant = manager.audit_merchant( merchant_instance=to_reject_merchant, to_status=MERCHANT_STATUS.REJECTED, audit_info='audit_info') audit_info = to_reject_merchant.merchantmarketership_set.all( ).order_by('-audit_datetime').first() pass def test_get_all_status_merchant_num(self): marketer = self.factory.create_marketer() self.factory.create_merchant(number=5, inviter=marketer, status=MERCHANT_STATUS.USING) self.factory.create_merchant(number=4, inviter=marketer, status=MERCHANT_STATUS.REVIEWING) self.factory.create_merchant(number=3, inviter=marketer, status=MERCHANT_STATUS.REJECTED) manager = UserMerchantModelManager(user=marketer) res = manager.get_invited_merchant_num() self.assertEqual(res.get('reviewing_merchants_num'), 4 + 3) self.assertEqual(res.get('using_merchants_num'), 5) def test_get_sharing(self): marketer = self.factory.create_marketer() manager = UserTransactionModelManager(user=marketer) merchant = self.factory.create_merchant(inviter=marketer) self.factory.create_transaction( account=marketer.account, transaction_type=TRANSACTION_TYPE.MARKETER_SHARE, amount=100, content_object=self.factory.create_payment(merchant=merchant)) self.factory.create_transaction( account=marketer.account, transaction_type=TRANSACTION_TYPE.MARKETER_SHARE, amount=200, content_object=self.factory.create_payment(merchant=merchant)) self.factory.create_transaction( account=marketer.account, transaction_type=TRANSACTION_TYPE.MARKETER_SHARE, amount=300, content_object=self.factory.create_payment(merchant=merchant)) res = manager.get_sharing(merchant=merchant) self.assertEqual(res, 100 + 200 + 300) def test_get_auditor_merchant(self): # 创建地址 area1 = self.factory.create_area() area2 = self.factory.create_area() area3 = self.factory.create_area() # 为管理员添加工作区域 marketer = self.factory.create_marketer() marketer.working_areas.add(area1, area2) # 添加管理员非工作区域但审核过的商铺 # using_merchant1 = self.factory.create_merchant(status=MERCHANT_STATUS.USING, area=area3) # using_merchant2 = self.factory.create_merchant(status=MERCHANT_STATUS.USING, area=area3) # using_merchant3 = self.factory.create_merchant(status=MERCHANT_STATUS.USING, area=area3) # self.factory.create_merchant_marketer_ship(marketer=marketer, merchant=using_merchant1) # self.factory.create_merchant_marketer_ship(marketer=marketer, merchant=using_merchant2) # self.factory.create_merchant_marketer_ship(marketer=marketer, merchant=using_merchant3) # 添加管理员工作区域待审核商铺 reviewing_merchant1 = self.factory.create_merchant( status=MERCHANT_STATUS.REVIEWING, area=area1) reviewing_merchant2 = self.factory.create_merchant( status=MERCHANT_STATUS.REVIEWING, area=area2) # 添加非管理员工作区域商铺 self.factory.create_merchant(area=area3) # 添加管理员工作区域已审核商铺 using_merchant = self.factory.create_merchant( status=MERCHANT_STATUS.USING, area=area1) # 预期查询结果 # merchant_set = {using_merchant1, using_merchant2, using_merchant3, reviewing_merchant1, reviewing_merchant2} merchant_set = { using_merchant, reviewing_merchant1, reviewing_merchant2 } manager = UserMerchantModelManager(user=marketer) res = manager.get_auditor_merchants() # 实际查询结果 res_set = set() for item in res: res_set.add(item) self.assertEqual(merchant_set, res_set) def test_check_phone(self): self.factory.create_marketer(phone='18888888888') mamager = MarketerModelManager() res = mamager.check_phone_exist('18888888888') self.assertEqual(res, True) def test_show_invited_merchants(self): marketer = self.factory.create_marketer( status=SYSTEM_USER_STATUS.USING) merchant = self.factory.create_merchant(inviter=marketer, status=MERCHANT_STATUS.USING) for i in range(10): payment = self.factory.create_payment( merchant=merchant, status=PAYMENT_STATUS.FINISHED, order_price=10000, inviter_share=10000 * 0.005) self.factory.create_transaction( content_object=payment, transaction_type=TRANSACTION_TYPE.MARKETER_SHARE, amount=payment.inviter_share) manager = UserTransactionModelManager(user=marketer) res = manager.get_sharing(merchant) self.assertEqual(res, 500) def test_VerifyAccountLimitRecord(self): VerifyAccountLimitRecord.delete_record('test') record = 0 for _ in range(11): record = VerifyAccountLimitRecord.record_request_an_hour('test') self.assertFalse(record < MAX_VERIFY_ACCOUNT_REQUEST_AN_HOUR) VerifyAccountLimitRecord.delete_record('test')
def setUpTestData(cls): cls.factory = PayunionFactory() cls.manager = MerchantCategoryModelManager()
class TestWechatPaySteps(APITestCase): def setUp(self): # We use a faked ALIPAY_PUBLIC_KEY to mock the alipay response. # ALIPAY_PUBLIC_KEY and its corresponding private key is generated by ourselves. self.ALIPAY_PUBLIC_KEY_backup = dynasettings.ALIPAY_PUBLIC_KEY dynasettings.ALIPAY_PUBLIC_KEY = AutoTestConfig.self_generated_alipay_public_key alipay_payment.api_instance.alipay_public_key = AutoTestConfig.self_generated_alipay_public_key self.factory = PayunionFactory() try: self.platform_account = Account.objects.get(id=1) except Account.DoesNotExist: self.platform_account = self.factory.create_account(id=1, balance=0, withdrawable_balance=0, alipay_balance=0, alipay_withdrawable_balance=0) self.originator_account = self.factory.create_account(real_name='引流商户', balance=0, withdrawable_balance=0, alipay_balance=0, alipay_withdrawable_balance=0) self.merchant_account = self.factory.create_account(real_name='收款', balance=0, withdrawable_balance=0, alipay_balance=0, alipay_withdrawable_balance=0) self.inviter_account = self.factory.create_account(real_name='邀请人', balance=0, withdrawable_balance=0, alipay_balance=0, alipay_withdrawable_balance=0) self.inviter = self.factory.create_marketer(account=self.inviter_account) self.test_client = self.factory.create_client(openid='1234567890', status=0) self.merchant = self.factory.create_merchant(account=self.merchant_account, inviter=self.inviter, status=MERCHANT_STATUS.USING) self.originator = self.factory.create_merchant(account=self.originator_account) self.rule = self.factory.create_coupon_rule(merchant=self.merchant, valid_strategy=VALID_STRATEGY.EXPIRATION, expiration_days=30) self.coupon = self.factory.create_coupon(rule=self.rule, client=self.test_client, originator_merchant=self.originator, min_charge=1000, discount=100, obtain_datetime=timezone.now(), status=COUPON_STATUS['NOT_USED']) self.merchant_admin = self.factory.create_merchant_admin( merchant_admin_type=MERCHANT_ADMIN_TYPES.ADMIN, work_merchant=self.merchant ) super(TestWechatPaySteps, self).setUpTestData() def tearDown(self): dynasettings.ALIPAY_PUBLIC_KEY = self.ALIPAY_PUBLIC_KEY_backup alipay_payment.api_instance.alipay_public_key = self.ALIPAY_PUBLIC_KEY_backup def test_workflow(self): client_steps = ClientSteps() # Login code = uuid.uuid4().hex def validate(request): params = parse_qs(request.query) self.assertEqual(params['app_id'][0], str(dynasettings.ALIPAY_APP_ID)) self.assertEqual(params['code'][0], code) self.assertEqual(params['grant_type'][0], 'authorization_code') return True login_result = client_steps.alipay_login(code, mocked_user_id=self.test_client.openid, validate=validate) access_token = login_result['access_token'] self.assertEqual(len(access_token), 32) # Get user info me_info = client_steps.me(access_token) assert me_info # Get all coupons coupons = client_steps.get_coupons(access_token) self.assertEqual(len(coupons), 1) self.assertEqual(coupons[0]['id'], self.coupon.id) self.assertEqual(coupons[0]['rule']['merchant']['name'], self.merchant.name) self.assertEqual(coupons[0]['discount'], self.coupon.discount) self.assertEqual(coupons[0]['min_charge'], self.coupon.min_charge) # Get merchant info merchant_info = client_steps.get_merchant_info(access_token, self.merchant.payment_qr_code.uuid) self.assertTrue(merchant_info) self.assertTrue(merchant_info['id']) self.assertTrue(merchant_info['name']) self.assertTrue(merchant_info['description']) self.assertTrue(merchant_info['avatar_url']) self.assertTrue(isinstance(merchant_info['status'], int)) # Place order alipay_payment_steps = AlipayPaymentSteps( access_token) shared_pay_steps = SharedPaySteps(access_token) place_order_result = alipay_payment_steps.place_order( self.merchant.id, 1000, self.coupon.id) assert place_order_result self.assertEqual(place_order_result['code'], '10000') self.assertEqual(place_order_result['msg'], 'Success') self.assertEqual(len(place_order_result['out_trade_no']), 32) # Cancel the order cancel_order_result = alipay_payment_steps.cancel_order( place_order_result['out_trade_no']) assert cancel_order_result['new_coupon'] self.coupon = Coupon.objects.get(id=cancel_order_result['new_coupon']['id']) assert self.coupon # Place another order place_order_result = alipay_payment_steps.place_order( self.merchant.id, 1000, self.coupon.id) assert place_order_result self.assertEqual(place_order_result['code'], '10000') self.assertEqual(place_order_result['msg'], 'Success') self.assertEqual(len(place_order_result['out_trade_no']), 32) poll_result_result = shared_pay_steps.poll_result( place_order_result['out_trade_no'], None, None, None ) assert poll_result_result['payment']['status'] == 0 # Payment callback callback_response = alipay_payment_steps.payment_callback( dynasettings.ALIPAY_APP_ID, self.test_client.openid, place_order_result['out_trade_no'], 900, ) assert '"OK"' == callback_response.content.decode() poll_result_result = shared_pay_steps.poll_result( place_order_result['out_trade_no'], None, None, None ) assert poll_result_result['payment']['status'] == 1 # login merchant code = uuid.uuid4().hex resp = MerchantLoginMockStep(self).login( code, mocked_unionid=self.merchant_admin.wechat_unionid) token = resp.json()['token'] assert token # get merchant info me = MerchantStep(self, token=token).me().json() self.assertEqual(me['name'], self.merchant.name) # get order detail order_detail = TransactionStep(self, token=token).retrieve( transaction_id=place_order_result['out_trade_no']).json() self.assertEqual(order_detail['status'], config.PAYMENT_STATUS.FROZEN) # refund refund_result = TransactionStep(self, token=token).refund( payment_id=place_order_result['out_trade_no']).json() self.assertEqual(refund_result, {}) # get order detail order_detail = TransactionStep(self, token=token).retrieve( transaction_id=place_order_result['out_trade_no']).json() self.assertEqual(order_detail['status'], config.PAYMENT_STATUS.REFUND) # ******************************************** # Place another to test unfreeze place_order_result = alipay_payment_steps.place_order( self.merchant.id, 1000, Coupon.objects.filter(client=self.test_client).order_by('-id').first().id) # Payment callback alipay_payment_steps.payment_callback( dynasettings.ALIPAY_APP_ID, self.test_client.openid, place_order_result['out_trade_no'], 900, ) # Unfreeze and check result. shared_pay_steps.unfreeze_immediately() order_detail = TransactionStep(self, token=token).retrieve( transaction_id=place_order_result['out_trade_no']).json() self.assertEqual(order_detail['status'], config.PAYMENT_STATUS.FINISHED)
def setUp(self): self.factory = PayunionFactory() self.merchant = self.factory.create_merchant() self.merchant_admin = self.factory.create_merchant_admin( work_merchant=self.merchant, alipay_user_name='周杰偷') self.manager = MerchantAdminManager(self.merchant_admin)
class DemoData: factory = PayunionFactory() class C: categories = { '娱乐': ('电玩', '健身游泳', '彩票', '网吧', '按摩', '足浴'), '农林牧渔': ('兽医兽药', '农药', '化肥', '养殖', '种植', '园林景观'), '旅游住宿': ('旅游', '宾馆酒店', '交通票务'), '日用百货': ('文具', '服装', '纺织原料', '箱包', '饰品', '日化用品', '化妆品', '美容', '家具', '家纺家饰', '餐具厨具', '大型家电', '成人用品'), '餐饮': ('饮料饮品', '中餐', '牛排', '零食', '冰淇淋', '火锅', '咖啡'), } avatar_url = 'https://ss1.mvpalpha.muchbo.com/images/8c4d0e63-9d0d-4147-9c4c-bdfe0041d954_.jpg' photo_url = 'https://ss1.mvp.muchbo.com/default_avatar_v2/2.png' id_card_front_url = 'https://ss1.mvpalpha.muchbo.com//tmp/wxde4cd9477fb1b7cc.o6zAJs_2J1MEva4MSZJ3mD_HZxGs.HCOsasOtDFiIfa0725dff5d321d4c45473bbb9a559a9.png' id_card_back_url = 'https://ss1.mvpalpha.muchbo.com//tmp/wxde4cd9477fb1b7cc.o6zAJs_2J1MEva4MSZJ3mD_HZxGs.LQlXi3PiXc6Y514303d48605a6b93c6acd415b691055.png' merchant_admins = [ dict(name='易宇豪', openid='ocBww1tzu48XhqoyLAAro_K5VjNU', unionid='oYpKH1FA1m_piWNL9RYF8Mi61iCU'), dict(name='陈秀梅', openid='1', unionid='oYpKH1NA7fnrBASmTz_61Wh-e3dA'), dict(name='代绪', openid='ocBww1oHcnOem9Uhterls3ItFx9o', unionid='oYpKH1BZdJeahn9sL46tsXM7vXqM', qr_code_uuid='129d3209ad9f87771719df50347492d9'), dict(name='谢汪益', openid='ocBww1n_-2iKlWyp4lXBS73iWwAc', unionid='oYpKH1E0JUlHLfeGXed1nsCdavoE'), ] marketers = [ dict(type='SALESMAN', name='谢汪益', openid='ocBww1n_-2iKlWyp4lXBS73iWwAc', unionid='oYpKH1E0JUlHLfeGXed1nsCdavoE'), dict(type='MARKETER', name='刘琳', openid='ocBww1iGLaABtMiNJGgT0fK2mp1g', unionid='oYpKH1BKU3Qdg9kPgCwTAJGgbBJI'), dict(type='MARKETER', name='唐田', openid='3', unionid='oYpKH1Ebo1opV914_yj49vyB0Aa8'), dict(type='MARKETER', name='李姗', openid='ocBww1lbnnTT8fz84M8WX4mYz4ho', unionid='oYpKH1FXke5DLi38tqZ-p8Sa1VEE'), ] withdraw = 90 receive = 100.1 share = 1.01 @classmethod def already_created(cls): return MerchantAdmin.objects.first() is not None @classmethod def create_marketer(cls, user): account = cls.factory.create_account( balance=set_amount(10), withdrawable_balance=set_amount('0.50'), alipay_balance=set_amount('15006.50'), alipay_withdrawable_balance=set_amount('15006.50'), real_name=user['name']) cls.marketer = cls.factory.create_marketer( wechat_openid=user['openid'], wechat_unionid=user['unionid'], inviter_type=MARKETER_TYPES[user['type']], status=SYSTEM_USER_STATUS['USING'], name=user['name'], phone='13333333333', id_card_front_url=cls.C.id_card_front_url, id_card_back_url=cls.C.id_card_back_url, account=account, ) @classmethod def create_merchant(cls, user): # 商户account account = cls.factory.create_account( balance=set_amount(10), withdrawable_balance=set_amount('0.50'), alipay_balance=set_amount('15006.50'), alipay_withdrawable_balance=set_amount('15006.50'), real_name=user['name']) # 付款二维码, 使用唯一可测试的code payment_qr_code = cls.factory.create_payment_qrcode(uuid='129d3209ad9f87771719df50347492d9') \ if 'qr_code_uuid' in user else None # 商户 merchant = cls.factory.create_merchant( name=f"一家咖啡店({user['name']}店)", status=MERCHANT_STATUS['USING'], location_lat=30.533743, location_lon=104.068197, account=account, area=cls.area, category=cls.merchant_category, inviter=cls.marketer, avatar_url=cls.C.avatar_url, photo_url=cls.C.photo_url, id_card_back_url=cls.C.id_card_back_url, id_card_front_url=cls.C.id_card_front_url, payment_qr_code=payment_qr_code) cls.factory.create_merchant_admin( wechat_openid=user['openid'], wechat_unionid=user['unionid'], merchant_admin_type=MERCHANT_ADMIN_TYPES['ADMIN'], work_merchant=merchant, wechat_nickname=user['name']) # 创建投放完成的优惠券 coupon_rule = cls.factory.create_coupon_rule(merchant=merchant, stock=0) share_merchant = cls.factory.create_merchant( name='通过发优惠券引流客户到达的商户', area=cls.area, category=cls.merchant_category, inviter=cls.marketer, ) grant_coupon_merchant = cls.factory.create_merchant( name='发优惠券的商户', area=cls.area, category=cls.merchant_category, inviter=cls.marketer, ) cls.factory.create_coupon(number=1, rule=coupon_rule, status=COUPON_STATUS['NOT_USED'], originator_merchant=grant_coupon_merchant, use_datetime=timezone.now()) cls.factory.create_coupon(number=2, rule=coupon_rule, status=COUPON_STATUS['USED'], originator_merchant=grant_coupon_merchant, use_datetime=timezone.now()) cls.factory.create_coupon(number=4, rule=coupon_rule, status=COUPON_STATUS['DESTROYED'], originator_merchant=grant_coupon_merchant, use_datetime=timezone.now()) cls.factory.create_coupon(number=8, rule=coupon_rule, status=COUPON_STATUS['USED'], originator_merchant=grant_coupon_merchant, use_datetime=timezone.now().replace( hour=7, minute=59, second=59, microsecond=0)) for day in range(10): withdraw = cls.factory.create_withdraw(account=account, amount=set_amount( cls.C.withdraw)) cls.factory.create_transaction( content_object=withdraw, account=account, datetime=withdraw.datetime, transaction_type=TRANSACTION_TYPE['MERCHANT_WITHDRAW']) withdraw = cls.factory.create_withdraw( withdraw_type=WITHDRAW_TYPE.ALIPAY, account=account, amount=set_amount(cls.C.withdraw)) cls.factory.create_transaction( content_object=withdraw, account=account, amount=-withdraw.amount, datetime=withdraw.datetime, transaction_type=TRANSACTION_TYPE['MERCHANT_WITHDRAW']) coupon_rule = cls.factory.create_coupon_rule( merchant=merchant, datetime=timezone.now(), end_date=timezone.now().replace(year=2019)) coupon = cls.factory.create_coupon( rule=coupon_rule, originator_merchant=grant_coupon_merchant, obtain_datetime=timezone.now() - timedelta(days=day), use_datetime=timezone.now() - timedelta(days=day), ) payment = cls.factory.create_payment( merchant=merchant, coupon=coupon, datetime=timezone.now() - timedelta(days=day), ) cls.factory.create_transaction( content_object=payment, account=account, datetime=payment.datetime, transaction_type=TRANSACTION_TYPE['MERCHANT_RECEIVE']) without_coupon_payment = cls.factory.create_payment( merchant=merchant, datetime=timezone.now() - timedelta(days=day), ) cls.factory.create_transaction( content_object=without_coupon_payment, account=account, datetime=without_coupon_payment.datetime, transaction_type=TRANSACTION_TYPE['MERCHANT_RECEIVE']) share = cls.factory.create_payment( coupon=cls.factory.create_coupon( rule=coupon_rule, originator_merchant=grant_coupon_merchant), datetime=timezone.now() - timedelta(days=day), merchant=share_merchant) cls.factory.create_transaction( content_object=share, account=account, datetime=share.datetime, transaction_type=TRANSACTION_TYPE['MERCHANT_SHARE']) @classmethod def create(cls): if cls.already_created(): return with atomic(): cls.area = Area.objects.order_by('-id').first() # 商户分类 cls.merchant_category = None for p, children in cls.C.categories.items(): parent = cls.factory.create_merchant_category(name=p) for c in children: cls.merchant_category = cls.factory.create_merchant_category( parent=parent, name=c) # 创建业务员 for user in cls.C.marketers: cls.create_marketer(user) # 创建商户 for user in cls.C.merchant_admins: cls.create_merchant(user) # 后台管理员 cls.factory.create_system_admin( username='******', password=make_password('123456'), name='super', status=SYSTEM_USER_STATUS['USING'], is_super=True, )
def setUp(self): self.factory = PayunionFactory() self.merchant = self.factory.create_merchant() self.merchant_admin = self.factory.create_merchant_admin( work_merchant=self.merchant) self.manager = MerchantAdminModelManager()
class TestUserPay(MerchantClientTestBase): def setUp(self): self.ALIPAY_PUBLIC_KEY_backup = dynasettings.ALIPAY_PUBLIC_KEY dynasettings.ALIPAY_PUBLIC_KEY = AutoTestConfig.self_generated_alipay_public_key alipay_payment.api_instance.alipay_public_key = AutoTestConfig.self_generated_alipay_public_key create_base_data() self.factory = PayunionFactory() try: self.platform_account = Account.objects.get(id=1) except Account.DoesNotExist: self.platform_account = self.factory.create_account( id=1, balance=0, withdrawable_balance=0, alipay_balance=0, alipay_withdrawable_balance=0) # 三个商户信息 # 创建三个商户ABC # |A-B = 4| < 5 && |B-C=4| < 5 && |A-C=8| > 5 # A: 成都市武侯区锦城大道666号奥克斯广场F1 lng= 104.06147 lat= 30.57592 adcode = 510107062000 # B: 成都市武侯区益州大道1999号银泰城F1 lng= 104.05847 lat= 30.54097 adcode = 510107062000 # C: 成都市天府新区华阳街道正西街88号 lng= 104.05365 lat= 30.5062 adcode = 510116003000 merchant_info_a = dict( address_info=dict(adcode='510107062000', address='成都市武侯区锦城大道666号奥克斯广场F1', location_lon=30.57592, location_lat=104.06147), merchant_name='商户a', merchant_acct_data=dict(bank_name="工商银行", bank_card_number='622312131213122', real_name="商户a")) merchant_info_b = dict( address_info=dict(adcode='510107062000', address='成都市武侯区益州大道1999号银泰城F1', location_lon=30.54097, location_lat=104.05847), merchant_name='商户b', merchant_acct_data=dict(bank_name="工商银行", bank_card_number='622312131213123', real_name="商户b")) merchant_info_c = dict(address_info=dict(adcode='510116003000', address='成都市天府新区华阳街道正西街88号', location_lon=30.5062, location_lat=104.05365), merchant_name='商户c', merchant_acct_data=dict( bank_name="工商银行", bank_card_number='622312131213124', real_name="商户c")) inviter_workflow = GenerateInviterWorkflow(self) new_work_ids_1 = [ area.id for area in Area.objects.filter(parent__name='武侯区') ] salesman_info_1 = dict(set_salesman=True, system_admin_name='*****@*****.**', system_admin_password='******', new_work_ids=new_work_ids_1, worker_number='0001') new_work_ids_2 = [ area.id for area in Area.objects.filter(parent__name='武侯区') ] salesman_info_2 = dict(set_salesman=True, system_admin_name='*****@*****.**', system_admin_password='******', new_work_ids=new_work_ids_2, worker_number='0002') new_work_ids_3 = [ area.id for area in Area.objects.filter(parent__name='双流区') ] salesman_info_3 = dict(set_salesman=True, system_admin_name='*****@*****.**', system_admin_password='******', new_work_ids=new_work_ids_3, worker_number='0003') # 成为邀请人且设为业务员 res_info_1 = inviter_workflow.generate_inviter( name='邀请人1', salesman_info=salesman_info_1) res_info_2 = inviter_workflow.generate_inviter( name='邀请人2', salesman_info=salesman_info_2) res_info_3 = inviter_workflow.generate_inviter( name='邀请人3', salesman_info=salesman_info_3) res_data_1 = inviter_workflow.invite_merchant( inviter_token=res_info_1['token'], merchant_info=merchant_info_a) res_data_2 = inviter_workflow.invite_merchant( inviter_token=res_info_2['token'], merchant_info=merchant_info_b) res_data_3 = inviter_workflow.invite_merchant( inviter_token=res_info_3['token'], merchant_info=merchant_info_c) # 业务员1,2, 3 分别审核a,b,c 通过 aduit_a = inviter_workflow.aduit_merchant( config.MERCHANT_STATUS.USING, token=res_info_1['token'], merchant_id=res_data_1['merchant_id']) aduit_b = inviter_workflow.aduit_merchant( config.MERCHANT_STATUS.USING, token=res_info_2['token'], merchant_id=res_data_2['merchant_id']) aduit_c = inviter_workflow.aduit_merchant( config.MERCHANT_STATUS.USING, token=res_info_3['token'], merchant_id=res_data_3['merchant_id']) res_info_1.update( dict(db_instance=models.Marketer.objects.get(pk=res_info_1['id']))) res_info_2.update( dict(db_instance=models.Marketer.objects.get(pk=res_info_2['id']))) res_info_3.update( dict(db_instance=models.Marketer.objects.get(pk=res_info_3['id']))) res_data_1.update( dict(db_instance=models.Merchant.objects.get( pk=res_data_1['merchant_id']))) res_data_2.update( dict(db_instance=models.Merchant.objects.get( pk=res_data_2['merchant_id']))) res_data_3.update( dict(db_instance=models.Merchant.objects.get( pk=res_data_3['merchant_id']))) self.inviter_info = { "a": res_info_1, "b": res_info_2, "c": res_info_3, } self.merchatn_info = { "a": res_data_1, "b": res_data_2, "c": res_data_3, } self.system_admin_info = { 'username': '******', 'password': '******' } # # 每个商户分别创建4种优惠券 coupon_data_1 = dict( discount=5, min_charge=11, valid_strategy=config.VALID_STRATEGY['DATE_RANGE'], stock=10, start_date='2018-10-1', end_date='2019-5-1', photo_url=fake.image_url()) coupon_data_2 = dict( discount=8, min_charge=15, valid_strategy=config.VALID_STRATEGY['DATE_RANGE'], stock=10, start_date='2018-10-1', end_date='2019-5-1', photo_url=fake.image_url()) coupon_data_3 = dict( discount=12, min_charge=17, valid_strategy=config.VALID_STRATEGY['DATE_RANGE'], stock=10, start_date='2018-10-1', end_date='2019-5-1', photo_url=fake.image_url()) coupon_data_4 = dict( discount=15, min_charge=19, valid_strategy=config.VALID_STRATEGY['DATE_RANGE'], stock=10, start_date='2018-10-1', end_date='2019-5-1', photo_url=fake.image_url()) self.create_coupon_rule_data(res_data_1['merchant_id'], coupon_data_1) self.create_coupon_rule_data(res_data_1['merchant_id'], coupon_data_2) self.create_coupon_rule_data(res_data_1['merchant_id'], coupon_data_3) self.create_coupon_rule_data(res_data_1['merchant_id'], coupon_data_4) # b商户 coupon_data_1 = dict( discount=10, min_charge=20, valid_strategy=config.VALID_STRATEGY['DATE_RANGE'], stock=1, start_date='2018-10-1', end_date='2019-5-1', photo_url=fake.image_url()) coupon_data_2 = dict( discount=10, min_charge=20, valid_strategy=config.VALID_STRATEGY['DATE_RANGE'], stock=1, start_date='2018-10-1', end_date='2019-5-1', photo_url=fake.image_url()) coupon_data_3 = dict( discount=20, min_charge=30, valid_strategy=config.VALID_STRATEGY['DATE_RANGE'], stock=1, start_date='2018-10-1', end_date='2019-5-1', photo_url=fake.image_url()) coupon_data_4 = dict( discount=20, min_charge=30, valid_strategy=config.VALID_STRATEGY['DATE_RANGE'], stock=1, start_date='2018-10-1', end_date='2019-5-1', photo_url=fake.image_url()) self.create_coupon_rule_data(res_data_2['merchant_id'], coupon_data_1) self.create_coupon_rule_data(res_data_2['merchant_id'], coupon_data_2) self.create_coupon_rule_data(res_data_2['merchant_id'], coupon_data_3) self.create_coupon_rule_data(res_data_2['merchant_id'], coupon_data_4) coupon_data_1 = dict( discount=45, min_charge=51, valid_strategy=config.VALID_STRATEGY['DATE_RANGE'], stock=10, start_date='2018-10-1', end_date='2019-5-1', photo_url=fake.image_url()) coupon_data_2 = dict( discount=48, min_charge=55, valid_strategy=config.VALID_STRATEGY['DATE_RANGE'], stock=10, start_date='2018-10-1', end_date='2019-5-1', photo_url=fake.image_url()) coupon_data_3 = dict( discount=52, min_charge=57, valid_strategy=config.VALID_STRATEGY['DATE_RANGE'], stock=10, start_date='2018-10-1', end_date='2019-5-1', photo_url=fake.image_url()) coupon_data_4 = dict( discount=55, min_charge=59, valid_strategy=config.VALID_STRATEGY['DATE_RANGE'], stock=10, start_date='2018-10-1', end_date='2019-5-1', photo_url=fake.image_url()) self.create_coupon_rule_data(res_data_3['merchant_id'], coupon_data_1) self.create_coupon_rule_data(res_data_3['merchant_id'], coupon_data_2) self.create_coupon_rule_data(res_data_3['merchant_id'], coupon_data_3) self.create_coupon_rule_data(res_data_3['merchant_id'], coupon_data_4) super(TestUserPay, self).setUpTestData() def tearDown(self): dynasettings.ALIPAY_PUBLIC_KEY = self.ALIPAY_PUBLIC_KEY_backup alipay_payment.api_instance.alipay_public_key = self.ALIPAY_PUBLIC_KEY_backup def create_coupon_rule_data(self, merchant_id, coupon_rule_data): """ 每个商户分别创建4种优惠券""" merchant_admin = MerchantAdmin.objects.filter( work_merchant_id=merchant_id, merchant_admin_type=config.MERCHANT_ADMIN_TYPES.ADMIN).first() # 商户管理员a创建4种卡券 merchant_admin_token = self.mock_merchant_admin_or_cashier_login_success( WechatPerson(unionid=merchant_admin.wechat_unionid, subscription_openid=merchant_admin.wechat_openid)) admin_coupon_step = CouponStep(self, merchant_admin_token) resp = admin_coupon_step.create(**coupon_rule_data) def test_user_alipay_not_use_coupon(self): """ 不使用优惠券付款 :return: """ # 用户支付宝支付 向a商户0.01 元后退款""" # 用户不同意地理位置授权,支付成功,获取商户B的优惠券共3张 # 支付宝授权 alipay_clent_step = ClientSteps() alipay_person_userid = str(uuid.uuid4().hex) alipay_person = alipay_clent_step.alipay_login(str(uuid.uuid4().hex), alipay_person_userid, None) alipay_person_access_token = alipay_person['access_token'] # 给商户a支付0.01元给商户 money = 1 alipay_payment_step = AlipayPaymentSteps(alipay_person_access_token) place_order_resp_json = alipay_payment_step.place_order( self.merchatn_info['a']['merchant_id'], money, None) # 支付宝支付成功回调 resp = alipay_payment_step.payment_callback( dynasettings.ALIPAY_APP_ID, alipay_person_userid, place_order_resp_json['out_trade_no'], 1) self.assertEqual(resp.content.decode(), '"OK"') # 获取优惠券 , 未报告位置,获取三张b的优惠券 resp_json = SharedPaySteps(alipay_person['access_token']).poll_result( place_order_resp_json['out_trade_no'], None, None, None) payment_info = resp_json['payment'] self.assertEqual(payment_info['serial_number'], place_order_resp_json['out_trade_no']) self.assertEqual(payment_info['status'], config.PAYMENT_STATUS['FROZEN']) self.assertEqual(payment_info['order_price'], money) coupons = resp_json['coupons'] self.assertEqual(len(coupons), 3) for coupon in coupons: self.assertEqual('商户b', coupon['rule']['merchant']['name']) self.assertEqual('商户a', coupon['originator_merchant']) # 打开用户端查看三张优惠券 resp_json = alipay_clent_step.get_coupons(alipay_person_access_token) self.assertEqual(resp_json, coupons) # 商户a退款 # 商户管理员登录token merchant_admin = MerchantAdmin.objects.filter( work_merchant_id=self.merchatn_info['a']['merchant_id'], merchant_admin_type=config.MERCHANT_ADMIN_TYPES.ADMIN).first() merchant_admin_token = self.mock_merchant_admin_or_cashier_login_success( WechatPerson(unionid=merchant_admin.wechat_unionid, subscription_openid=merchant_admin.wechat_openid)) transaction_step = TransactionStep(self) resp = transaction_step.alipay_refund(merchant_admin_token, payment_info['serial_number']) self.assertEqual(resp.json(), {}) # 退款成功,用户查看其优惠券未消失,商户b卡券已领三张 resp_json = alipay_clent_step.get_coupons(alipay_person_access_token) self.assertEqual(resp_json, coupons) # TODO 商户b管理员登录查看卡券已领三张 # merchant_admin = MerchantAdmin.objects.get(pk=self.merchatn_info['b']['merchant_id']) # merchant_admin_token = self.mock_merchant_admin_or_cashier_login_success( # WechatPerson(unionid=merchant_admin.wechat_unionid, # subscription_openid=merchant_admin.wechat_openid # )) # coupon_step = CouponStep(self, merchant_admin_token) # resp_json = coupon_step.list() # 后台管理员登录查看数据 system_admin_login_step = LoginStep(self) finacial_query_step = FinancialQueryStep(self) system_admin_login_step.login(**self.system_admin_info) resp = finacial_query_step.get_overview_data() self.assertEqual( resp.json(), { 'merchant': 3, 'inviter': 3, 'client': 1, 'coupon': 3, 'coupon_used': 0, 'payment': { 'wechat': 0.0, 'alipay': 0.0, 'total': 0.0 } }) # 用户同意地理位置授权,且用户在商户C的位置。支付成功,获取商户B、C的优惠券共3张 # 给商户a支付10元给商户 money = 10 * 100 alipay_payment_step = AlipayPaymentSteps(alipay_person_access_token) place_order_resp_json = alipay_payment_step.place_order( self.merchatn_info['a']['merchant_id'], money, None) print(place_order_resp_json) # 支付宝支付成功回调 resp = alipay_payment_step.payment_callback( dynasettings.ALIPAY_APP_ID, alipay_person_userid, place_order_resp_json['out_trade_no'], 10 * 100) self.assertEqual(resp.content.decode(), '"OK"') # 获取优惠券 , 用户在商户C的位置,获取商户b、c的优惠券共3张 resp_json = SharedPaySteps(alipay_person['access_token']).poll_result( place_order_resp_json['out_trade_no'], self.merchatn_info['c']['db_instance'].location_lon, self.merchatn_info['c']['db_instance'].location_lat, 5.0) payment_info = resp_json['payment'] self.assertEqual(payment_info['serial_number'], place_order_resp_json['out_trade_no']) self.assertEqual(payment_info['status'], config.PAYMENT_STATUS['FROZEN']) self.assertEqual(payment_info['order_price'], money) coupons = resp_json['coupons'] self.assertEqual(len(coupons), 3) for coupon in coupons: self.assertEqual('商户a', coupon['originator_merchant']) self.assertIn(coupon['rule']['merchant']['name'], ['商户b', '商户c']) # 后台查看 resp = finacial_query_step.get_overview_data() print(resp.json()) self.assertEqual( resp.json(), { 'merchant': 3, 'inviter': 3, 'client': 1, 'coupon': 6, 'coupon_used': 0, 'payment': { 'wechat': 0.0, 'alipay': 10, 'total': 10 } }) def test_user_alipay_use_coupon(self): """ 使用优惠券付款 :return: """ # 用户支付宝支付 向a商户0.01 元后退款""" # 用户不同意地理位置授权,支付成功,获取商户B的优惠券共3张 # 支付宝授权 alipay_clent_step = ClientSteps() alipay_person_userid = str(uuid.uuid4().hex) alipay_person = alipay_clent_step.alipay_login(str(uuid.uuid4().hex), alipay_person_userid, None) alipay_person_access_token = alipay_person['access_token'] # 给商户a支付0.01元给商户 money = 1 alipay_payment_step = AlipayPaymentSteps(alipay_person_access_token) place_order_resp_json = alipay_payment_step.place_order( self.merchatn_info['a']['merchant_id'], money, None) # 支付宝支付成功回调 resp = alipay_payment_step.payment_callback( dynasettings.ALIPAY_APP_ID, alipay_person_userid, place_order_resp_json['out_trade_no'], 1) self.assertEqual(resp.content.decode(), '"OK"') # 获取优惠券 , 未报告位置,获取三张b的优惠券 resp_json = SharedPaySteps(alipay_person['access_token']).poll_result( place_order_resp_json['out_trade_no'], None, None, None) payment_info = resp_json['payment'] self.assertEqual(payment_info['serial_number'], place_order_resp_json['out_trade_no']) self.assertEqual(payment_info['status'], config.PAYMENT_STATUS['FROZEN']) self.assertEqual(payment_info['order_price'], money) coupons = resp_json['coupons'] user_coupon_type_dict = dict(buy_20_get_10_reduction=[], buy_30_get_20_reduction=[]) self.assertEqual(len(coupons), 3) for coupon in coupons: self.assertEqual('商户b', coupon['rule']['merchant']['name']) self.assertEqual('商户a', coupon['originator_merchant']) if coupon['discount'] == 1000 and coupon['min_charge'] == 2000: user_coupon_type_dict['buy_20_get_10_reduction'].append( coupon['id']) elif coupon['discount'] == 2000 and coupon['min_charge'] == 3000: user_coupon_type_dict['buy_30_get_20_reduction'].append( coupon['id']) self.assertNotEqual( user_coupon_type_dict, dict(buy_20_get_10_reduction=[], buy_30_get_20_reduction=[])) # 商户a退款 # 商户管理员登录token merchant_admin = MerchantAdmin.objects.filter( work_merchant_id=self.merchatn_info['a']['merchant_id'], merchant_admin_type=config.MERCHANT_ADMIN_TYPES.ADMIN).first() merchant_admin_token = self.mock_merchant_admin_or_cashier_login_success( WechatPerson(unionid=merchant_admin.wechat_unionid, subscription_openid=merchant_admin.wechat_openid)) transaction_step = TransactionStep(self) resp = transaction_step.alipay_refund(merchant_admin_token, payment_info['serial_number']) self.assertEqual(resp.json(), {}) # 退款成功,用户查看其优惠券未消失,商户b卡券已领三张 resp_json = alipay_clent_step.get_coupons( alipay_person_access_token, uuid=self.merchatn_info['b']['db_instance'].payment_qr_code.uuid) self.assertEqual(len(resp_json), 3) # 用户向商户b付款30元,使用优惠券满30减20实际付款10元,支付成功后得到3张优惠券,然后商户b退款, 然后支付成功 # 给商户b支付30元给商户 money = 30 * 100 alipay_payment_step = AlipayPaymentSteps(alipay_person_access_token) place_order_resp_json = alipay_payment_step.place_order( self.merchatn_info['b']['merchant_id'], money, user_coupon_type_dict['buy_30_get_20_reduction'][0]) print(place_order_resp_json) # 支付宝支付成功回调 resp = alipay_payment_step.payment_callback( dynasettings.ALIPAY_APP_ID, alipay_person_userid, place_order_resp_json['out_trade_no'], 1) self.assertEqual(resp.content.decode(), '"OK"') # 获取优惠券 , 未报告位置,获取三张的优惠券 resp_json = SharedPaySteps(alipay_person['access_token']).poll_result( place_order_resp_json['out_trade_no'], None, None, None) payment_info = resp_json['payment'] self.assertEqual(payment_info['serial_number'], place_order_resp_json['out_trade_no']) self.assertEqual(payment_info['status'], config.PAYMENT_STATUS['FROZEN']) self.assertEqual(payment_info['order_price'], money) coupons = resp_json['coupons'] self.assertEqual(len(coupons), 3) # 支付成功,查看该用户在商户b的优惠券是否减少一张 resp_json = alipay_clent_step.get_coupons( alipay_person_access_token, uuid=self.merchatn_info['b']['db_instance'].payment_qr_code.uuid) temp = 0 for coupon in resp_json: if coupon['discount'] == 2000 and coupon['min_charge'] == 3000: temp = temp + 1 self.assertEqual(temp + 1, len(user_coupon_type_dict['buy_30_get_20_reduction'])) # self.assertEqual(resp_json, coupons) # 商户b退款 # 商户管理员登录token merchant_admin = MerchantAdmin.objects.filter( work_merchant_id=self.merchatn_info['b']['merchant_id'], merchant_admin_type=config.MERCHANT_ADMIN_TYPES.ADMIN).first() merchant_admin_token = self.mock_merchant_admin_or_cashier_login_success( WechatPerson(unionid=merchant_admin.wechat_unionid, subscription_openid=merchant_admin.wechat_openid)) transaction_step = TransactionStep(self) resp = transaction_step.alipay_refund(merchant_admin_token, payment_info['serial_number']) self.assertEqual(resp.json(), {}) # 退款成功,用户查看其优惠券未消失(退款退回一张优惠券) resp_json = alipay_clent_step.get_coupons( alipay_person_access_token, uuid=self.merchatn_info['b']['db_instance'].payment_qr_code.uuid) user_coupon_type_dict = dict(buy_20_get_10_reduction=[], buy_30_get_20_reduction=[]) self.assertEqual(len(resp_json), 3) for coupon in resp_json: self.assertEqual('商户b', coupon['rule']['merchant']['name']) self.assertEqual('商户a', coupon['originator_merchant']) if coupon['discount'] == 1000 and coupon['min_charge'] == 2000: user_coupon_type_dict['buy_20_get_10_reduction'].append( coupon['id']) elif coupon['discount'] == 2000 and coupon['min_charge'] == 3000: user_coupon_type_dict['buy_30_get_20_reduction'].append( coupon['id']) self.assertNotEqual( user_coupon_type_dict, dict(buy_20_get_10_reduction=[], buy_30_get_20_reduction=[])) # 用户再次支付30向商户b付款30元,使用优惠券满30减20实际付款10元,支付成功后得到3张优惠券, money = 30 * 100 alipay_payment_step = AlipayPaymentSteps(alipay_person_access_token) place_order_resp_json = alipay_payment_step.place_order( self.merchatn_info['b']['merchant_id'], money, user_coupon_type_dict['buy_30_get_20_reduction'][0]) # 支付宝支付成功回调 resp = alipay_payment_step.payment_callback( dynasettings.ALIPAY_APP_ID, alipay_person_userid, place_order_resp_json['out_trade_no'], 1) self.assertEqual(resp.content.decode(), '"OK"') # 获取优惠券 , 未报告位置,获取三张的优惠券 resp_json = SharedPaySteps(alipay_person['access_token']).poll_result( place_order_resp_json['out_trade_no'], None, None, None) payment_info = resp_json['payment'] self.assertEqual(payment_info['serial_number'], place_order_resp_json['out_trade_no']) self.assertEqual(payment_info['status'], config.PAYMENT_STATUS['FROZEN']) self.assertEqual(payment_info['order_price'], money) # 解冻账单成功 resp_json = SharedPaySteps(None).unfreeze_immediately() print(resp_json) self.assertEqual(resp_json, "OK") # 商户a查看引流收益 # 商户管理员登录token TODO 接口更新 # merchant_admin = MerchantAdmin.objects.get(pk=self.merchatn_info['a']['merchant_id']) # merchant_admin_token = self.mock_merchant_admin_or_cashier_login_success( # WechatPerson(unionid=merchant_admin.wechat_unionid, # subscription_openid=merchant_admin.wechat_openid # )) # merchant_step = MerchantStep(self, merchant_admin_token) # resp = merchant_step.statistics() # print(resp.json()) # 邀请人查看引流收益 inviter_get_userinfo_step = GetUserInfoStep() resp, _ = inviter_get_userinfo_step.go( token=self.inviter_info['b']['token']) resp_json = resp.json() self.assertEqual(resp_json['user_name'], '邀请人2') self.assertEqual(resp_json['using_invited_merchants_num'], 1) self.assertEqual(resp_json['total_bonus'], 10) # 管理后台查看数据 system_admin_login_step = LoginStep(self) finacial_query_step = FinancialQueryStep(self) system_admin_login_step.login(**self.system_admin_info) resp = finacial_query_step.get_overview_data() self.assertEqual( resp.json(), { 'merchant': 3, 'inviter': 3, 'client': 1, 'coupon': 9, 'coupon_used': 1, 'payment': { 'wechat': 0.0, 'alipay': 10.0, 'total': 10.0 } })
class PaymentBaseTestCases(TestCase): def __init__(self, methodName='runTest'): super().__init__(methodName) self.factory = PayunionFactory() def setUp(self): self.merchants = [] self.merchants.append( self.factory.create_merchant( location_lon=39.913811, location_lat=116.410189, name='王府井百货', status=config.MERCHANT_STATUS.USING, )) self.merchants.append( self.factory.create_merchant( location_lon=39.909631, location_lat=116.423407, name='好苑建国饭店', status=config.MERCHANT_STATUS.USING, )) self.merchants.append( self.factory.create_merchant( location_lon=39.908775, location_lat=116.409802, name='北京饭店', status=config.MERCHANT_STATUS.USING, )) self.merchants.append( self.factory.create_merchant( location_lon=39.906668, location_lat=116.426454, name='湖南大厦', status=config.MERCHANT_STATUS.USING, )) self.merchants.append( self.factory.create_merchant( location_lon=39.960701, location_lat=116.323457, name='天作国际', status=config.MERCHANT_STATUS.USING, )) self.merchants.append( self.factory.create_merchant( location_lon=39.970503, location_lat=116.321054, name='当代商城', status=config.MERCHANT_STATUS.USING, )) for m in self.merchants: self.factory.create_coupon_rule(merchant=m, stock=100) self.payment = self.factory.create_payment( status=config.PAYMENT_STATUS.FROZEN, coupon_granted=False) def test_grant_coupons(self): coupons = PaymentBaseUseCases.grant_coupons(self.payment, 39.913384, 116.414437, 10) assert len(coupons) == 3 valid_ids = {m.id for m in self.merchants[:4]} actual_ids = {c.rule.merchant.id for c in coupons} assert actual_ids < valid_ids def test_grant_coupons1(self): coupons = PaymentBaseUseCases.grant_coupons(self.payment, 39.962215, 116.32899310, 10) assert len(coupons) == 2 valid_ids = {m.id for m in self.merchants[4:]} actual_ids = {c.rule.merchant.id for c in coupons} assert actual_ids <= valid_ids
def setUpTestData(cls): cls.factory = PayunionFactory() cls.manager = AreaModelManager()
def __init__(self, methodName='runTest'): super().__init__(methodName) self.factory = PayunionFactory()