def test_render_internal_ip(self): req = HttpRequest() req.META['REMOTE_ADDR'] = '1.1.1.1' context = Context({'request': req}) r = IntercomNode().render(context) self.assertTrue(r.startswith('<!-- Intercom disabled on internal IP address'), r) self.assertTrue(r.endswith('-->'), r)
def test_custom(self): r = IntercomNode().render( Context({ 'intercom_var1': 'val1', 'intercom_var2': 'val2' })) self.assertTrue('var1": "val1", "var2": "val2"' in r)
def test_no_identify_when_explicit_name(self): r = IntercomNode().render( Context({ 'intercom_name': 'explicit', 'user': User(username='******'), })) self.assertTrue('"name": "explicit"' in r, r)
def test_user_hash__without_user_details(self): """ No `user_hash` without `user_id` or `email`. """ attrs = IntercomNode()._get_custom_attrs(Context()) self.assertEqual({ 'created_at': None, }, attrs)
def test_identify_name_and_email(self): r = IntercomNode().render(Context({ 'user': User(username='******', first_name='Firstname', last_name='Lastname', email="*****@*****.**") })) self.assertTrue('"email": "*****@*****.**", "name": "Firstname Lastname"' in r)
def test_identify_name_email_and_created_at(self): now = datetime.datetime(2014, 4, 9, 15, 15, 0) r = IntercomNode().render(Context({'user': User(username='******', first_name='Firstname', last_name='Lastname', email="*****@*****.**", date_joined=now)})) self.assertTrue( """window.intercomSettings = {"app_id": "1234567890abcdef0123456789", "created_at": 1397074500, "email": "*****@*****.**", "name": "Firstname Lastname"};"""\ in r )
def test_user_hash__with_explicit_email(self): """ 'user_hash' of context-provided `email`. """ attrs = IntercomNode()._get_custom_attrs(Context({ 'intercom_email': '*****@*****.**', })) self.assertEqual({ 'created_at': None, 'email': '*****@*****.**', # HMAC for email: 'user_hash': '49e43229ee99dca2565241719b8341b04e71dd4de0628f991b5bea30a526e153', }, attrs)
def test_identify_name_email_and_created_at(self): now = datetime.datetime(2014, 4, 9, 15, 15, 0) r = IntercomNode().render(Context({ 'user': User( username='******', first_name='Firstname', last_name='Lastname', email="*****@*****.**", date_joined=now), })) self.assertTrue('window.intercomSettings = {' '"app_id": "abc123xyz", "created_at": 1397074500, ' '"email": "*****@*****.**", "name": "Firstname Lastname"' '};' in r)
def test_user_hash__with_user(self): """ 'user_hash' of default `user_id`. """ user = User.objects.create(email='*****@*****.**', ) # type: User attrs = IntercomNode()._get_custom_attrs(Context({'user': user})) self.assertEqual( { 'created_at': int(user.date_joined.timestamp()), 'email': '*****@*****.**', 'name': '', 'user_hash': intercom_user_hash(str(user.pk)), 'user_id': user.pk, }, attrs)
def test_user_hash__with_explicit_user_id(self): """ 'user_hash' of context-provided `user_id`. """ attrs = IntercomNode()._get_custom_attrs(Context({ 'intercom_email': '*****@*****.**', 'intercom_user_id': '5', })) self.assertEqual({ 'created_at': None, 'email': '*****@*****.**', # HMAC for user_id: 'user_hash': 'd3123a7052b42272d9b520235008c248a5aff3221cc0c530b754702ad91ab102', 'user_id': '5', }, attrs)
def test_identify_name_email_and_created_at(self): now = datetime.datetime(2014, 4, 9, 15, 15, 0) user = User.objects.create( username='******', first_name='Firstname', last_name='Lastname', email="*****@*****.**", date_joined=now, ) r = IntercomNode().render(Context({ 'user': user, })) assert ( 'window.intercomSettings = {"app_id": "abc123xyz", "created_at": 1397074500, ' f'"email": "*****@*****.**", "name": "Firstname Lastname", "user_id": {user.pk}}};' ) in r
def test_node(self): now = datetime.datetime(2014, 4, 9, 15, 15, 0) user = User.objects.create( username='******', first_name='Firstname', last_name='Lastname', email="*****@*****.**", date_joined=now, ) rendered_tag = IntercomNode().render(Context({'user': user})) # Because the json isn't predictably ordered, we can't just test the whole thing verbatim. self.assertEqual(""" <script id="IntercomSettingsScriptTag"> window.intercomSettings = {"app_id": "abc123xyz", "created_at": 1397074500, "email": "*****@*****.**", "name": "Firstname Lastname", "user_id": %(user_id)s}; </script> <script>(function(){var w=window;var ic=w.Intercom;if(typeof ic==="function"){ic('reattach_activator');ic('update',intercomSettings);}else{var d=document;var i=function(){i.c(arguments)};i.q=[];i.c=function(args){i.q.push(args)};w.Intercom=i;function l(){var s=d.createElement('script');s.type='text/javascript';s.async=true;s.src='https://static.intercomcdn.com/intercom.v1.js';var x=d.getElementsByTagName('script')[0];x.parentNode.insertBefore(s,x);}if(w.attachEvent){w.attachEvent('onload',l);}else{w.addEventListener('load',l,false);}}})()</script> """ % {'user_id': user.pk}, rendered_tag) # noqa
def test_identify_name_email_and_created_at(self): now = datetime.datetime(2014, 4, 9, 15, 15, 0) user = User.objects.create( username='******', first_name='Firstname', last_name='Lastname', email="*****@*****.**", date_joined=now, ) r = IntercomNode().render(Context({ 'user': user, })) self.assertTrue( 'window.intercomSettings = {' # 1397074500, ' '"app_id": "abc123xyz", "created_at": %(ts)s, ' '"email": "*****@*****.**", "name": "Firstname Lastname", ' '"user_id": %(user_id)s' '};' % { 'user_id': user.pk, 'ts': int(now.timestamp()) } in r, msg=r)
def test_identify_username_no_email(self): r = IntercomNode().render(Context({'user': User(username='******')})) self.assertTrue('"name": "test"' in r, r)
def test_disable_for_anonymous_users(self): r = IntercomNode().render(Context({'user': AnonymousUser()})) self.assertTrue( r.startswith('<!-- Intercom disabled on internal IP address'), r)
def test_disable_for_anonymous_users(self): r = IntercomNode().render(Context({'user': AnonymousUser()})) self.assertTrue(r.startswith('<!-- Intercom disabled on internal IP address'), r)
def test_wrong_account_number(self): with pytest.raises(AnalyticalException): IntercomNode()
def test_no_identify_when_explicit_email(self): r = IntercomNode().render(Context({ 'intercom_email': 'explicit', 'user': User(username='******'), })) assert '"email": "explicit"' in r, r