示例#1
0
    def setUp(self):
        super(SegmentTrackTestCase, self).setUp()
        self.tracker = DjangoTracker()
        tracker.register_tracker(self.tracker)
        self.properties = {sentinel.key: sentinel.value}

        patcher = patch('track.segment.analytics.track')
        self.mock_segment_track = patcher.start()
        self.addCleanup(patcher.stop)
示例#2
0
    def setUp(self):
        super(SegmentTrackTestCase, self).setUp()  # lint-amnesty, pylint: disable=super-with-arguments
        self.tracker = DjangoTracker()
        tracker.register_tracker(self.tracker)
        self.properties = {sentinel.key: sentinel.value}

        patcher = patch('common.djangoapps.track.segment.analytics.track')
        self.mock_segment_track = patcher.start()
        self.addCleanup(patcher.stop)
示例#3
0
文件: __init__.py 项目: saadow123/1
    def recreate_tracker(self):
        """
        Re-initialize the tracking system using updated django settings.

        Use this if you make use of the @override_settings decorator to customize the tracker configuration.
        """
        self.tracker = DjangoTracker()
        tracker.register_tracker(self.tracker)
示例#4
0
 def __init__(self, mock_emit, **kwargs):  # pylint: disable=unused-argument
     id_manager = CourseLocationManager(kwargs['course_id'])
     kwargs.setdefault('id_reader', id_manager)
     kwargs.setdefault('id_generator', id_manager)
     kwargs.setdefault('services', {}).setdefault('field-data', DictFieldData({}))
     self.tracker = DjangoTracker()
     tracker.register_tracker(self.tracker)
     super(TestModuleSystem, self).__init__(**kwargs)
示例#5
0
    def setUp(self):
        super(SegmentTrackTestCase, self).setUp()
        self.tracker = DjangoTracker()
        tracker.register_tracker(self.tracker)
        self.properties = {sentinel.key: sentinel.value}

        patcher = patch('track.segment.analytics.track')
        self.mock_segment_track = patcher.start()
        self.addCleanup(patcher.stop)
示例#6
0
    def test_event_field_mapping(self):
        django_tracker = DjangoTracker()

        data = {sentinel.key: sentinel.value}

        context = {
            'username': sentinel.username,
            'session': sentinel.session,
            'ip': sentinel.ip,
            'host': sentinel.host,
            'agent': sentinel.agent,
            'path': sentinel.path,
            'user_id': sentinel.user_id,
            'course_id': sentinel.course_id,
            'org_id': sentinel.org_id,
            'event_type': sentinel.event_type,
            'client_id': sentinel.client_id,
        }
        with django_tracker.context('test', context):
            django_tracker.emit(sentinel.name, data)

        emitted_event = django_tracker.backends['mem'].get_event()

        expected_event = {
            'event_type': sentinel.event_type,
            'name': sentinel.name,
            'context': {
                'user_id': sentinel.user_id,
                'course_id': sentinel.course_id,
                'org_id': sentinel.org_id,
                'path': sentinel.path,
            },
            'event': data,
            'username': sentinel.username,
            'event_source': 'server',
            'time': FROZEN_TIME,
            'agent': sentinel.agent,
            'host': sentinel.host,
            'ip': sentinel.ip,
            'page': None,
            'session': sentinel.session,
        }
        self.assertEqual(expected_event, emitted_event)
示例#7
0
    def test_event_field_mapping(self):
        django_tracker = DjangoTracker()

        data = {sentinel.key: sentinel.value}

        context = {
            'username': sentinel.username,
            'session': sentinel.session,
            'ip': sentinel.ip,
            'host': sentinel.host,
            'agent': sentinel.agent,
            'path': sentinel.path,
            'user_id': sentinel.user_id,
            'course_id': sentinel.course_id,
            'org_id': sentinel.org_id,
            'event_type': sentinel.event_type,
            'client_id': sentinel.client_id,
        }
        with django_tracker.context('test', context):
            django_tracker.emit(sentinel.name, data)

        emitted_event = django_tracker.backends['mem'].get_event()

        expected_event = {
            'event_type': sentinel.event_type,
            'name': sentinel.name,
            'context': {
                'user_id': sentinel.user_id,
                'course_id': sentinel.course_id,
                'org_id': sentinel.org_id,
                'path': sentinel.path,
            },
            'event': data,
            'username': sentinel.username,
            'event_source': 'server',
            'time': FROZEN_TIME,
            'agent': sentinel.agent,
            'host': sentinel.host,
            'ip': sentinel.ip,
            'page': None,
            'session': sentinel.session,
        }
        self.assertEqual(expected_event, emitted_event)
示例#8
0
    def test_missing_fields(self):
        django_tracker = DjangoTracker()

        django_tracker.emit(sentinel.name)

        emitted_event = django_tracker.backends['mem'].get_event()

        expected_event = {
            'event_type': sentinel.name,
            'name': sentinel.name,
            'context': {},
            'event': {},
            'username': '',
            'event_source': 'server',
            'time': FROZEN_TIME,
            'agent': '',
            'host': '',
            'ip': '',
            'page': None,
            'session': '',
        }
        self.assertEqual(expected_event, emitted_event)
示例#9
0
    def test_missing_fields(self):
        django_tracker = DjangoTracker()

        django_tracker.emit(sentinel.name)

        emitted_event = django_tracker.backends['mem'].get_event()

        expected_event = {
            'event_type': sentinel.name,
            'name': sentinel.name,
            'context': {},
            'event': {},
            'username': '',
            'event_source': 'server',
            'time': FROZEN_TIME,
            'agent': '',
            'host': '',
            'ip': '',
            'page': None,
            'session': '',
        }
        self.assertEqual(expected_event, emitted_event)
示例#10
0
class SegmentTrackTestCase(TestCase):
    """Ensure emitted events contain the expected context values."""
    def setUp(self):
        super(SegmentTrackTestCase, self).setUp()
        self.tracker = DjangoTracker()
        tracker.register_tracker(self.tracker)
        self.properties = {sentinel.key: sentinel.value}

        patcher = patch('track.segment.analytics.track')
        self.mock_segment_track = patcher.start()
        self.addCleanup(patcher.stop)

    def test_missing_key(self):
        segment.track(sentinel.user_id, sentinel.name, self.properties)
        self.assertFalse(self.mock_segment_track.called)

    @override_settings(LMS_SEGMENT_KEY=None)
    def test_null_key(self):
        segment.track(sentinel.user_id, sentinel.name, self.properties)
        self.assertFalse(self.mock_segment_track.called)

    @override_settings(LMS_SEGMENT_KEY="testkey")
    def test_missing_name(self):
        segment.track(sentinel.user_id, None, self.properties)
        self.assertFalse(self.mock_segment_track.called)

    @override_settings(LMS_SEGMENT_KEY="testkey")
    def test_track_without_tracking_context(self):
        segment.track(sentinel.user_id, sentinel.name, self.properties)
        self.assertTrue(self.mock_segment_track.called)
        args, kwargs = self.mock_segment_track.call_args
        expected_segment_context = {}
        self.assertEqual((sentinel.user_id, sentinel.name, self.properties,
                          expected_segment_context), args)

    @ddt.unpack
    @ddt.data(
        ({
            'ip': sentinel.ip
        }, {
            'ip': sentinel.provided_ip
        }, {
            'ip': sentinel.ip
        }),
        ({
            'agent': sentinel.agent
        }, {
            'userAgent': sentinel.provided_agent
        }, {
            'userAgent': sentinel.agent
        }),
        ({
            'path': sentinel.path
        }, {
            'page': {
                'path': sentinel.provided_path
            }
        }, {
            'page': {
                'path': sentinel.path
            }
        }),
        ({
            'referer': sentinel.referer
        }, {
            'page': {
                'referrer': sentinel.provided_referer
            }
        }, {
            'page': {
                'referrer': sentinel.referer
            }
        }),
        ({
            'page': sentinel.page
        }, {
            'page': {
                'url': sentinel.provided_page
            }
        }, {
            'page': {
                'url': sentinel.page
            }
        }),
        ({
            'client_id': sentinel.client_id
        }, {
            'Google Analytics': {
                'clientId': sentinel.provided_client_id
            }
        }, {
            'Google Analytics': {
                'clientId': sentinel.client_id
            }
        }),
    )
    @override_settings(LMS_SEGMENT_KEY="testkey")
    def test_track_context_with_stuff(self, tracking_context, provided_context,
                                      expected_segment_context):
        # Test first with tracking and no provided context.
        with self.tracker.context('test', tracking_context):
            segment.track(sentinel.user_id, sentinel.name, self.properties)
        args, kwargs = self.mock_segment_track.call_args
        self.assertEqual((sentinel.user_id, sentinel.name, self.properties,
                          expected_segment_context), args)

        # Test with provided context and no tracking context.
        segment.track(sentinel.user_id, sentinel.name, self.properties,
                      provided_context)
        args, kwargs = self.mock_segment_track.call_args
        self.assertEqual((sentinel.user_id, sentinel.name, self.properties,
                          provided_context), args)

        # Test with provided context and also tracking context.
        with self.tracker.context('test', tracking_context):
            segment.track(sentinel.user_id, sentinel.name, self.properties,
                          provided_context)
        self.assertTrue(self.mock_segment_track.called)
        args, kwargs = self.mock_segment_track.call_args
        self.assertEqual((sentinel.user_id, sentinel.name, self.properties,
                          provided_context), args)

    @override_settings(LMS_SEGMENT_KEY="testkey")
    def test_track_with_standard_context(self):

        # Note that 'host' and 'path' will be urlparsed, so must be strings.
        tracking_context = {
            'accept_language': sentinel.accept_language,
            'referer': sentinel.referer,
            'username': sentinel.username,
            'session': sentinel.session,
            'ip': sentinel.ip,
            'host': 'hostname',
            'agent': sentinel.agent,
            'path': '/this/is/a/path',
            'user_id': sentinel.user_id,
            'course_id': sentinel.course_id,
            'org_id': sentinel.org_id,
            'client_id': sentinel.client_id,
        }
        with self.tracker.context('test', tracking_context):
            segment.track(sentinel.user_id, sentinel.name, self.properties)

        self.assertTrue(self.mock_segment_track.called)
        args, kwargs = self.mock_segment_track.call_args

        expected_segment_context = {
            'ip': sentinel.ip,
            'Google Analytics': {
                'clientId': sentinel.client_id,
            },
            'userAgent': sentinel.agent,
            'page': {
                'path': '/this/is/a/path',
                'referrer': sentinel.referer,
                'url': '//hostname/this/is/a/path'  # Synthesized URL value.
            }
        }
        self.assertEqual((sentinel.user_id, sentinel.name, self.properties,
                          expected_segment_context), args)
示例#11
0
    def setUp(self):
        super(EventTrackingTestCase, self).setUp()

        self.tracker = DjangoTracker()
        tracker.register_tracker(self.tracker)
示例#12
0
class SegmentTrackTestCase(TestCase):
    """Ensure emitted events contain the expected context values."""

    def setUp(self):
        super(SegmentTrackTestCase, self).setUp()
        self.tracker = DjangoTracker()
        tracker.register_tracker(self.tracker)
        self.properties = {sentinel.key: sentinel.value}

        patcher = patch('track.segment.analytics.track')
        self.mock_segment_track = patcher.start()
        self.addCleanup(patcher.stop)

    def test_missing_key(self):
        segment.track(sentinel.user_id, sentinel.name, self.properties)
        self.assertFalse(self.mock_segment_track.called)

    @override_settings(LMS_SEGMENT_KEY=None)
    def test_null_key(self):
        segment.track(sentinel.user_id, sentinel.name, self.properties)
        self.assertFalse(self.mock_segment_track.called)

    @override_settings(LMS_SEGMENT_KEY="testkey")
    def test_missing_name(self):
        segment.track(sentinel.user_id, None, self.properties)
        self.assertFalse(self.mock_segment_track.called)

    @override_settings(LMS_SEGMENT_KEY="testkey")
    def test_track_without_tracking_context(self):
        segment.track(sentinel.user_id, sentinel.name, self.properties)
        self.assertTrue(self.mock_segment_track.called)
        args, kwargs = self.mock_segment_track.call_args
        expected_segment_context = {}
        self.assertEqual((sentinel.user_id, sentinel.name, self.properties, expected_segment_context), args)

    @ddt.unpack
    @ddt.data(
        ({'ip': sentinel.ip}, {'ip': sentinel.provided_ip}, {'ip': sentinel.ip}),
        ({'agent': sentinel.agent}, {'userAgent': sentinel.provided_agent}, {'userAgent': sentinel.agent}),
        ({'path': sentinel.path}, {'page': {'path': sentinel.provided_path}}, {'page': {'path': sentinel.path}}),
        ({'referer': sentinel.referer}, {'page': {'referrer': sentinel.provided_referer}}, {'page': {'referrer': sentinel.referer}}),
        ({'page': sentinel.page}, {'page': {'url': sentinel.provided_page}}, {'page': {'url': sentinel.page}}),
        ({'client_id': sentinel.client_id}, {'Google Analytics': {'clientId': sentinel.provided_client_id}}, {'Google Analytics': {'clientId': sentinel.client_id}}),
    )
    @override_settings(LMS_SEGMENT_KEY="testkey")
    def test_track_context_with_stuff(self, tracking_context, provided_context, expected_segment_context):
        # Test first with tracking and no provided context.
        with self.tracker.context('test', tracking_context):
            segment.track(sentinel.user_id, sentinel.name, self.properties)
        args, kwargs = self.mock_segment_track.call_args
        self.assertEqual((sentinel.user_id, sentinel.name, self.properties, expected_segment_context), args)

        # Test with provided context and no tracking context.
        segment.track(sentinel.user_id, sentinel.name, self.properties, provided_context)
        args, kwargs = self.mock_segment_track.call_args
        self.assertEqual((sentinel.user_id, sentinel.name, self.properties, provided_context), args)

        # Test with provided context and also tracking context.
        with self.tracker.context('test', tracking_context):
            segment.track(sentinel.user_id, sentinel.name, self.properties, provided_context)
        self.assertTrue(self.mock_segment_track.called)
        args, kwargs = self.mock_segment_track.call_args
        self.assertEqual((sentinel.user_id, sentinel.name, self.properties, provided_context), args)

    @override_settings(LMS_SEGMENT_KEY="testkey")
    def test_track_with_standard_context(self):

        # Note that 'host' and 'path' will be urlparsed, so must be strings.
        tracking_context = {
            'accept_language': sentinel.accept_language,
            'referer': sentinel.referer,
            'username': sentinel.username,
            'session': sentinel.session,
            'ip': sentinel.ip,
            'host': 'hostname',
            'agent': sentinel.agent,
            'path': '/this/is/a/path',
            'user_id': sentinel.user_id,
            'course_id': sentinel.course_id,
            'org_id': sentinel.org_id,
            'client_id': sentinel.client_id,
        }
        with self.tracker.context('test', tracking_context):
            segment.track(sentinel.user_id, sentinel.name, self.properties)

        self.assertTrue(self.mock_segment_track.called)
        args, kwargs = self.mock_segment_track.call_args

        expected_segment_context = {
            'ip': sentinel.ip,
            'Google Analytics': {
                'clientId': sentinel.client_id,
            },
            'userAgent': sentinel.agent,
            'page': {
                'path': '/this/is/a/path',
                'referrer': sentinel.referer,
                'url': 'https://hostname/this/is/a/path'  # Synthesized URL value.
            }
        }
        self.assertEqual((sentinel.user_id, sentinel.name, self.properties, expected_segment_context), args)