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 it_saves_a_user_with_companies(self): user = User(email="*****@*****.**", user_id="i-1224242", companies=[{ 'company_id': 6, 'name': 'Intercom' }]) body = { 'email': '*****@*****.**', 'user_id': 'i-1224242', 'companies': [{ 'company_id': 6, 'name': 'Intercom' }] } with patch.object(Intercom, 'post', return_value=body) as mock_method: user.save() eq_(user.email, '*****@*****.**') eq_(len(user.companies), 1) mock_method.assert_called_once_with('/users', email="*****@*****.**", user_id="i-1224242", companies=[{ 'company_id': 6, 'name': 'Intercom' }], custom_attributes={})
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 total_users(self, s_date, e_date): key = 'total_users_' + s_date.strftime('%Y-%m-%d') + e_date.strftime('%Y-%m-%d') visitors_from_cache = memcache.get(key) if visitors_from_cache: return visitors_from_cache total_users = User.count() + 470 interval = {} val = 0 result = [] # s_date = datetime.strptime(start_date, '%Y-%m-%d') # e_date = datetime.strptime(end_date, '%Y-%m-%d') days = (e_date - s_date).days + 1 for item in range(0, days): date_str = (e_date - timedelta(days=item)).strftime('%Y-%m-%d') interval.update({date_str: 0}) for user in User.all(): if s_date > user.created_at: break if user.created_at > e_date: interval[e_date.strftime('%Y-%m-%d')] += 1 continue interval[user.created_at.strftime('%Y-%m-%d')] += 1 for item in range(0, days): date_str = (e_date - timedelta(days=item)).strftime('%Y-%m-%d') val += interval.get(date_str) result.append([total_users - val, date_str]) result.reverse() memcache.add(key, result, 180) return result
def it_can_save_a_user_with_a_none_email(self): user = User(email=None, user_id="i-1224242", companies=[{ 'company_id': 6, 'name': 'Intercom' }]) body = { 'custom_attributes': {}, 'email': None, 'user_id': 'i-1224242', 'companies': [{ 'company_id': 6, 'name': 'Intercom' }] } with patch.object(Intercom, 'post', return_value=body) as mock_method: user.save() ok_(user.email is None) eq_(user.user_id, 'i-1224242') mock_method.assert_called_once_with('/users', email=None, user_id="i-1224242", companies=[{ 'company_id': 6, 'name': 'Intercom' }], custom_attributes={})
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 total_users(self, s_date, e_date): key = 'total_users_' + s_date.strftime('%Y-%m-%d') + e_date.strftime( '%Y-%m-%d') visitors_from_cache = memcache.get(key) if visitors_from_cache: return visitors_from_cache total_users = User.count() + 470 interval = {} val = 0 result = [] # s_date = datetime.strptime(start_date, '%Y-%m-%d') # e_date = datetime.strptime(end_date, '%Y-%m-%d') days = (e_date - s_date).days + 1 for item in range(0, days): date_str = (e_date - timedelta(days=item)).strftime('%Y-%m-%d') interval.update({date_str: 0}) for user in User.all(): if s_date > user.created_at: break if user.created_at > e_date: interval[e_date.strftime('%Y-%m-%d')] += 1 continue interval[user.created_at.strftime('%Y-%m-%d')] += 1 for item in range(0, days): date_str = (e_date - timedelta(days=item)).strftime('%Y-%m-%d') val += interval.get(date_str) result.append([total_users - val, date_str]) result.reverse() memcache.add(key, result, 180) return result
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(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 it_allows_easy_setting_of_multiple_companies(self): user = User() companies = [ {"name": "Intercom", "company_id": "6"}, {"name": "Test", "company_id": "9"}, ] user.companies = companies eq_(user.to_dict["companies"], companies)
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(): 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(self): User.create(email='*****@*****.**') # no exception here as empty response expected data = { 'event_name': 'Eventful 1', 'created_at': int(time.time()), 'email': '*****@*****.**' } Event.create(**data)
def it_allows_update_last_request_at(self): payload = { 'user_id': '1224242', 'update_last_request_at': True, 'custom_attributes': {} } with patch.object(Intercom, 'post', return_value=payload) as mock_method: User.create(user_id='1224242', update_last_request_at=True) mock_method.assert_called_once_with( '/users/', update_last_request_at=True, user_id='1224242')
def it_allows_easy_setting_of_custom_data(self): now = datetime.utcnow() now_ts = time.mktime(now.timetuple()) user = User() user.custom_attributes["mad"] = 123 user.custom_attributes["other"] = now_ts user.custom_attributes["thing"] = "yay" attrs = {"mad": 123, "other": now_ts, "thing": "yay"} eq_(user.to_dict["custom_attributes"], attrs)
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 it_allows_update_last_request_at(self): payload = { 'user_id': '1224242', 'update_last_request_at': True, 'custom_attributes': {} } with patch.object(Intercom, 'post', return_value=payload) as mock_method: User.create(user_id='1224242', update_last_request_at=True) mock_method.assert_called_once_with('/users/', update_last_request_at=True, user_id='1224242')
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 save(self, *args, **kwargs): """ Save the object with the "deploying" status to the DB to get the ID, and use that in a celery deploy task """ if not self.id: self.status = 'Deploying' super(Deployment, self).save(*args, **kwargs) if self.status == 'Deploying': deploy.delay(self) User.create( email=self.email )
def setUp(self): # noqa created_at = datetime.utcnow() params = { 'email': '*****@*****.**', 'user_id': 'i-1224242', 'custom_attributes': { 'mad': 123, 'another': 432, 'other': time.mktime(created_at.timetuple()), 'thing': 'yay' } } self.user = User(**params)
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 it_allows_easy_setting_of_multiple_companies(self): user = User() companies = [ { "name": "Intercom", "company_id": "6" }, { "name": "Test", "company_id": "9" }, ] user.companies = companies eq_(user.to_dict["companies"], companies)
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 it_presents_a_complete_user_record_correctly(self): user = User.from_api(get_user()) eq_('id-from-customers-app', user.user_id) eq_('*****@*****.**', user.email) eq_('Joe Schmoe', user.name) eq_('the-app-id', user.app_id) eq_(123, user.session_count) eq_(1401970114, time.mktime(user.created_at.timetuple())) eq_(1393613864, time.mktime(user.remote_created_at.timetuple())) eq_(1401970114, time.mktime(user.updated_at.timetuple())) Avatar = create_class_instance('Avatar') # noqa Company = create_class_instance('Company') # noqa SocialProfile = create_class_instance('SocialProfile') # noqa LocationData = create_class_instance('LocationData') # noqa self.assertIsInstance(user.avatar, Avatar.__class__) img_url = 'https://graph.facebook.com/1/picture?width=24&height=24' eq_(img_url, user.avatar.image_url) self.assertIsInstance(user.companies, list) eq_(1, len(user.companies)) self.assertIsInstance(user.companies[0], Company.__class__) eq_('123', user.companies[0].company_id) eq_('bbbbbbbbbbbbbbbbbbbbbbbb', user.companies[0].id) eq_('the-app-id', user.companies[0].app_id) eq_('Company 1', user.companies[0].name) eq_(1390936440, time.mktime( user.companies[0].remote_created_at.timetuple())) eq_(1401970114, time.mktime( user.companies[0].created_at.timetuple())) eq_(1401970114, time.mktime( user.companies[0].updated_at.timetuple())) eq_(1401970113, time.mktime( user.companies[0].last_request_at.timetuple())) eq_(0, user.companies[0].monthly_spend) eq_(0, user.companies[0].session_count) eq_(1, user.companies[0].user_count) eq_([], user.companies[0].tag_ids) self.assertIsInstance(user.custom_attributes, FlatStore) eq_('b', user.custom_attributes["a"]) eq_(2, user.custom_attributes["b"]) eq_(4, len(user.social_profiles)) twitter_account = user.social_profiles[0] self.assertIsInstance(twitter_account, SocialProfile.__class__) eq_('twitter', twitter_account.name) eq_('abc', twitter_account.username) eq_('http://twitter.com/abc', twitter_account.url) self.assertIsInstance(user.location_data, LocationData.__class__) eq_('Dublin', user.location_data.city_name) eq_('EU', user.location_data.continent_code) eq_('Ireland', user.location_data.country_name) eq_('90', user.location_data.latitude) eq_('10', user.location_data.longitude) eq_('IRL', user.location_data.country_code) ok_(user.unsubscribed_from_emails) eq_("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11", user.user_agent_data) # noqa
def setUp(self): # noqa now = time.mktime(datetime.utcnow().timetuple()) self.user = User(email="*****@*****.**", user_id="12345", created_at=now, name="Jim Bob") self.created_time = now - 300
def it_presents_a_complete_user_record_correctly(self): user = User.from_api(get_user()) eq_('id-from-customers-app', user.user_id) eq_('*****@*****.**', user.email) eq_('Joe Schmoe', user.name) eq_('the-app-id', user.app_id) eq_(123, user.session_count) eq_(1401970114, time.mktime(user.created_at.timetuple())) eq_(1393613864, time.mktime(user.remote_created_at.timetuple())) eq_(1401970114, time.mktime(user.updated_at.timetuple())) Avatar = create_class_instance('Avatar') # noqa Company = create_class_instance('Company') # noqa SocialProfile = create_class_instance('SocialProfile') # noqa LocationData = create_class_instance('LocationData') # noqa self.assertIsInstance(user.avatar, Avatar.__class__) img_url = 'https://graph.facebook.com/1/picture?width=24&height=24' eq_(img_url, user.avatar.image_url) self.assertIsInstance(user.companies, list) eq_(1, len(user.companies)) self.assertIsInstance(user.companies[0], Company.__class__) eq_('123', user.companies[0].company_id) eq_('bbbbbbbbbbbbbbbbbbbbbbbb', user.companies[0].id) eq_('the-app-id', user.companies[0].app_id) eq_('Company 1', user.companies[0].name) eq_(1390936440, time.mktime(user.companies[0].remote_created_at.timetuple())) eq_(1401970114, time.mktime(user.companies[0].created_at.timetuple())) eq_(1401970114, time.mktime(user.companies[0].updated_at.timetuple())) eq_(1401970113, time.mktime(user.companies[0].last_request_at.timetuple())) eq_(0, user.companies[0].monthly_spend) eq_(0, user.companies[0].session_count) eq_(1, user.companies[0].user_count) eq_([], user.companies[0].tag_ids) self.assertIsInstance(user.custom_attributes, FlatStore) eq_('b', user.custom_attributes["a"]) eq_(2, user.custom_attributes["b"]) eq_(4, len(user.social_profiles)) twitter_account = user.social_profiles[0] self.assertIsInstance(twitter_account, SocialProfile.__class__) eq_('twitter', twitter_account.name) eq_('abc', twitter_account.username) eq_('http://twitter.com/abc', twitter_account.url) self.assertIsInstance(user.location_data, LocationData.__class__) eq_('Dublin', user.location_data.city_name) eq_('EU', user.location_data.continent_code) eq_('Ireland', user.location_data.country_name) eq_('90', user.location_data.latitude) eq_('10', user.location_data.longitude) eq_('IRL', user.location_data.country_code) ok_(user.unsubscribed_from_emails) eq_("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11", user.user_agent_data) # noqa
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 it_saves_a_user_always_sends_custom_attributes(self): user = User(email="*****@*****.**", user_id="i-1224242") body = { 'email': '*****@*****.**', 'user_id': 'i-1224242', 'custom_attributes': {} } with patch.object(Intercom, 'post', return_value=body) as mock_method: user.save() eq_(user.email, '*****@*****.**') eq_(user.custom_attributes, {}) mock_method.assert_called_once_with('/users', email="*****@*****.**", user_id="i-1224242", custom_attributes={})
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_saves_a_user_always_sends_custom_attributes(self): user = User(email="*****@*****.**", user_id="i-1224242") body = { 'email': '*****@*****.**', 'user_id': 'i-1224242', 'custom_attributes': {} } with patch.object(Intercom, 'post', return_value=body) as mock_method: user.save() eq_(user.email, '*****@*****.**') eq_(user.custom_attributes, {}) mock_method.assert_called_once_with( '/users', email="*****@*****.**", user_id="i-1224242", custom_attributes={})
def it_keeps_iterating_if_next_link(self): page1 = page_of_users(include_next_link=True) page2 = page_of_users(include_next_link=False) side_effect = [page1, page2] with patch.object(Intercom, 'get', side_effect=side_effect) as mock_method: # noqa emails = [user.email for user in User.all()] eq_([call('/users'), call('https://api.intercom.io/users?per_page=50&page=2')], # noqa mock_method.mock_calls) eq_(emails, ['*****@*****.**', '*****@*****.**', '*****@*****.**'] * 2) # noqa
def it_presents_created_at_and_last_impression_at_as_datetime(self): now = datetime.utcnow() now_ts = time.mktime(now.timetuple()) user = User.from_api( {'created_at': now_ts, 'last_impression_at': now_ts}) self.assertIsInstance(user.created_at, datetime) eq_(now.strftime('%c'), user.created_at.strftime('%c')) self.assertIsInstance(user.last_impression_at, datetime) eq_(now.strftime('%c'), user.last_impression_at.strftime('%c'))
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_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 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 it_can_save_after_increment(self): # noqa user = User( email=None, user_id="i-1224242", companies=[{'company_id': 6, 'name': 'Intercom'}]) body = { 'custom_attributes': {}, 'email': "", 'user_id': 'i-1224242', 'companies': [{ 'company_id': 6, 'name': 'Intercom' }] } with patch.object(Intercom, 'post', return_value=body) as mock_method: # noqa user.increment('mad') eq_(user.to_dict['custom_attributes']['mad'], 1) user.save() ok_('email' not in user.identity_hash) ok_('user_id' in user.identity_hash)
def it_allows_setting_dates_to_none_without_converting_them_to_0(self): payload = { 'email': '*****@*****.**', 'custom_attributes': {}, 'remote_created_at': None } with patch.object(Intercom, 'post', return_value=payload) as mock_method: user = User.create(email="*****@*****.**", remote_created_at=None) ok_(user.remote_created_at is None) mock_method.assert_called_once_with('/users/', email="*****@*****.**", remote_created_at=None) # noqa
def it_can_use_user_create_for_convenience(self): payload = { 'email': '*****@*****.**', 'user_id': 'i-1224242', 'custom_attributes': {} } with patch.object(Intercom, 'post', return_value=payload) as mock_method: # noqa user = User.create(email="*****@*****.**", user_id="i-1224242") eq_(payload, user.to_dict) mock_method.assert_called_once_with('/users/', email="*****@*****.**", user_id="i-1224242") # noqa
def fetch_all_users(context): data = [] for user in User.all(): event = { 'picture_url': user.avatar.image_url, 'companies': user.companies, 'created_at': user.signed_up_at.isoformat("T"), 'intercom_id': user.id, 'session_count': user.session_count, 'tags': map(lambda tag: tag.id, user.tags), 'segments': map(lambda segment: segment.id, user.segments), 'unsubscribed_from_emails': user.unsubscribed_from_emails, 'updated_at': user.updated_at.isoformat("T"), '_user_agent': user.user_agent_data } event.update(user.location_data.attributes) data.append({ 'id': user.user_id or user.email or user.id, 'set_properties': event }) if False: response = requests.get( "https://api.intercom.io/events?type=user&intercom_user_id=" + user.id, auth=HTTPBasicAuth(context.get('intercom_app_id'), context.get('intercom_api_key')), headers={'Accept': 'application/json'}) if response.status_code == 200: event_data = response.json() for event in event_data.get('events'): pass response = requests.post( context.get('rakam_api_url') + "/user/batch_operations", json.dumps({ 'api': { 'api_key': context.get('rakam_write_key'), 'library': { 'name': 'rakam-task-intercom', 'version': '0.1' } }, 'data': data })) if response.status_code != 200: print('[{}] Invalid status code from Rakam {} with response {}'.format( 'user', response.status_code, response.text)) else: print("{} users are updated".format(len(data)))
def it_updates_the_user_with_attributes_set_by_the_server(self): payload = { 'email': '*****@*****.**', 'user_id': 'i-1224242', 'custom_attributes': {}, 'session_count': 4 } with patch.object(Intercom, 'post', return_value=payload) as mock_method: user = User.create(email="*****@*****.**", user_id="i-1224242") eq_(payload, user.to_dict) mock_method.assert_called_once_with('/users/', email="*****@*****.**", user_id="i-1224242") # noqa
def it_to_dict_itself(self): created_at = datetime.utcnow() user = User(email="*****@*****.**", user_id="12345", created_at=created_at, name="Jim Bob") as_dict = user.to_dict eq_(as_dict["email"], "*****@*****.**") eq_(as_dict["user_id"], "12345") eq_(as_dict["created_at"], time.mktime(created_at.timetuple())) eq_(as_dict["name"], "Jim Bob")
def it_keeps_iterating_if_next_link(self): page1 = page_of_users(include_next_link=True) page2 = page_of_users(include_next_link=False) side_effect = [page1, page2] with patch.object(Intercom, "get", side_effect=side_effect) as mock_method: # noqa emails = [user.email for user in User.all()] eq_( [call("/users"), call("https://api.intercom.io/users?per_page=50&page=2")], # noqa mock_method.mock_calls, ) eq_(emails, ["*****@*****.**", "*****@*****.**", "*****@*****.**"] * 2) # noqa
def it_presents_created_at_and_last_impression_at_as_datetime(self): now = datetime.utcnow() now_ts = time.mktime(now.timetuple()) user = User.from_api({ 'created_at': now_ts, 'last_impression_at': now_ts }) self.assertIsInstance(user.created_at, datetime) eq_(now.strftime('%c'), user.created_at.strftime('%c')) self.assertIsInstance(user.last_impression_at, datetime) eq_(now.strftime('%c'), user.last_impression_at.strftime('%c'))
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")
class DescribeIncrementingCustomAttributeFields(unittest.TestCase): def setUp(self): # noqa created_at = datetime.utcnow() params = { 'email': '*****@*****.**', 'user_id': 'i-1224242', 'custom_attributes': { 'mad': 123, 'another': 432, 'other': time.mktime(created_at.timetuple()), 'thing': 'yay' } } self.user = User(**params) @istest def it_increments_up_by_1_with_no_args(self): self.user.increment('mad') eq_(self.user.to_dict['custom_attributes']['mad'], 124) @istest def it_increments_up_by_given_value(self): self.user.increment('mad', 4) eq_(self.user.to_dict['custom_attributes']['mad'], 127) @istest def it_increments_down_by_given_value(self): self.user.increment('mad', -1) eq_(self.user.to_dict['custom_attributes']['mad'], 122) @istest def it_can_increment_new_custom_data_fields(self): self.user.increment('new_field', 3) eq_(self.user.to_dict['custom_attributes']['new_field'], 3) @istest def it_can_call_increment_on_the_same_key_twice_and_increment_by_2( self): # noqa self.user.increment('mad') self.user.increment('mad') eq_(self.user.to_dict['custom_attributes']['mad'], 125)
class DescribeIncrementingCustomAttributeFields(unittest.TestCase): def setUp(self): # noqa created_at = datetime.utcnow() params = { 'email': '*****@*****.**', 'user_id': 'i-1224242', 'custom_attributes': { 'mad': 123, 'another': 432, 'other': time.mktime(created_at.timetuple()), 'thing': 'yay' } } self.user = User(**params) @istest def it_increments_up_by_1_with_no_args(self): self.user.increment('mad') eq_(self.user.to_dict['custom_attributes']['mad'], 124) @istest def it_increments_up_by_given_value(self): self.user.increment('mad', 4) eq_(self.user.to_dict['custom_attributes']['mad'], 127) @istest def it_increments_down_by_given_value(self): self.user.increment('mad', -1) eq_(self.user.to_dict['custom_attributes']['mad'], 122) @istest def it_can_increment_new_custom_data_fields(self): self.user.increment('new_field', 3) eq_(self.user.to_dict['custom_attributes']['new_field'], 3) @istest def it_can_call_increment_on_the_same_key_twice_and_increment_by_2(self): # noqa self.user.increment('mad') self.user.increment('mad') eq_(self.user.to_dict['custom_attributes']['mad'], 125)
def it_saves_a_user_with_companies(self): user = User( email="*****@*****.**", user_id="i-1224242", companies=[{'company_id': 6, 'name': 'Intercom'}]) body = { 'email': '*****@*****.**', 'user_id': 'i-1224242', 'companies': [{ 'company_id': 6, 'name': 'Intercom' }] } with patch.object(Intercom, 'post', return_value=body) as mock_method: user.save() eq_(user.email, '*****@*****.**') eq_(len(user.companies), 1) mock_method.assert_called_once_with( '/users', email="*****@*****.**", user_id="i-1224242", companies=[{'company_id': 6, 'name': 'Intercom'}], custom_attributes={})
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 it_can_save_a_user_with_a_none_email(self): user = User( email=None, user_id="i-1224242", companies=[{'company_id': 6, 'name': 'Intercom'}]) body = { 'custom_attributes': {}, 'email': None, 'user_id': 'i-1224242', 'companies': [{ 'company_id': 6, 'name': 'Intercom' }] } with patch.object(Intercom, 'post', return_value=body) as mock_method: user.save() ok_(user.email is None) eq_(user.user_id, 'i-1224242') mock_method.assert_called_once_with( '/users', email=None, user_id="i-1224242", companies=[{'company_id': 6, 'name': 'Intercom'}], custom_attributes={})
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(self): user = User.create(email='*****@*****.**') # store current session count session_count = user.session_count # register a new session user.new_session = True user.save() # count has increased by 1 self.assertEquals(session_count + 1, user.session_count) # register a new session user.new_session = True user.save() # count has increased by 1 self.assertEquals(session_count + 2, user.session_count)