diff --git a/common/djangoapps/course_modes/tests/test_views.py b/common/djangoapps/course_modes/tests/test_views.py index 94eb2a7da8..efcf0e5ac7 100644 --- a/common/djangoapps/course_modes/tests/test_views.py +++ b/common/djangoapps/course_modes/tests/test_views.py @@ -527,19 +527,19 @@ class CourseModeViewTest(CatalogIntegrationMixin, UrlResetMixin, ModuleStoreTest self.assertNotContains(response, "Schools & Partners") @unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms') - @freezegun.freeze_time('2015-01-02') def test_course_closed(self): - for mode in ["honor", "verified"]: - CourseModeFactory(mode_slug=mode, course_id=self.course.id) + with freezegun.freeze_time('2015-01-02'): + for mode in ["honor", "verified"]: + CourseModeFactory(mode_slug=mode, course_id=self.course.id) - self.course.enrollment_end = datetime(2015, 01, 01) - modulestore().update_item(self.course, self.user.id) + self.course.enrollment_end = datetime(2015, 01, 01) + modulestore().update_item(self.course, self.user.id) - url = reverse('course_modes_choose', args=[unicode(self.course.id)]) - response = self.client.get(url) - # URL-encoded version of 1/1/15, 12:00 AM - redirect_url = reverse('dashboard') + '?course_closed=1%2F1%2F15%2C+12%3A00+AM' - self.assertRedirects(response, redirect_url) + url = reverse('course_modes_choose', args=[unicode(self.course.id)]) + response = self.client.get(url) + # URL-encoded version of 1/1/15, 12:00 AM + redirect_url = reverse('dashboard') + '?course_closed=1%2F1%2F15%2C+12%3A00+AM' + self.assertRedirects(response, redirect_url) @unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms') diff --git a/common/djangoapps/track/tests/__init__.py b/common/djangoapps/track/tests/__init__.py index 3b99e5811c..a3363e1c2f 100644 --- a/common/djangoapps/track/tests/__init__.py +++ b/common/djangoapps/track/tests/__init__.py @@ -31,7 +31,6 @@ class InMemoryBackend(object): self.events.append(event) -@freeze_time(FROZEN_TIME) @override_settings( EVENT_TRACKING_BACKENDS=IN_MEMORY_BACKEND_CONFIG ) @@ -46,6 +45,10 @@ class EventTrackingTestCase(TestCase): # Make this more robust to the addition of new events that the test doesn't care about. def setUp(self): + freezer = freeze_time(FROZEN_TIME) + freezer.start() + self.addCleanup(freezer.stop) + super(EventTrackingTestCase, self).setUp() self.recreate_tracker() diff --git a/common/djangoapps/track/views/__init__.py b/common/djangoapps/track/views/__init__.py index e34ebea3b8..b5cf9ce881 100644 --- a/common/djangoapps/track/views/__init__.py +++ b/common/djangoapps/track/views/__init__.py @@ -107,7 +107,7 @@ def server_track(request, event_type, event, page=None): "event": event, "agent": _get_request_header(request, 'HTTP_USER_AGENT').decode('latin1'), "page": page, - "time": datetime.datetime.utcnow(), + "time": datetime.datetime.utcnow().replace(tzinfo=pytz.utc), "host": _get_request_header(request, 'SERVER_NAME'), "context": eventtracker.get_tracker().resolve_context(), } @@ -155,7 +155,7 @@ def task_track(request_info, task_info, event_type, event, page=None): "event": full_event, "agent": request_info.get('agent', 'unknown'), "page": page, - "time": datetime.datetime.utcnow(), + "time": datetime.datetime.utcnow().replace(tzinfo=pytz.utc), "host": request_info.get('host', 'unknown'), "context": eventtracker.get_tracker().resolve_context(), } diff --git a/common/lib/xmodule/xmodule/tests/test_sequence.py b/common/lib/xmodule/xmodule/tests/test_sequence.py index 26112a6110..af3ae73a4e 100644 --- a/common/lib/xmodule/xmodule/tests/test_sequence.py +++ b/common/lib/xmodule/xmodule/tests/test_sequence.py @@ -139,42 +139,42 @@ class SequenceBlockTestCase(XModuleXmlImportTest): self.assertIn("seq_module.html", html) self.assertIn("'banner_text': None", html) - @freeze_time(COURSE_END_DATE) def test_hidden_content_past_due(self): - progress_url = 'http://test_progress_link' - html = self._get_rendered_student_view( - self.sequence_4_1, - extra_context=dict(progress_url=progress_url), - ) - self.assertIn("hidden_content.html", html) - self.assertIn(progress_url, html) + with freeze_time(COURSE_END_DATE): + progress_url = 'http://test_progress_link' + html = self._get_rendered_student_view( + self.sequence_4_1, + extra_context=dict(progress_url=progress_url), + ) + self.assertIn("hidden_content.html", html) + self.assertIn(progress_url, html) - @freeze_time(COURSE_END_DATE) def test_masquerade_hidden_content_past_due(self): - html = self._get_rendered_student_view( - self.sequence_4_1, - extra_context=dict(specific_masquerade=True), - ) - self.assertIn("seq_module.html", html) - self.assertIn( - "'banner_text': 'Because the due date has passed, " - "this assignment is hidden from the learner.'", - html - ) + with freeze_time(COURSE_END_DATE): + html = self._get_rendered_student_view( + self.sequence_4_1, + extra_context=dict(specific_masquerade=True), + ) + self.assertIn("seq_module.html", html) + self.assertIn( + "'banner_text': 'Because the due date has passed, " + "this assignment is hidden from the learner.'", + html + ) - @freeze_time(PAST_DUE_BEFORE_END_DATE) def test_hidden_content_self_paced_past_due_before_end(self): - html = self._get_rendered_student_view(self.sequence_4_1, self_paced=True) - self.assertIn("seq_module.html", html) - self.assertIn("'banner_text': None", html) + with freeze_time(PAST_DUE_BEFORE_END_DATE): + html = self._get_rendered_student_view(self.sequence_4_1, self_paced=True) + self.assertIn("seq_module.html", html) + self.assertIn("'banner_text': None", html) - @freeze_time(COURSE_END_DATE + timedelta(days=7)) def test_hidden_content_self_paced_past_end(self): - progress_url = 'http://test_progress_link' - html = self._get_rendered_student_view( - self.sequence_4_1, - extra_context=dict(progress_url=progress_url), - self_paced=True, - ) - self.assertIn("hidden_content.html", html) - self.assertIn(progress_url, html) + with freeze_time(COURSE_END_DATE + timedelta(days=7)): + progress_url = 'http://test_progress_link' + html = self._get_rendered_student_view( + self.sequence_4_1, + extra_context=dict(progress_url=progress_url), + self_paced=True, + ) + self.assertIn("hidden_content.html", html) + self.assertIn(progress_url, html) diff --git a/lms/djangoapps/certificates/apis/v0/tests/test_views.py b/lms/djangoapps/certificates/apis/v0/tests/test_views.py index cfa0d55fbe..b66c2bcdc5 100644 --- a/lms/djangoapps/certificates/apis/v0/tests/test_views.py +++ b/lms/djangoapps/certificates/apis/v0/tests/test_views.py @@ -35,8 +35,11 @@ class CertificatesRestApiTest(SharedModuleStoreTestCase, APITestCase): display_name='Verified Course' ) - @freeze_time(now) def setUp(self): + freezer = freeze_time(self.now) + freezer.start() + self.addCleanup(freezer.stop) + super(CertificatesRestApiTest, self).setUp() self.student = UserFactory.create(password=USER_PASSWORD) diff --git a/lms/djangoapps/certificates/tests/test_api.py b/lms/djangoapps/certificates/tests/test_api.py index 02224efe68..c0291a14db 100644 --- a/lms/djangoapps/certificates/tests/test_api.py +++ b/lms/djangoapps/certificates/tests/test_api.py @@ -326,8 +326,10 @@ class CertificateGetTests(SharedModuleStoreTestCase): now = timezone.now() @classmethod - @freeze_time(now) def setUpClass(cls): + cls.freezer = freeze_time(cls.now) + cls.freezer.start() + super(CertificateGetTests, cls).setUpClass() cls.student = UserFactory() cls.student_no_cert = UserFactory() @@ -365,6 +367,10 @@ class CertificateGetTests(SharedModuleStoreTestCase): verify_uuid=cls.uuid, ) + @classmethod + def tearDownClass(cls): + cls.freezer.stop() + def test_get_certificate_for_user(self): """ Test to get a certificate for a user for a specific course. diff --git a/lms/djangoapps/commerce/tests/__init__.py b/lms/djangoapps/commerce/tests/__init__.py index 922a2b3d85..82df849ba3 100644 --- a/lms/djangoapps/commerce/tests/__init__.py +++ b/lms/djangoapps/commerce/tests/__init__.py @@ -33,39 +33,38 @@ class EdxRestApiClientTest(TestCase): self.user = UserFactory() @httpretty.activate - @freeze_time('2015-7-2') def test_tracking_context(self): """ Ensure the tracking context is set up in the api client correctly and automatically. """ + with freeze_time('2015-7-2'): + # fake an E-Commerce API request. + httpretty.register_uri( + httpretty.POST, + '{}/baskets/1/'.format(settings.ECOMMERCE_API_URL.strip('/')), + status=200, body='{}', + adding_headers={'Content-Type': JSON} + ) - # fake an E-Commerce API request. - httpretty.register_uri( - httpretty.POST, - '{}/baskets/1/'.format(settings.ECOMMERCE_API_URL.strip('/')), - status=200, body='{}', - adding_headers={'Content-Type': JSON} - ) + mock_tracker = mock.Mock() + mock_tracker.resolve_context = mock.Mock(return_value={'client_id': self.TEST_CLIENT_ID, 'ip': '127.0.0.1'}) + with mock.patch('openedx.core.djangoapps.commerce.utils.tracker.get_tracker', return_value=mock_tracker): + ecommerce_api_client(self.user).baskets(1).post() - mock_tracker = mock.Mock() - mock_tracker.resolve_context = mock.Mock(return_value={'client_id': self.TEST_CLIENT_ID, 'ip': '127.0.0.1'}) - with mock.patch('openedx.core.djangoapps.commerce.utils.tracker.get_tracker', return_value=mock_tracker): - ecommerce_api_client(self.user).baskets(1).post() + # Verify the JWT includes the tracking context for the user + actual_header = httpretty.last_request().headers['Authorization'] - # Verify the JWT includes the tracking context for the user - actual_header = httpretty.last_request().headers['Authorization'] - - claims = { - 'tracking_context': { - 'lms_user_id': self.user.id, # pylint: disable=no-member - 'lms_client_id': self.TEST_CLIENT_ID, - 'lms_ip': '127.0.0.1', + claims = { + 'tracking_context': { + 'lms_user_id': self.user.id, # pylint: disable=no-member + 'lms_client_id': self.TEST_CLIENT_ID, + 'lms_ip': '127.0.0.1', + } } - } - expected_jwt = JwtBuilder(self.user).build_token(['email', 'profile'], additional_claims=claims) - expected_header = 'JWT {}'.format(expected_jwt) - self.assertEqual(actual_header, expected_header) + expected_jwt = JwtBuilder(self.user).build_token(['email', 'profile'], additional_claims=claims) + expected_header = 'JWT {}'.format(expected_jwt) + self.assertEqual(actual_header, expected_header) @httpretty.activate def test_client_unicode(self): diff --git a/lms/djangoapps/courseware/tests/test_date_summary.py b/lms/djangoapps/courseware/tests/test_date_summary.py index 16bd1c262a..66974670fa 100644 --- a/lms/djangoapps/courseware/tests/test_date_summary.py +++ b/lms/djangoapps/courseware/tests/test_date_summary.py @@ -7,6 +7,8 @@ from django.core.urlresolvers import reverse from freezegun import freeze_time from nose.plugins.attrib import attr from pytz import utc +from waffle.testutils import override_flag +from openedx.features.course_experience import UNIFIED_COURSE_EXPERIENCE_FLAG from commerce.models import CommerceConfiguration from course_modes.tests.factories import CourseModeFactory @@ -169,56 +171,66 @@ class CourseDateSummaryTest(SharedModuleStoreTestCase): self.setup_course_and_user(**course_options) self.assert_block_types(expected_blocks) - @freeze_time('2015-01-02') def test_todays_date_block(self): """ Helper function to test that today's date block renders correctly and displays the correct time, accounting for daylight savings """ - self.setup_course_and_user() - block = TodaysDate(self.course, self.user) - self.assertTrue(block.is_enabled) - self.assertEqual(block.date, datetime.now(utc)) - self.assertEqual(block.title, 'current_datetime') + with freeze_time('2015-01-02'): + self.setup_course_and_user() + block = TodaysDate(self.course, self.user) + self.assertTrue(block.is_enabled) + self.assertEqual(block.date, datetime.now(utc)) + self.assertEqual(block.title, 'current_datetime') - @freeze_time('2015-01-02') - def test_todays_date_no_timezone(self): - self.setup_course_and_user() - self.client.login(username='mrrobot', password='test') + @ddt.data( + 'info', + 'openedx.course_experience.course_home', + ) + @override_flag(UNIFIED_COURSE_EXPERIENCE_FLAG, active=True) + def test_todays_date_no_timezone(self, url_name): + with freeze_time('2015-01-02'): + self.setup_course_and_user() + self.client.login(username='mrrobot', password='test') - html_elements = [ - '
${course_date.description}
- % endif - % if course_date.link and course_date.link_text: - - ${course_date.link_text} - - % endif -${course_date.description}
+ % endif + % if course_date.link and course_date.link_text: + + ${course_date.link_text} + + % endif +