def test_task_track(self): request_info = { 'username': '******', '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': '******', 'ip': '127.0.0.1', 'event_source': 'task', 'event_type': str(sentinel.event_type), 'event': expected_event_data, 'agent': 'agent', 'page': None, 'time': expected_time, 'host': 'testserver', 'context': { 'course_id': '', 'org_id': '' }, } self.mock_tracker.send.assert_called_once_with(expected_event)
def test_task_track(self): request_info = { 'accept_language': '', 'referer': '', 'username': '******', 'ip': '127.0.0.1', 'agent': 'agent', 'host': 'testserver', } task_info = {six.text_type(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 = { 'timestamp': FROZEN_TIME, 'data': expected_event_data, 'name': str(sentinel.event_type), 'context': { 'username': '******', 'ip': '127.0.0.1', 'agent': 'agent', 'host': 'testserver', 'page': None, 'event_source': 'task' } } actual_event = self.get_event() assert_event_matches(expected_event, actual_event)
def test_task_track(self): request_info = { 'accept_language': '', 'referer': '', 'username': '******', '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': '******', 'ip': '127.0.0.1', 'event_source': 'task', 'event_type': str(sentinel.event_type), 'event': expected_event_data, 'agent': 'agent', 'page': None, 'time': FROZEN_TIME, 'host': 'testserver', 'context': { 'course_id': '', 'org_id': '' }, } self.assert_mock_tracker_call_matches(expected_event)
def test_task_track(self): request_info = { 'accept_language': '', 'referer': '', 'username': '******', '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': '******', 'ip': '127.0.0.1', 'event_source': 'task', 'event_type': str(sentinel.event_type), 'event': expected_event_data, 'agent': 'agent', 'page': None, 'time': FROZEN_TIME, 'host': 'testserver', 'context': { 'course_id': '', 'org_id': '' }, } self.assert_mock_tracker_call_matches(expected_event)
def delete_problem_module_state(_module_descriptor, student_module, xmodule_instance_args=None): """ Delete the StudentModule entry. Always returns true, indicating success, if it doesn't raise an exception due to database error. """ student_module.delete() # get request-related tracking information from args passthrough, # and supplement with task-specific information: request_info = xmodule_instance_args.get('request_info', {}) if xmodule_instance_args is not None else {} task_info = {"student": student_module.student.username, "task_id": _get_task_id_from_xmodule_args(xmodule_instance_args)} task_track(request_info, task_info, 'problem_delete_state', {}, page='x_module_task') return True
def make_track_function(): ''' Make a tracking function that logs what happened. For insertion into ModuleSystem, and used by CapaModule, which will provide the event_type (as string) and event (as dict) as arguments. The request_info and task_info (and page) are provided here. ''' return lambda event_type, event: task_track(request_info, task_info, event_type, event, page='x_module_task')
def test_task_track(self): request_info = {"username": "******", "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": "******", "ip": "127.0.0.1", "event_source": "task", "event_type": str(sentinel.event_type), "event": expected_event_data, "agent": "agent", "page": None, "time": expected_time, "host": "testserver", "context": {"course_id": "", "org_id": ""}, } self.mock_tracker.send.assert_called_once_with(expected_event)
def delete_problem_module_state(_module_descriptor, student_module, xmodule_instance_args=None): """ Delete the StudentModule entry. Always returns true, indicating success, if it doesn't raise an exception due to database error. """ student_module.delete() # get request-related tracking information from args passthrough, # and supplement with task-specific information: request_info = xmodule_instance_args.get( 'request_info', {}) if xmodule_instance_args is not None else {} task_info = { "student": student_module.student.username, "task_id": _get_task_id_from_xmodule_args(xmodule_instance_args) } task_track(request_info, task_info, 'problem_delete_state', {}, page='x_module_task') return True
def reset_attempts_module_state(_module_descriptor, student_module, xmodule_instance_args=None): """ Resets problem attempts to zero for specified `student_module`. Always returns true, indicating success, if it doesn't raise an exception due to database error. """ problem_state = json.loads( student_module.state) if student_module.state else {} if 'attempts' in problem_state: old_number_of_attempts = problem_state["attempts"] if old_number_of_attempts > 0: problem_state["attempts"] = 0 # convert back to json and save student_module.state = json.dumps(problem_state) student_module.save() # get request-related tracking information from args passthrough, # and supplement with task-specific information: request_info = xmodule_instance_args.get( 'request_info', {}) if xmodule_instance_args is not None else {} task_info = { "student": student_module.student.username, "task_id": _get_task_id_from_xmodule_args(xmodule_instance_args) } event_info = { "old_attempts": old_number_of_attempts, "new_attempts": 0 } task_track(request_info, task_info, 'problem_reset_attempts', event_info, page='x_module_task') # consider the reset to be successful, even if no update was performed. (It's just "optimized".) return True
def _get_track_function_for_task(student, xmodule_instance_args=None, source_page='x_module_task'): """ Make a tracking function that logs what happened. For insertion into ModuleSystem, and used by CapaModule, which will provide the event_type (as string) and event (as dict) as arguments. The request_info and task_info (and page) are provided here. """ # get request-related tracking information from args passthrough, and supplement with task-specific # information: request_info = xmodule_instance_args.get('request_info', {}) if xmodule_instance_args is not None else {} task_info = {'student': student.username, 'task_id': _get_task_id_from_xmodule_args(xmodule_instance_args)} return lambda event_type, event: task_track(request_info, task_info, event_type, event, page=source_page)
def reset_attempts_module_state(_module_descriptor, student_module, xmodule_instance_args=None): """ Resets problem attempts to zero for specified `student_module`. Always returns true, indicating success, if it doesn't raise an exception due to database error. """ problem_state = json.loads(student_module.state) if student_module.state else {} if 'attempts' in problem_state: old_number_of_attempts = problem_state["attempts"] if old_number_of_attempts > 0: problem_state["attempts"] = 0 # convert back to json and save student_module.state = json.dumps(problem_state) student_module.save() # get request-related tracking information from args passthrough, # and supplement with task-specific information: request_info = xmodule_instance_args.get('request_info', {}) if xmodule_instance_args is not None else {} task_info = {"student": student_module.student.username, "task_id": _get_task_id_from_xmodule_args(xmodule_instance_args)} event_info = {"old_attempts": old_number_of_attempts, "new_attempts": 0} task_track(request_info, task_info, 'problem_reset_attempts', event_info, page='x_module_task') # consider the reset to be successful, even if no update was performed. (It's just "optimized".) return True