From 03aee3ed79188863d333cff041639b1ccf105e83 Mon Sep 17 00:00:00 2001 From: Adam Palay Date: Thu, 27 Jun 2013 16:34:15 -0400 Subject: [PATCH] add tests --- .../contentstore/tests/test_request_event.py | 35 ++++++++++++ cms/envs/test.py | 3 + common/djangoapps/track/tests.py | 55 +++++++++++++++++++ common/djangoapps/track/views.py | 1 + lms/envs/test.py | 3 + 5 files changed, 97 insertions(+) create mode 100644 cms/djangoapps/contentstore/tests/test_request_event.py create mode 100644 common/djangoapps/track/tests.py diff --git a/cms/djangoapps/contentstore/tests/test_request_event.py b/cms/djangoapps/contentstore/tests/test_request_event.py new file mode 100644 index 0000000000..296dfc3936 --- /dev/null +++ b/cms/djangoapps/contentstore/tests/test_request_event.py @@ -0,0 +1,35 @@ +from django.test import TestCase +from django.core.urlresolvers import reverse +from contentstore.views.requests import event as cms_user_track + + +class CMSLogTest(TestCase): + """ + Tests that request to logs from CMS return 204s + """ + + def test_post_answers_to_log(self): + """ + Checks that student answer requests submitted to cms's "/event" url + via POST are correctly returned as 204s + """ + requests = [ + {"event": "my_event", "event_type": "my_event_type", "page": "my_page"}, + {"event": "{'json': 'object'}", "event_type": unichr(512), "page": "my_page"} + ] + for request_params in requests: + response = self.client.post(reverse(cms_user_track), request_params) + self.assertEqual(response.status_code, 204) + + def test_get_answers_to_log(self): + """ + Checks that student answer requests submitted to cms's "/event" url + via GET are correctly returned as 204s + """ + requests = [ + {"event": "my_event", "event_type": "my_event_type", "page": "my_page"}, + {"event": "{'json': 'object'}", "event_type": unichr(512), "page": "my_page"} + ] + for request_params in requests: + response = self.client.get(reverse(cms_user_track), request_params) + self.assertEqual(response.status_code, 204) diff --git a/cms/envs/test.py b/cms/envs/test.py index 8fe9652c07..86925caff6 100644 --- a/cms/envs/test.py +++ b/cms/envs/test.py @@ -140,3 +140,6 @@ SEGMENT_IO_KEY = '***REMOVED***' MITX_FEATURES['STUDIO_NPS_SURVEY'] = False MITX_FEATURES['ENABLE_SERVICE_STATUS'] = True + +# Enabling SQL tracking logs for testing on common/djangoapps/track +MITX_FEATURES['ENABLE_SQL_TRACKING_LOGS'] = True diff --git a/common/djangoapps/track/tests.py b/common/djangoapps/track/tests.py new file mode 100644 index 0000000000..b454b06e84 --- /dev/null +++ b/common/djangoapps/track/tests.py @@ -0,0 +1,55 @@ +from django.test import TestCase +from django.core.urlresolvers import reverse, NoReverseMatch +from track.models import TrackingLog +from track.views import user_track +from nose.plugins.skip import SkipTest + + +class TrackingTest(TestCase): + """ + Tests that tracking logs correctly handle events + """ + + def test_post_answers_to_log(self): + """ + Checks that student answer requests submitted to track.views via POST + are correctly logged in the TrackingLog db table + """ + requests = [ + {"event": "my_event", "event_type": "my_event_type", "page": "my_page"}, + {"event": "{'json': 'object'}", "event_type": unichr(512), "page": "my_page"} + ] + for request_params in requests: + try: # because /event maps to two different views in lms and cms, we're only going to test lms here + response = self.client.post(reverse(user_track), request_params) + except NoReverseMatch: + raise SkipTest() + self.assertEqual(response.status_code, 200) + self.assertEqual(response.content, 'success') + tracking_logs = TrackingLog.objects.order_by('-dtcreated') + log = tracking_logs[0] + self.assertEqual(log.event, request_params["event"]) + self.assertEqual(log.event_type, request_params["event_type"]) + self.assertEqual(log.page, request_params["page"]) + + def test_get_answers_to_log(self): + """ + Checks that student answer requests submitted to track.views via GET + are correctly logged in the TrackingLog db table + """ + requests = [ + {"event": "my_event", "event_type": "my_event_type", "page": "my_page"}, + {"event": "{'json': 'object'}", "event_type": unichr(512), "page": "my_page"} + ] + for request_params in requests: + try: # because /event maps to two different views in lms and cms, we're only going to test lms here + response = self.client.get(reverse(user_track), request_params) + except NoReverseMatch: + raise SkipTest() + self.assertEqual(response.status_code, 200) + self.assertEqual(response.content, 'success') + tracking_logs = TrackingLog.objects.order_by('-dtcreated') + log = tracking_logs[0] + self.assertEqual(log.event, request_params["event"]) + self.assertEqual(log.event_type, request_params["event_type"]) + self.assertEqual(log.page, request_params["page"]) diff --git a/common/djangoapps/track/views.py b/common/djangoapps/track/views.py index 31c5d02b3c..b65f9fa043 100644 --- a/common/djangoapps/track/views.py +++ b/common/djangoapps/track/views.py @@ -67,6 +67,7 @@ def user_track(request): "time": datetime.datetime.now(UTC).isoformat(), "host": request.META['SERVER_NAME'], } + log_event(event) return HttpResponse('success') diff --git a/lms/envs/test.py b/lms/envs/test.py index d335fcd600..f23be52a51 100644 --- a/lms/envs/test.py +++ b/lms/envs/test.py @@ -29,6 +29,9 @@ MITX_FEATURES['ENABLE_SERVICE_STATUS'] = True MITX_FEATURES['ENABLE_HINTER_INSTRUCTOR_VIEW'] = True +# Enabling SQL tracking logs for testing on common/djangoapps/track +MITX_FEATURES['ENABLE_SQL_TRACKING_LOGS'] = True + # Need wiki for courseware views to work. TODO (vshnayder): shouldn't need it. WIKI_ENABLED = True