113 lines
3.4 KiB
Python
113 lines
3.4 KiB
Python
# pylint: disable=missing-docstring,maybe-no-member
|
|
|
|
from datetime import datetime
|
|
|
|
from mock import patch
|
|
from mock import sentinel
|
|
from pytz import UTC
|
|
|
|
from django.test import TestCase
|
|
from django.test.client import RequestFactory
|
|
|
|
from track import views
|
|
|
|
|
|
class TestTrackViews(TestCase):
|
|
|
|
def setUp(self):
|
|
self.request_factory = RequestFactory()
|
|
|
|
patcher = patch('track.views.tracker')
|
|
self.mock_tracker = patcher.start()
|
|
self.addCleanup(patcher.stop)
|
|
|
|
self._expected_timestamp = datetime.now(UTC)
|
|
self._datetime_patcher = patch('track.views.datetime')
|
|
self.addCleanup(self._datetime_patcher.stop)
|
|
mock_datetime_mod = self._datetime_patcher.start()
|
|
mock_datetime_mod.datetime.now.return_value = self._expected_timestamp # pylint: disable=maybe-no-member
|
|
|
|
self.path_with_course = '/courses/foo/bar/baz/xmod/'
|
|
self.url_with_course = 'http://www.edx.org' + self.path_with_course
|
|
|
|
self.event = {
|
|
sentinel.key: sentinel.value
|
|
}
|
|
|
|
def test_user_track(self):
|
|
request = self.request_factory.get('/event', {
|
|
'page': self.url_with_course,
|
|
'event_type': sentinel.event_type,
|
|
'event': {}
|
|
})
|
|
views.user_track(request)
|
|
|
|
expected_event = {
|
|
'username': 'anonymous',
|
|
'session': '',
|
|
'ip': '127.0.0.1',
|
|
'event_source': 'browser',
|
|
'event_type': str(sentinel.event_type),
|
|
'event': '{}',
|
|
'agent': '',
|
|
'page': self.url_with_course,
|
|
'time': self._expected_timestamp,
|
|
'host': 'testserver',
|
|
'context': {
|
|
'course_id': 'foo/bar/baz',
|
|
'org_id': 'foo',
|
|
},
|
|
}
|
|
self.mock_tracker.send.assert_called_once_with(expected_event)
|
|
|
|
def test_server_track(self):
|
|
request = self.request_factory.get(self.path_with_course)
|
|
views.server_track(request, str(sentinel.event_type), '{}')
|
|
|
|
expected_event = {
|
|
'username': 'anonymous',
|
|
'ip': '127.0.0.1',
|
|
'event_source': 'server',
|
|
'event_type': str(sentinel.event_type),
|
|
'event': '{}',
|
|
'agent': '',
|
|
'page': None,
|
|
'time': self._expected_timestamp,
|
|
'host': 'testserver',
|
|
'context': {},
|
|
}
|
|
self.mock_tracker.send.assert_called_once_with(expected_event)
|
|
|
|
def test_task_track(self):
|
|
request_info = {
|
|
'username': 'anonymous',
|
|
'ip': '127.0.0.1',
|
|
'agent': 'agent',
|
|
'host': 'testserver',
|
|
}
|
|
|
|
task_info = {
|
|
sentinel.task_key: sentinel.task_value
|
|
}
|
|
expected_event_data = dict(task_info)
|
|
expected_event_data.update(self.event)
|
|
|
|
views.task_track(request_info, task_info, str(sentinel.event_type), self.event)
|
|
|
|
expected_event = {
|
|
'username': 'anonymous',
|
|
'ip': '127.0.0.1',
|
|
'event_source': 'task',
|
|
'event_type': str(sentinel.event_type),
|
|
'event': expected_event_data,
|
|
'agent': 'agent',
|
|
'page': None,
|
|
'time': self._expected_timestamp,
|
|
'host': 'testserver',
|
|
'context': {
|
|
'course_id': '',
|
|
'org_id': ''
|
|
},
|
|
}
|
|
self.mock_tracker.send.assert_called_once_with(expected_event)
|