Beispiel #1
0
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='*****@*****.**')
Beispiel #2
0
 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={})
Beispiel #3
0
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
Beispiel #5
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(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={})
Beispiel #6
0
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='*****@*****.**')
Beispiel #7
0
    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
Beispiel #8
0
 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'
Beispiel #9
0
 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'
Beispiel #10
0
 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"
Beispiel #11
0
 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)
Beispiel #12
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 #13
0
 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)
Beispiel #14
0
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='*****@*****.**')
Beispiel #15
0
 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)
Beispiel #16
0
 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)
Beispiel #17
0
 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')
Beispiel #18
0
    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)
Beispiel #19
0
    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)
Beispiel #20
0
 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")
Beispiel #21
0
 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')
Beispiel #22
0
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
Beispiel #23
0
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')
Beispiel #24
0
 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
         )
Beispiel #25
0
 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)
Beispiel #26
0
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
Beispiel #27
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 #28
0
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')
Beispiel #29
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, 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
Beispiel #30
0
 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
Beispiel #31
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, 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
Beispiel #32
0
 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
Beispiel #33
0
    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={})
Beispiel #34
0
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')
Beispiel #35
0
    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
Beispiel #37
0
 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'))
Beispiel #38
0
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)
Beispiel #39
0
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')
Beispiel #40
0
 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)
Beispiel #41
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(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)
Beispiel #42
0
 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
Beispiel #43
0
 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
Beispiel #44
0
 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)
Beispiel #45
0
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)))
Beispiel #46
0
 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
Beispiel #47
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"], 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
Beispiel #49
0
 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'))
Beispiel #50
0
    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")
Beispiel #51
0
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)
Beispiel #53
0
 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={})
Beispiel #54
0
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)
Beispiel #55
0
 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)
Beispiel #56
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(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={})
Beispiel #57
0
 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)
Beispiel #58
0
    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)