def user_subscribe(): """ " 3 use cases: " Popup subscribe email will appear after user plays on match_id. " Popup subscribe email will appear at the first time. " Popup subscribe email will apear when user click on referral link. """ try: data = request.json if data is None: return response_error(MESSAGE.INVALID_DATA, CODE.INVALID_DATA) if 'email' not in data or is_valid_email(data["email"]) is False: return response_error(MESSAGE.USER_INVALID_EMAIL, CODE.USER_INVALID_EMAIL) if user_bl.is_email_subscribed(data['email']): return response_error(MESSAGE.EMAIL_ALREADY_SUBSCRIBED, CODE.EMAIL_ALREADY_SUBSCRIBED) match = Match.find_match_by_id(data.get('match_id', -1)) email = data["email"] uid = int(request.headers["Uid"]) referral_code = data.get('referral_code', None) user = User.find_user_with_id(uid) user.email = email user.is_user_disable_popup = 0 user.is_subscribe = 1 if referral_code is not None: r = Referral.find_referral_by_code(referral_code) if r is not None and r.user_id != uid: user.invited_by_user = r.user_id db.session.flush() # issue referral code for user if any referral_bl.issue_referral_code_for_user(user) db.session.commit() # send email result, code_1, code_2 = user_bl.claim_redeem_code_for_user(user) if result: subscribe_email_to_claim_redeem_code.delay( email, code_1, code_2, request.headers["Fcm-Token"], request.headers["Payload"], uid) elif match is not None: subscribe_email.delay(email, match.id, request.headers["Fcm-Token"], request.headers["Payload"], uid) return response_ok(user.to_json()) except Exception, ex: db.session.rollback() return response_error(ex.message)
def test_user_subscribe_email_with_referral_code(self): self.clear_data_before_test() # claim referral code to uid 88 code = '1ABC' r = Referral.find_referral_by_code(code) if r is None: r = Referral( code=code, user_id=88 ) db.session.add(r) else: r.user_id = 88 db.session.commit() with self.client: Uid = 66 params = { "email": "*****@*****.**", "referral_code": code } response = self.client.post( '/subscribe', data=json.dumps(params), content_type='application/json', headers={ "Uid": "{}".format(Uid), "Fcm-Token": "{}".format(123), "Payload": "{}".format(123), }) data = json.loads(response.data.decode()) self.assertTrue(data['status'] == 1) user = User.find_user_with_id(66) self.assertEqual(user.invited_by_user, 88)
def test_check_user_join_referral_program(self): self.clear_data_before_test() code = 'A123' with self.client: Uid = 88 response = self.client.get('/referral/check', headers={ "Uid": "{}".format(Uid), "Fcm-Token": "{}".format(123), "Payload": "{}".format(123), }) data = json.loads(response.data.decode()) self.assertTrue(data['status'] == 0) # generate referral code for user id 88 r = Referral.find_referral_by_code(code) if r is not None: r.user_id = 88 else: r = Referral(code=code, user_id=88) db.session.add(r) db.session.commit() # call again response = self.client.get('/referral/check', headers={ "Uid": "{}".format(Uid), "Fcm-Token": "{}".format(123), "Payload": "{}".format(123), }) data = json.loads(response.data.decode()) self.assertTrue(data['status'] == 1) self.assertEqual(data['data']['code'], code)