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'])
Beispiel #2
0
 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)
Beispiel #3
0
 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)
Beispiel #4
0
 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)
Beispiel #5
0
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'}
Beispiel #6
0
 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)
Beispiel #7
0
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'}
Beispiel #8
0
    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)
Beispiel #9
0
 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")
Beispiel #10
0
 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")
Beispiel #11
0
 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
Beispiel #12
0
    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)
Beispiel #13
0
    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
Beispiel #14
0
 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])
Beispiel #15
0
 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': {}
             })
Beispiel #16
0
 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'])
Beispiel #17
0
 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': {}
             })
Beispiel #18
0
 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])
Beispiel #19
0
    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
Beispiel #20
0
 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)
Beispiel #21
0
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']
Beispiel #22
0
 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)
Beispiel #23
0
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']
Beispiel #24
0
 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
Beispiel #25
0
    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)
Beispiel #26
0
 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'))
Beispiel #27
0
 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'))
Beispiel #28
0
    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)
Beispiel #29
0
    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}
                })
Beispiel #30
0
    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'])
Beispiel #31
0
    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
                }
            })
Beispiel #32
0
    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)
Beispiel #33
0
    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)
Beispiel #34
0
    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]
Beispiel #35
0
    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': {}})
Beispiel #36
0
    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]
Beispiel #37
0
 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'])
Beispiel #38
0
 def test_delete(self):
     user = User.delete(email='*****@*****.**')
     self.assertEqual(u'7902', user.user_id)
     self.assertEqual('*****@*****.**', user.email)
Beispiel #39
0
 def test_create(self):
     user = User.create(email='*****@*****.**')
     self.assertEqual(None, user.user_id)
     self.assertEqual('*****@*****.**', user.email)
Beispiel #40
0
 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)
Beispiel #41
0
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)
Beispiel #42
0
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)
Beispiel #43
0
 def test_find_identifiers(self):
     User.find()
Beispiel #44
0
 def test_create(self):
     user = User.create(email='*****@*****.**')
     self.assertEqual(None, user.user_id)
     self.assertEqual('*****@*****.**', user.email)
Beispiel #45
0
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)
Beispiel #46
0
 def test_delete(self):
     user = User.delete(email='*****@*****.**')
     self.assertEqual(u'7902', user.user_id)
     self.assertEqual('*****@*****.**', user.email)
Beispiel #47
0
 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)
Beispiel #48
0
 def test_find_identifiers(self):
     User.find()
Beispiel #49
0
 def test_find_by_user_id(self):
     user = User.find_by_user_id(1234)
     self.assertEqual(1234, user.user_id)
Beispiel #50
0
 def test_find(self):
     user = User.find(email='*****@*****.**')
     self.assertEqual(None, user.user_id)
     self.assertEqual('*****@*****.**', user.email)
Beispiel #51
0
 def test_find(self):
     user = User.find(email='*****@*****.**')
     self.assertEqual(None, user.user_id)
     self.assertEqual('*****@*****.**', user.email)
Beispiel #52
0
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)
Beispiel #53
0
 def test_find_by_user_id(self):
     user = User.find_by_user_id(1234)
     self.assertEqual(1234, user.user_id)
Beispiel #54
0
    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)
Beispiel #55
0
 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)
Beispiel #56
0
 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