def test_properties(self): user = User() user.email = '*****@*****.**' user.user_id = 1234 user.name = 'Joe' user.last_seen_ip = '192.168.1.100' user.last_seen_user_agent = 'Mozilla/5.0' user.created_at = datetime.fromtimestamp(1331764344) user.custom_data = { 'name': 'Ace' } user.companies = [{ 'id':1, 'name':'Intercom'}] with self.assertRaises(AttributeError): # cannot set the relationship score user.relationship_score = 50 self.assertEqual('*****@*****.**', user.email) self.assertEqual(1234, user.user_id) self.assertEqual('Joe', user.name) self.assertEqual('192.168.1.100', user.last_seen_ip) self.assertEqual('Mozilla/5.0', user.last_seen_user_agent) with self.assertRaises(AttributeError): # cannot read the companies user.companies self.assertEqual(None, user.relationship_score) self.assertEqual(1331764344, time.mktime(user.created_at.timetuple())) self.assertEqual('Ace', user.custom_data['name'])
def test_save_user(self): user = User(email='*****@*****.**', custom_data={'age': '42'}) user.save() self.assertEqual(None, user.user_id) self.assertEqual('*****@*****.**', user.email) self.assertEqual('42', user.custom_data['age']) self.assertEqual(1, user.session_count)
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_companies(): user = User() user.companies = [{ 'id': 1, 'name': 'Intercom', 'created_at': datetime.fromtimestamp(1331764344)}] raises(AttributeError, lambda: user.companies) user.companies = {'foo': 'bar'}
def test_user_companies(): user = User() user.companies = [{ 'id': 1, 'name': 'Intercom', 'created_at': datetime.fromtimestamp(1331764344) }] raises(AttributeError, lambda: user.companies) user.companies = {'foo': 'bar'}
def it_allows_easy_setting_of_custom_data(self): now = datetime.utcnow() now_ts = calendar.timegm(now.utctimetuple()) 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 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"], calendar.timegm(created_at.utctimetuple())) eq_(as_dict["name"], "Jim Bob")
def test_companies(self): user = User() user.companies = [{ 'id': 1, 'name':' Intercom', 'created_at': datetime.fromtimestamp(1331764344)}] self.assertRaises(AttributeError, lambda: user.companies) try: user.companies = {'foo':'bar'} self.fail() except ValueError: pass
def setUp(self): # noqa self.client = Client() 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 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, calendar.timegm(user.created_at.utctimetuple())) eq_(1393613864, calendar.timegm(user.remote_created_at.utctimetuple())) eq_(1401970114, calendar.timegm(user.updated_at.utctimetuple())) Avatar = define_lightweight_class('avatar', 'Avatar') # noqa Company = define_lightweight_class('company', 'Company') # noqa SocialProfile = define_lightweight_class('social_profile', 'SocialProfile') # noqa LocationData = define_lightweight_class('locaion_data', 'LocationData') # noqa self.assertIsInstance(user.avatar.__class__, 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].__class__, 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, calendar.timegm( user.companies[0].remote_created_at.utctimetuple())) eq_(1401970114, calendar.timegm( user.companies[0].created_at.utctimetuple())) eq_(1401970114, calendar.timegm( user.companies[0].updated_at.utctimetuple())) eq_(1401970113, calendar.timegm( user.companies[0].last_request_at.utctimetuple())) 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.__class__, 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.__class__, 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_gets_sets_rw_keys(self): created_at = datetime.utcnow() payload = { 'email': '*****@*****.**', 'user_id': 'abc123', 'name': 'Bob Smith', 'last_seen_ip': '1.2.3.4', 'last_seen_user_agent': 'ie6', 'created_at': calendar.timegm(created_at.utctimetuple()) } user = User(**payload) expected_keys = ['custom_attributes'] expected_keys.extend(list(payload.keys())) eq_(sorted(expected_keys), sorted(user.to_dict().keys())) for key in list(payload.keys()): eq_(payload[key], user.to_dict()[key])
def it_saves_a_user_with_companies(self): body = { 'email': '*****@*****.**', 'user_id': 'i-1224242', 'companies': [{ 'company_id': 6, 'name': 'Intercom' }] } with patch.object(Client, 'post', return_value=body) as mock_method: user = User(email="*****@*****.**", user_id="i-1224242", companies=[{ 'company_id': 6, 'name': 'Intercom' }]) self.client.users.save(user) 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_find_by_email(self): user = User.find_by_email('*****@*****.**') self.assertEqual(None, user.user_id) self.assertEqual('*****@*****.**', user.email) self.assertEqual('Joe', user.name) self.assertEqual('192.168.1.100', user.last_seen_ip) self.assertEqual('Mozilla/5.0', user.last_seen_user_agent) self.assertEqual(50, user.relationship_score) self.assertTrue(isinstance(user.last_impression_at, datetime)) self.assertEqual(1331834352, time.mktime(user.last_impression_at.timetuple())) self.assertTrue(isinstance(user.created_at, datetime)) self.assertEqual(1331764344, time.mktime(user.created_at.timetuple())) self.assertTrue(1, len(user.social_profiles)) profile = user.social_profiles[0] self.assertTrue(isinstance(profile, SocialProfile)) self.assertEqual('twitter', profile.type) self.assertEqual('foo', profile.username) self.assertEqual('http://twitter.com/foo', profile.url) self.assertEqual('1234567', profile.id) self.assertEqual('Santiago', user.location_data['city_name']) self.assertEqual('Santiago', user.location_data.city_name) self.assertTrue(isinstance(user.location_data, LocationData)) self.assertEqual('johnny', user.custom_data['nick'])
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(Client, 'post', return_value=body) as mock_method: self.client.users.save(user) 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_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(Client, 'post', return_value=body) as mock_method: # noqa user.increment('mad') eq_(user.to_dict()['custom_attributes']['mad'], 1) self.client.users.save(user)
def test_user_company(): user = User() # use a Company object user.company = Company({ 'id': 1, 'name': 'Intercom', 'created_at': datetime.fromtimestamp(1331764344) }) # use a dict object user.company = { 'id': 1, 'name': 'Intercom', 'created_at': datetime.fromtimestamp(1331764344) } raises(AttributeError, lambda: user.company) user.company = ['foo']
def setUp(self): # noqa self.client = Client() 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 test_find_all_id(self): from intercom.user import User user = User.find(email=self.email) # Iterate over all notes for a user via their email address for note in Note.find_all(user_id=user.user_id): self.assertTrue(note.id is not None) user = note.user.load() self.assertEqual(user.email, self.email)
def it_presents_created_at_and_last_impression_at_as_datetime(self): now = datetime.utcnow() now_ts = calendar.timegm(now.utctimetuple()) 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 it_can_convert(self): # noqa lead = Lead.from_api({'user_id': 'contact_id'}) user = User.from_api({'id': 'user_id'}) with patch.object(Client, 'post', returns=get_user()) as mock_method: # noqa self.client.leads.convert(lead, user) mock_method.assert_called_once_with( '/contacts/convert', { 'contact': {'user_id': lead.user_id}, 'user': {'id': user.id} })
def test_properties(self): user = User() user.email = '*****@*****.**' user.user_id = 1234 user.name = 'Joe' user.last_seen_ip = '192.168.1.100' user.last_seen_user_agent = 'Mozilla/5.0' user.created_at = datetime.fromtimestamp(1331764344) user.custom_data = {'name': 'Ace'} try: # cannot set the relationship score user.relationship_score = 50 except AttributeError: pass self.assertEqual('*****@*****.**', user.email) self.assertEqual(1234, user.user_id) self.assertEqual('Joe', user.name) self.assertEqual('192.168.1.100', user.last_seen_ip) self.assertEqual('Mozilla/5.0', user.last_seen_user_agent) self.assertEqual(None, user.relationship_score) self.assertEqual(1331764344, time.mktime(user.created_at.timetuple())) self.assertEqual('Ace', user.custom_data['name'])
def it_can_convert(self): # noqa lead = Lead.from_api({'user_id': 'contact_id'}) user = User.from_api({'id': 'user_id'}) with patch.object(Client, 'post', returns=get_user()) as mock_method: # noqa self.client.leads.convert(lead, user) mock_method.assert_called_once_with('/contacts/convert', { 'contact': { 'user_id': lead.user_id }, 'user': { 'id': user.id } })
def it_rejects_nested_data_structures_in_custom_attributes(self): user = User() with assert_raises(ValueError): user.custom_attributes["thing"] = [1] with assert_raises(ValueError): user.custom_attributes["thing"] = {1: 2} with assert_raises(ValueError): user.custom_attributes = {1: {2: 3}} user = User.from_api(get_user()) with assert_raises(ValueError): user.custom_attributes["thing"] = [1]
def it_saves_a_user_always_sends_custom_attributes(self): body = { 'email': '*****@*****.**', 'user_id': 'i-1224242', 'custom_attributes': {} } with patch.object(Client, 'post', return_value=body) as mock_method: user = User(email="*****@*****.**", user_id="i-1224242") self.client.users.save(user) eq_(user.email, '*****@*****.**') eq_(user.custom_attributes, {}) mock_method.assert_called_once_with( '/users', {'email': "*****@*****.**", 'user_id': "i-1224242", 'custom_attributes': {}})
def test_delete(self): user = User.delete(email='*****@*****.**') self.assertEqual(u'7902', user.user_id) self.assertEqual('*****@*****.**', user.email)
def test_create(self): user = User.create(email='*****@*****.**') self.assertEqual(None, user.user_id) self.assertEqual('*****@*****.**', user.email)
def it_will_allow_extra_attributes_in_response_from_api(self): user = User.from_api({'new_param': 'some value'}) eq_('some value', user.new_param)
class DescribeIncrementingCustomAttributeFields(unittest.TestCase): def setUp(self): # noqa self.client = Client() created_at = datetime.utcnow() params = { 'email': '*****@*****.**', 'user_id': 'i-1224242', 'custom_attributes': { 'mad': 123, 'another': 432, 'other': time.mktime(created_at.timetuple()), 'thing': 'yay', 'logins': None, } } 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_increment_none_values(self): self.user.increment('logins') eq_(self.user.to_dict()['custom_attributes']['logins'], 1) @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) @istest 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(Client, 'post', return_value=body) as mock_method: # noqa user.increment('mad') eq_(user.to_dict()['custom_attributes']['mad'], 1) self.client.users.save(user)
def test_user_properties(): created_at = datetime.fromtimestamp(1331764344) last_request_at = datetime.fromtimestamp(1331764345) last_impression_at = datetime.fromtimestamp(1331764346) user = User() user.email = '*****@*****.**' user.user_id = 1234 user.name = 'Somebody' user.last_seen_ip = '192.168.1.100' user.last_seen_user_agent = 'Mozilla/5.0' user.last_request_at = last_request_at user.last_impression_at = last_impression_at user.created_at = created_at user.unsubscribed_from_emails = True user.custom_data = {'name': 'Ace'} user.companies = [{'id': 1, 'name': 'Intercom', 'created_at': created_at}] try: # cannot set the relationship score user.relationship_score = 50 raise AttributeError except AttributeError: pass eq_(user.email, '*****@*****.**') eq_(user.user_id, 1234) eq_(user.name, 'Somebody') eq_(user.last_seen_ip, '192.168.1.100') eq_(user.last_seen_user_agent, 'Mozilla/5.0') eq_(user.last_request_at, last_request_at) eq_(user.last_impression_at, last_impression_at) eq_(user.relationship_score, None) eq_(user.created_at, created_at) eq_(user.unsubscribed_from_emails, True) eq_(user.custom_data['name'], 'Ace') eq_(user.session_count, 0) raises(AttributeError, lambda: user.companies)
def test_find_identifiers(self): User.find()
def test_user_properties(): created_at = datetime.fromtimestamp(1331764344) last_request_at = datetime.fromtimestamp(1331764345) last_impression_at = datetime.fromtimestamp(1331764346) user = User() user.email = '*****@*****.**' user.user_id = 1234 user.name = 'Somebody' user.last_seen_ip = '192.168.1.100' user.last_seen_user_agent = 'Mozilla/5.0' user.last_request_at = last_request_at user.last_impression_at = last_impression_at user.created_at = created_at user.unsubscribed_from_emails = True user.custom_data = {'name': 'Ace'} user.companies = [{ 'id': 1, 'name': 'Intercom', 'created_at': created_at}] try: # cannot set the relationship score user.relationship_score = 50 raise AttributeError except AttributeError: pass eq_(user.email, '*****@*****.**') eq_(user.user_id, 1234) eq_(user.name, 'Somebody') eq_(user.last_seen_ip, '192.168.1.100') eq_(user.last_seen_user_agent, 'Mozilla/5.0') eq_(user.last_request_at, last_request_at) eq_(user.last_impression_at, last_impression_at) eq_(user.relationship_score, None) eq_(user.created_at, created_at) eq_(user.unsubscribed_from_emails, True) eq_(user.custom_data['name'], 'Ace') eq_(user.session_count, 0) raises(AttributeError, lambda: user.companies)
def test_get_users_valid(self): users = User.all() self.assertEqual(3, len(users)) self.assertEqual('*****@*****.**', users[0].email) self.assertEqual('*****@*****.**', users[1].email) self.assertEqual('*****@*****.**', users[2].email)
def test_find_by_user_id(self): user = User.find_by_user_id(1234) self.assertEqual(1234, user.user_id)
def test_find(self): user = User.find(email='*****@*****.**') self.assertEqual(None, user.user_id) self.assertEqual('*****@*****.**', user.email)
class DescribeIncrementingCustomAttributeFields(unittest.TestCase): def setUp(self): # noqa self.client = Client() created_at = datetime.utcnow() params = { 'email': '*****@*****.**', 'user_id': 'i-1224242', 'custom_attributes': { 'mad': 123, 'another': 432, 'other': time.mktime(created_at.timetuple()), 'thing': 'yay', 'logins': None, } } 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_increment_none_values(self): self.user.increment('logins') eq_(self.user.to_dict()['custom_attributes']['logins'], 1) @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) @istest 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(Client, 'post', return_value=body) as mock_method: # noqa user.increment('mad') eq_(user.to_dict()['custom_attributes']['mad'], 1) self.client.users.save(user)
def setUp(self): # noqa self.client = Client() self.job = { "app_id": "app_id", "id": "super_awesome_job", "created_at": 1446033421, "completed_at": 1446048736, "closing_at": 1446034321, "updated_at": 1446048736, "name": "api_bulk_job", "state": "completed", "links": { "error": "https://api.intercom.io/jobs/super_awesome_job/error", "self": "https://api.intercom.io/jobs/super_awesome_job" }, "tasks": [{ "id": "super_awesome_task", "item_count": 2, "created_at": 1446033421, "started_at": 1446033709, "completed_at": 1446033709, "state": "completed" }] } self.bulk_request = { "items": [{ "method": "post", "data_type": "user", "data": { "user_id": 25, "email": "*****@*****.**" } }, { "method": "delete", "data_type": "user", "data": { "user_id": 26, "email": "*****@*****.**" } }] } self.users_to_create = [{"user_id": 25, "email": "*****@*****.**"}] self.users_to_delete = [{"user_id": 26, "email": "*****@*****.**"}] 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 it_throws_an_attribute_error_on_trying_to_access_an_attribute_that_has_not_been_set( self): # noqa with assert_raises(AttributeError): user = User() user.foo_property