import json import httpretty from analyticsclient.tests import ClientTestCase class ModulesTests(ClientTestCase): def setUp(self): super(ModulesTests, self).setUp() httpretty.enable() self.course_id = 'edX/TestX/TestCourse' self.module_id = 'i4x://TestCourse/block1/module2/abcd1234' self.module = self.client.modules(self.course_id, self.module_id) def tearDown(self): super(ModulesTests, self).tearDown() httpretty.disable() def test_open_distribution_url(self): """ Verifies that the sequential open URL is correct. """ uri = self.get_api_url('problems/{0}/sequential_open_distribution/'.format(self.module_id)) httpretty.register_uri(httpretty.GET, uri, body='{}') self.module.sequential_open_distribution() def test_answer_distribution_url(self): """ Verifies that the answer distribution URL is correct. """ uri = self.get_api_url('problems/{0}/answer_distribution/'.format(self.module_id)) httpretty.register_uri(httpretty.GET, uri, body='{}') self.module.answer_distribution() def test_grade_distribution_url(self): """ Verifies that the grade distribution URL is correct. """ uri = self.get_api_url('problems/{0}/grade_distribution/'.format(self.module_id)) httpretty.register_uri(httpretty.GET, uri, body='{}') self.module.grade_distribution() @httpretty.activate def test_open_distribution_response(self): """ Verifies that open distribution responds with the expected values. """ body = [ { 'course_id': self.course_id, 'module_id': self.module_id, 'count': 123, 'created': '2014-01-01T00:00:00Z' } ] uri = self.get_api_url('problems/{0}/sequential_open_distribution/'.format(self.module_id)) httpretty.register_uri(httpretty.GET, uri, body=json.dumps(body)) self.assertEqual(body, self.module.sequential_open_distribution()) @httpretty.activate def test_answer_distribution_response(self): """ Verifies that answer distribution responds with the expected values. """ body = [ { 'course_id': self.course_id, 'module_id': self.module_id, 'part_id': self.module_id.replace('/', '-') + '-part1', 'correct': True, 'first_response_count': 2, 'last_response_count': 2, 'value_id': 'choice_4', 'answer_value_text': 'User chose this answer.', 'answer_value_numeric': None, 'variant': 123, 'created': "2014-01-01T00:01:00" } ] uri = self.get_api_url('problems/{0}/answer_distribution/'.format(self.module_id)) httpretty.register_uri(httpretty.GET, uri, body=json.dumps(body)) self.assertEqual(body, self.module.answer_distribution()) @httpretty.activate def test_grade_distribution_response(self): """ Verifies that the grade distribution responds with the expected values. """ body = [ { 'module_id': self.module_id, 'course_id': self.course_id, 'grade': 0, 'max_grade': 1, 'count': 1, 'created': '2014-01-01T00:01:00' } ] uri = self.get_api_url('problems/{0}/grade_distribution/'.format(self.module_id)) httpretty.register_uri(httpretty.GET, uri, body=json.dumps(body)) self.assertEqual(body, self.module.grade_distribution()) @httpretty.activate def test_video_timeline_response(self): """ Verifies that the video timeline responds with the expected values. """ body = [ { 'segment': 0, 'num_users': 140, 'num_views': 64234, 'created': '2014-01-01T00:01:00' } ] uri = self.get_api_url('videos/{0}/timeline/'.format(self.module_id)) httpretty.register_uri(httpretty.GET, uri, body=json.dumps(body)) self.assertEqual(body, self.module.video_timeline())