def test_not_found_qs(): httpretty.register_uri(get, r(r"/v1/users\?email=not-found"), body=fixture('v1-user_not_found'), status=404, match_querystring=True) User.find(email='*****@*****.**')
def test_bad_api_key(): httpretty.register_uri( get, r(r"/v1/users\?email=authentication-error"), status=401, match_querystring=True) Intercom.app_id = 'bad-app-id' Intercom.api_key = 'bad-secret-key' User.find(email='*****@*****.**')
def test_server_error_qs(): httpretty.register_uri(get, r(r"/v1/users\?email=server-error"), body=fixture('v1-user_server_error'), status=500, match_querystring=True) User.find(email='*****@*****.**')
def test_custom_attributes(self): # Update custom_attributes for a user user = User.find(id=self.user.id) user.custom_attributes["average_monthly_spend"] = 1234.56 user.save() user = User.find(id=self.user.id) self.assertEqual( user.custom_attributes["average_monthly_spend"], 1234.56)
def test_bad_api_key(self): try: Intercom.app_id = 'bad-app-id' Intercom.api_key = 'bad-secret-key' User.find(email='*****@*****.**') finally: Intercom.app_id = 'dummy-app-id' Intercom.api_key = 'dummy-secret-key'
def test_bad_api_key(): httpretty.register_uri(get, r(r"/v1/users\?email=authentication-error"), status=401, match_querystring=True) Intercom.app_id = 'bad-app-id' Intercom.api_key = 'bad-secret-key' User.find(email='*****@*****.**')
def test_bad_api_key(self): try: Intercom.app_id = "bad-app-id" Intercom.api_key = "bad-secret-key" User.find(email="*****@*****.**") finally: Intercom.app_id = "dummy-app-id" Intercom.api_key = "dummy-secret-key"
def test_custom_attributes(self): # Update custom_attributes for a user user = User.find(id=self.user.id) user.custom_attributes["average_monthly_spend"] = 1234.56 user.save() user = User.find(id=self.user.id) self.assertEqual(user.custom_attributes["average_monthly_spend"], 1234.56)
def test_add_user(self): user = User.find(email=self.user.email) user.companies = [ {"company_id": 6, "name": "Intercom"}, {"company_id": 9, "name": "Test Company"} ] user.save() user = User.find(email=self.user.email) self.assertEqual(len(user.companies), 2) self.assertEqual(user.companies[0].company_id, "9")
def test_endpoints(): # FakeWeb.allow_net_connect = %r(127.0.0.7) httpretty.register_uri( get, r(r"/v1/users\?email="), body=fixture('v1-user'), match_querystring=True) Intercom.endpoints = ("http://127.0.0.7", "https://api.intercom.io") user = User.find(email='*****@*****.**') eq_(user.name, 'Somebody')
def it_fetches_a_user(self): with patch.object(Intercom, 'get', return_value=get_user()) as mock_method: # noqa user = User.find(email='*****@*****.**') eq_(user.email, '*****@*****.**') eq_(user.name, 'Joe Schmoe') mock_method.assert_called_once_with( '/users', email='*****@*****.**') # noqa
def test_endpoints(): # FakeWeb.allow_net_connect = %r(127.0.0.7) httpretty.register_uri(get, r(r"/v1/users\?email="), body=fixture('v1-user'), match_querystring=True) Intercom.endpoints = ("http://127.0.0.7", "https://api.intercom.io") user = User.find(email='*****@*****.**') eq_(user.name, 'Somebody')
def add_tag(customer_id, tag): customer = Customer.objects.select_related('user').get(id=customer_id) user = IntercomUser.find(email=customer.user.email) try: IntercomTag.tag_users(tag, [user.id]) except ResourceNotFound as e: IntercomTag.create(name=tag) IntercomTag.tag_users(tag, [user.id]) logger.error('add_tag [ResourceNotFound]: %s' % e)
def test_increment(self): # Perform incrementing user = User.find(id=self.user.id) karma = user.custom_attributes.get('karma', 0) user.increment('karma') user.save() self.assertEqual(user.custom_attributes["karma"], karma + 1) user.increment('karma') user.save() self.assertEqual(user.custom_attributes["karma"], karma + 2)
def test_add_user_custom_attributes(self): user = User.find(email=self.user.email) user.companies = [ { "id": 6, "name": "Intercom", "custom_attributes": { "referral_source": "Google" } } ] user.save() user = User.find(email=self.user.email) self.assertEqual(len(user.companies), 2) self.assertEqual(user.companies[0].company_id, "9") # check the custom attributes company = Company.find(company_id=6) self.assertEqual( company.custom_attributes['referral_source'], "Google")
def get_or_create_user(timestamp): # get user email = '*****@*****.**' % (timestamp) try: user = User.find(email=email) except ResourceNotFound: # Create a user user = User.create(email=email, user_id=timestamp, name="Ada %s" % (timestamp)) time.sleep(5) return user
def test_user(): httpretty.register_uri( get, r(r"/v1/users\?email="), body=fixture('v1-user'), match_querystring=True) user = User.find(email='*****@*****.**') eq_(user.name, 'Somebody') httpretty.register_uri( get, r(r"/v1/users\?user_id="), body=fixture('v1-user'), match_querystring=True) user = User.find_by_user_id('123') eq_(user.name, 'Somebody')
def get_or_create_user(timestamp): # get user email = '*****@*****.**' % (timestamp) try: user = User.find(email=email) except ResourceNotFound: # Create a user user = User.create( email=email, user_id=timestamp, name="Ada %s" % (timestamp)) time.sleep(5) return user
def sync_tags(): customers = Customer.objects.select_related('user').all() for customer in customers: tags = customer.get_tags() if tags: user = IntercomUser.find(email=customer.user.email) for tag in tags: try: IntercomTag.tag_users(tag, [user.id]) except ResourceNotFound as e: IntercomTag.create(tag) IntercomTag.tag_users(tag, [user.id]) logger.error('sync_tags [ResourceNotFound]: %s' % e)
def add_event(customer_id, event, data=None, order_id=None): customer = Customer.objects.select_related('user').get(id=customer_id) if data is None: data = {} if order_id: data.update(_get_order_data(order_id=order_id)) IntercomLocal.objects.create(customer=customer, event=event, data=data) try: IntercomUser.find(email=customer.user.email) except ResourceNotFound as e: create_intercom_profile(email=customer.user.email) logger.error('add_event [ResourceNotFound]: %s' % e) IntercomEvent.create( event_name=event, email=customer.user.email, created_at=int(time.time()), # UTC metadata=data)
def test_user(): httpretty.register_uri(get, r(r"/v1/users\?email="), body=fixture('v1-user'), match_querystring=True) user = User.find(email='*****@*****.**') eq_(user.name, 'Somebody') httpretty.register_uri(get, r(r"/v1/users\?user_id="), body=fixture('v1-user'), match_querystring=True) user = User.find_by_user_id('123') eq_(user.name, 'Somebody')
def update_intercom_profile(customer_id, data=None): customer = Customer.objects.select_related('user').get(id=customer_id) try: user = IntercomUser.find(email=customer.user.email) except ResourceNotFound: user = create_intercom_profile(email=customer.user.email) if data: # Partial update user.custom_attributes.update(data) else: # Full update user.name = customer.get_full_name() user.signed_up_at = customer.get_signed_up() user.custom_attributes.update({ 'last_login_at': customer.get_last_login(), 'last_order_at': customer.get_last_order_date(), 'paused': customer.subscription_is_paused(), 'unsubscribed': customer.subscription_is_canceled(), 'have_active_order': customer.has_active_order(), 'address': customer.get_full_address(), 'postcode': customer.postcode, 'phone': customer.phone, 'vouchers': customer.get_all_voucher_names(), 'amount': round(customer.amount, 2), 'total_spend': customer.get_total_spend(), 'shipped_orders': customer.get_count_orders(), 'facebook_id': customer.get_facebook_id(), 'stripe_id': customer.stripe_id, 'preferred_brew_method': customer.get_preferred_brew_method(), 'has_bought_christmas_gift': customer.has_bought_christmas_gift(), }) user.save()
def it_handles_accented_characters(self): # create a user dict with a name that contains accented characters payload = get_user(name='Jóe Schmö') # create bytes content content = json.dumps(payload).encode('utf-8') # create mock response resp = mock_response(content) with patch('requests.request') as mock_method: mock_method.return_value = resp user = User.find(email='*****@*****.**') try: # Python 2 eq_(unicode('Jóe Schmö', 'utf-8'), user.name) except NameError: # Python 3 eq_('Jóe Schmö', user.name)
def test_untag_users(self): # Untag users tag = Tag.untag_users("blue", [self.user.id]) self.assertEqual(tag.name, "blue") user = User.find(email=self.user.email) self.assertEqual(0, len(user.tags))
def test_find_by_email(self): # Find user by email user = User.find(email=self.email) self.assertEqual(self.email, user.email)
def test_not_found(self): User.find(email='*****@*****.**')
def test_server_error(self): User.find(email='*****@*****.**')
def it_fetches_a_user(self): with patch.object(Intercom, 'get', return_value=get_user()) as mock_method: # noqa user = User.find(email='*****@*****.**') eq_(user.email, '*****@*****.**') eq_(user.name, 'Joe Schmoe') mock_method.assert_called_once_with('/users', email='*****@*****.**') # noqa
def test_user(self): user = User.find(email="*****@*****.**") self.assertEqual("Somebody", user.name)
def test_server_error(self): User.find(email="*****@*****.**")
def test_bad_gateway(): httpretty.register_uri( get, r(r"/v1/users\?email="), status=502, match_querystring=True) User.find(email='*****@*****.**')
def test_unreachable(): httpretty.register_uri( get, r(r"/v1/users\?email="), status=503, match_querystring=True) User.find(email='*****@*****.**')
def test_unreachable(): httpretty.register_uri(get, r(r"/v1/users\?email="), status=503, match_querystring=True) User.find(email='*****@*****.**')
def test_bad_gateway(): httpretty.register_uri(get, r(r"/v1/users\?email="), status=502, match_querystring=True) User.find(email='*****@*****.**')
def test_user(self): user = User.find(email='*****@*****.**') self.assertEqual('Somebody', user.name)
def test_not_found(self): User.find(email="*****@*****.**")
def test_server_error_qs(): httpretty.register_uri( get, r(r"/v1/users\?email=server-error"), body=fixture('v1-user_server_error'), status=500, match_querystring=True) User.find(email='*****@*****.**')
def export_users_batch(argv=sys.argv): if len(argv) < 2: usage(argv) config_uri = argv[1] options = parse_vars(argv[2:]) setup_logging(config_uri) settings = get_appsettings(config_uri, options=options) engine = engine_from_config(settings, 'sqlalchemy.') DBSession.configure(bind=engine) create_attrs = {'name': 'nicename', 'email': 'email', 'contact_email': 'linkedin_email', 'phone': 'phone', #'user_hash': 'get_hmac', 'created_at': 'create_timestamp', 'poc': 'point_of_contact', 'primary_type': 'primary_type', 'total_sent_messages': 'sent', "total_connected_messages": 'connected', "conversion_messages": 'ratio', "Connect_Me-Accepted": 'connect_me_accept', "Connect_Me-Sent": 'connect_me_sent', "Connect_Me-Conv_Rate": 'connect_me_conv', "Request_Meeting-Accepted": 'request_meeting_accept', "Request_Meeting-Sent": 'request_meeting_sent', "Request_Meeting-Conv_Rate": 'request_meeting_conv', "Customer-To-Founder-Accepted": 'company_accept', "Customer-To-Founder-Sent": 'company_sent', "Customer-To-Founder-Conv_Rate": 'company_conv' } not_custom_attrs = ['name', 'email', 'created_at'] with transaction.manager: Intercom.app_id = Settings.get('intercom_id') Intercom.app_api_key = Settings.get('intercom_api_key') users = DBSession.query(User).filter(User.activated == True, User.login_enabled == True).all() print 'Rate limits', Intercom.rate_limit_details print 'Have %s users able to login, starting to update their info in intercom!' % len(users) for user in users: print 'processing user %s' % user.email try: intercom_user = IntercomUser.find(email=user.email) except: print 'created new user for intercom' intercom_user = IntercomUser.create(email=user.email) stats = user.get_connect_stats() changed = False for intercomattr, userattr in create_attrs.iteritems(): val = stats.get(userattr, getattr(user, userattr, None)) if hasattr(val, '__call__'): val = val() if val is None: continue changed = True if intercomattr in not_custom_attrs: setattr(intercom_user, intercomattr, val) else: intercom_user.custom_attributes[intercomattr] = val if user.company: intercom_user.companies = [{'id': user.company.id, 'name': user.company.name}] intercom_user.custom_attributes['class_number'] = user.company.alchemistclass \ if user.company else 'No class' if changed: print 'sending %s info' % user.email intercom_user.save() if Intercom.rate_limit_details.get('remaining', 0) <= 10: break
def test_find_by_id(self): # Find user by id user = User.find(id=self.user.id) self.assertEqual(self.email, user.email)
def test_untag_users(self): # Untag users tag = Tag.untag_users('blue', [self.user.id]) self.assertEqual(tag.name, 'blue') user = User.find(email=self.user.email) self.assertEqual(0, len(user.tags))
def test_not_found_qs(): httpretty.register_uri( get, r(r"/v1/users\?email=not-found"), body=fixture('v1-user_not_found'), status=404, match_querystring=True) User.find(email='*****@*****.**')