Beispiel #1
0
 def test_collect(self):
     tracking_key = models.generate_uuid()
     tracking_user_id = models.generate_uuid()
     right_now = datetime.now()
     for cnt, page in enumerate(
         ['/page_three/123/', '/page_two', '/page_one']):
         re = models.RequestEvent.objects.create(
             ip_address='127.0.0.1',
             user_agent=
             'Mozilla/5.0 (Windows NT 5.1; rv:30.0) Gecko/20100101 Firefox/30.0',
             tracking_key=tracking_key,
             tracking_user_id=tracking_user_id,
             protocol='http',
             domain='djanalytics.example.com',
             path=page,
             query_string='',
             method='GET',
             client=self.dja_client,
         )
         right_now = right_now - timedelta(seconds=(cnt * 2))
         re.created = right_now
         re.save()
     command = Command()
     command.stdout = Mock()
     command.handle()
     page_visits = models.PageVisit.objects.order_by(
         'request_event__created')
     self.assertEqual(4, page_visits[0].duration)
     self.assertEqual(2, page_visits[1].duration)
     self.assertEqual(None, page_visits[2].duration)
     visit = models.Visit.objects.get()
     self.assertEqual(6, visit.duration)
     self.assertEqual(1, visit.conversion_count)
     self.assertEqual(visit.last_page.path, '/page_three/123/')
     self.assertEqual(visit.first_page.path, '/page_one')
 def test_collect_no_funnel(self):
     # a funnel page MUST precede a conversion page
     # this prevents "order confirmation" type pages from being
     # counted as conversions
     tracking_key = models.generate_uuid()
     tracking_user_id = models.generate_uuid()
     right_now = datetime.now()
     for cnt, page in enumerate(['/page_three/123/', '/page_one']):
         re = models.RequestEvent.objects.create(
             ip_address='127.0.0.1',
             user_agent='Mozilla/5.0 (Windows NT 5.1; rv:30.0) Gecko/20100101 Firefox/30.0',
             tracking_key=tracking_key,
             tracking_user_id=tracking_user_id,
             protocol='http',
             domain='djanalytics.example.com',
             path=page,
             query_string='',
             method='GET',
             client=self.dja_client,
         )
         right_now = right_now - timedelta(seconds=(cnt*2))
         re.created=right_now
         re.save()
     command = Command()
     command.stdout = Mock()
     command.handle()
     page_visits = models.PageVisit.objects.order_by('request_event__created')
     self.assertEqual(2, page_visits[0].duration)
     self.assertEqual(None, page_visits[1].duration)
     visit = models.Visit.objects.get()
     self.assertEqual(2, visit.duration)
     self.assertEqual(0, visit.conversion_count)
     self.assertEqual(visit.last_page.path, '/page_three/123/')
     self.assertEqual(visit.first_page.path, '/page_one')
 def test_collect_non_ascii_user_agent(self):
     tracking_key = models.generate_uuid()
     tracking_user_id = models.generate_uuid()
     f = open(
         path.join(
             path.dirname(path.abspath(__file__)),
             'unicode_user_agent.txt'
         )
     )
     user_agent = f.read()
     f.close()
     models.RequestEvent.objects.create(
         ip_address='127.0.0.1',
         user_agent=user_agent,
         tracking_key=tracking_key,
         tracking_user_id=tracking_user_id,
         protocol='http',
         domain='djanalytics.example.com',
         path='page',
         query_string='',
         method='GET',
         client=self.dja_client,
     )
     command = Command()
     command.stdout = Mock()
     try:
         command.handle()
     except UnicodeEncodeError:
         self.fail()
Beispiel #4
0
 def test_collect_non_ascii_user_agent(self):
     tracking_key = models.generate_uuid()
     tracking_user_id = models.generate_uuid()
     f = open(
         path.join(path.dirname(path.abspath(__file__)),
                   'unicode_user_agent.txt'))
     user_agent = f.read()
     f.close()
     models.RequestEvent.objects.create(
         ip_address='127.0.0.1',
         user_agent=user_agent,
         tracking_key=tracking_key,
         tracking_user_id=tracking_user_id,
         protocol='http',
         domain='djanalytics.example.com',
         path='page',
         query_string='',
         method='GET',
         client=self.dja_client,
     )
     command = Command()
     command.stdout = Mock()
     try:
         command.handle()
     except UnicodeEncodeError:
         self.fail()
    def test_post(self):
        uuid = models.generate_uuid()
        tracking_id = models.generate_uuid()
        self.client.post('/',
                         data={
                             'dja_uuid': uuid,
                             'dja_tracking_id': tracking_id,
                             'dja_id': self.dja_client.uuid,
                         })
        uuid_cookie = self.client.cookies.pop('dja_uuid')
        self.assertEqual(uuid_cookie.value, uuid)

        tracking_id_cookie = self.client.cookies.pop('dti')
        self.assertEqual(tracking_id_cookie.value, tracking_id)
    def test_bad_domain(self):
        models.Domain.objects.update(pattern='ex.com')
        uuid = models.generate_uuid()
        tracking_id = models.generate_uuid()
        self.client.post('/',
                         data={
                             'dja_uuid': uuid,
                             'dja_tracking_id': tracking_id,
                             'dja_id': self.dja_client.uuid,
                         },
                         HTTP_REFERRER='example.com')
        with self.assertRaises(KeyError):
            self.client.cookies.pop('dja_uuid')

        with self.assertRaises(KeyError):
            self.client.cookies.pop('dti')
    def test_post(self):
        uuid = models.generate_uuid()
        tracking_id = models.generate_uuid()
        self.client.post(
            '/', 
            data={
                'dja_uuid': uuid,
                'dja_tracking_id': tracking_id,
                'dja_id': self.dja_client.uuid,
            }
        )
        uuid_cookie = self.client.cookies.pop('dja_uuid')
        self.assertEqual(uuid_cookie.value, uuid)

        tracking_id_cookie = self.client.cookies.pop('dti')
        self.assertEqual(tracking_id_cookie.value, tracking_id)
 def test_bad_domain(self):
     models.Domain.objects.update(pattern='ex.com')
     uuid = models.generate_uuid()
     tracking_id = models.generate_uuid()
     self.client.post(
         '/', 
         data={
             'dja_uuid': uuid,
             'dja_tracking_id': tracking_id,
             'dja_id': self.dja_client.uuid,
         },
         HTTP_REFERRER='example.com'
     )
     with self.assertRaises(KeyError):
         self.client.cookies.pop('dja_uuid')
     
     with self.assertRaises(KeyError):
         self.client.cookies.pop('dti')
Beispiel #9
0
 def test_capture_get_tracking_ids_in_query(self):
     tracking_id = models.generate_uuid()
     tracking_user_id = models.generate_uuid()
     self.client.get(
         reverse('dja_capture'),
         HTTP_USER_AGENT=
         'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:29.0) '
         'Gecko/20100101 Firefox/29.0',
         HTTP_REFERER='http://djanalytics_too.example.com:81',
         data={
             'dja_id': self.dja_client.uuid,
             'qs':
             'query_key=query_value&another_query_key=another_query_value',
             'pth': '/',
             'sw': '800',
             'sh': '600',
             'dti': tracking_id,
             'du': tracking_user_id
         })
     self.assertTrue(
         models.RequestEvent.objects.filter(
             tracking_key=tracking_id,
             tracking_user_id=tracking_user_id).exists())
 def test_capture_get_tracking_ids_in_query(self):
     tracking_id = models.generate_uuid()
     tracking_user_id = models.generate_uuid()
     self.client.get(
         reverse('dja_capture'),
         HTTP_USER_AGENT='Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:29.0) '
                         'Gecko/20100101 Firefox/29.0',
         HTTP_REFERER='http://djanalytics_too.example.com:81',
         data={
             'dja_id': self.dja_client.uuid,
             'qs': 'query_key=query_value&another_query_key=another_query_value',
             'pth': '/',
             'sw': '800',
             'sh': '600',
             'dti': tracking_id,
             'du': tracking_user_id
         }
     )
     self.assertTrue(
         models.RequestEvent.objects.filter(
             tracking_key=tracking_id,
             tracking_user_id=tracking_user_id
         ).exists()
     )
 def test_max_age(self):
     freezer = freeze_time(datetime.now() - timedelta(days=15))
     freezer.start()
     device = models.Device.objects.create(
         os='OS',
         os_version='1.0',
         browser='Browser',
         browser_version='1.0',
         device=''
     )
     visitor = models.Visitor.objects.create(
         uuid=models.generate_uuid(),
     )
     visit = models.Visit.objects.create(
         uuid=models.generate_uuid(),
         visitor=visitor,
         device=device,
         web_property=self.dja_property,
         first_page=self.page,
         visit_date=date.today(),
     )
     re = models.RequestEvent.objects.create(
         ip_address='127.0.0.1',
         user_agent='Mozilla/5.0 (Windows NT 5.1; rv:30.0) Gecko/20100101 Firefox/30.0',
         protocol='http',
         domain='invalid.com',
         path='/foo',
         query_string='',
         method='GET',
         client=self.dja_client,
         tracking_user_id=visitor.uuid,
         tracking_key=visit.uuid,
         created=(datetime.now() - timedelta(seconds=10))
     )
     models.RequestEvent.objects.create(
         ip_address='127.0.0.1',
         user_agent='Mozilla/5.0 (Windows NT 5.1; rv:30.0) Gecko/20100101 Firefox/30.0',
         protocol='http',
         domain='invalid.com',
         path='/foo',
         query_string='',
         method='GET',
         client=self.dja_client,
         tracking_user_id=visitor.uuid,
         tracking_key=visit.uuid,
     )
     models.PageVisit.objects.create(
         page=self.page,
         visit=visit,
         request_event=re
     )
     freezer.stop()
     command = Command()
     command.stdout = Mock()
     command.handle(
         start=(datetime.now() - timedelta(days=10)).strftime('%Y-%m-%d'),
         max_age=10
     )
     self.assertEqual(
         1, models.PageVisit.objects.count(),
         'should not have created a page visit for the second request event'
     )
     self.assertIsNone(
         models.PageVisit.objects.get().duration,
         'should not have set a duration on page visit'
     )
     visit = models.Visit.objects.get()
     self.assertIsNone(
         visit.last_page,
         'should not have set a last page on visit'
     )
     self.assertIsNone(
         visit.duration,
         'should not have set a duration on visit'
     )
     self.assertEqual(
         0,
         visit.conversion_count,
         'conversion_count should 0, not %s' % visit.conversion_count
     )
Beispiel #12
0
 def test_max_age(self):
     freezer = freeze_time(datetime.now() - timedelta(days=15))
     freezer.start()
     device = models.Device.objects.create(os='OS',
                                           os_version='1.0',
                                           browser='Browser',
                                           browser_version='1.0',
                                           device='')
     visitor = models.Visitor.objects.create(uuid=models.generate_uuid(), )
     visit = models.Visit.objects.create(
         uuid=models.generate_uuid(),
         visitor=visitor,
         device=device,
         web_property=self.dja_property,
         first_page=self.page,
         visit_date=date.today(),
     )
     re = models.RequestEvent.objects.create(
         ip_address='127.0.0.1',
         user_agent=
         'Mozilla/5.0 (Windows NT 5.1; rv:30.0) Gecko/20100101 Firefox/30.0',
         protocol='http',
         domain='invalid.com',
         path='/foo',
         query_string='',
         method='GET',
         client=self.dja_client,
         tracking_user_id=visitor.uuid,
         tracking_key=visit.uuid,
         created=(datetime.now() - timedelta(seconds=10)))
     models.RequestEvent.objects.create(
         ip_address='127.0.0.1',
         user_agent=
         'Mozilla/5.0 (Windows NT 5.1; rv:30.0) Gecko/20100101 Firefox/30.0',
         protocol='http',
         domain='invalid.com',
         path='/foo',
         query_string='',
         method='GET',
         client=self.dja_client,
         tracking_user_id=visitor.uuid,
         tracking_key=visit.uuid,
     )
     models.PageVisit.objects.create(page=self.page,
                                     visit=visit,
                                     request_event=re)
     freezer.stop()
     command = Command()
     command.stdout = Mock()
     command.handle(start=(datetime.now() -
                           timedelta(days=10)).strftime('%Y-%m-%d'),
                    max_age=10)
     self.assertEqual(
         1, models.PageVisit.objects.count(),
         'should not have created a page visit for the second request event'
     )
     self.assertIsNone(models.PageVisit.objects.get().duration,
                       'should not have set a duration on page visit')
     visit = models.Visit.objects.get()
     self.assertIsNone(visit.last_page,
                       'should not have set a last page on visit')
     self.assertIsNone(visit.duration,
                       'should not have set a duration on visit')
     self.assertEqual(
         0, visit.conversion_count,
         'conversion_count should 0, not %s' % visit.conversion_count)