Skip to content
Snippets Groups Projects
Commit dbb8e475 authored by Douglas Hall's avatar Douglas Hall
Browse files

Merge pull request #4 from edx/douglashall/TNL-4046/fix_due_date_comparison

TNL-4046 Fix due date comparison bug
parents e19090cf 21213ed8
No related branches found
No related tags found
No related merge requests found
...@@ -56,10 +56,11 @@ import re ...@@ -56,10 +56,11 @@ import re
import json import json
import urllib import urllib
from datetime import datetime
from collections import namedtuple from collections import namedtuple
from webob import Response from webob import Response
from django.utils import timezone
from xblock.core import String, Scope, List, XBlock from xblock.core import String, Scope, List, XBlock
from xblock.fields import Boolean, Float, Integer from xblock.fields import Boolean, Float, Integer
from xblock.fragment import Fragment from xblock.fragment import Fragment
...@@ -597,7 +598,7 @@ class LtiConsumerXBlock(StudioEditableXBlockMixin, XBlock): ...@@ -597,7 +598,7 @@ class LtiConsumerXBlock(StudioEditableXBlockMixin, XBlock):
close_date = due_date + self.graceperiod # pylint: disable=no-member close_date = due_date + self.graceperiod # pylint: disable=no-member
else: else:
close_date = due_date close_date = due_date
return close_date is not None and datetime.utcnow() > close_date return close_date is not None and timezone.now() > close_date
def student_view(self, context): def student_view(self, context):
""" """
......
...@@ -4,9 +4,11 @@ Unit tests for LtiConsumerXBlock ...@@ -4,9 +4,11 @@ Unit tests for LtiConsumerXBlock
import unittest import unittest
from datetime import datetime, timedelta from datetime import timedelta
from mock import Mock, PropertyMock, patch from mock import Mock, PropertyMock, patch
from django.utils import timezone
from lti_consumer.tests.unit.test_utils import FAKE_USER_ID, make_xblock, make_request from lti_consumer.tests.unit.test_utils import FAKE_USER_ID, make_xblock, make_request
from lti_consumer.lti_consumer import LtiConsumerXBlock, parse_handler_suffix from lti_consumer.lti_consumer import LtiConsumerXBlock, parse_handler_suffix
...@@ -206,7 +208,7 @@ class TestProperties(TestLtiConsumerXBlock): ...@@ -206,7 +208,7 @@ class TestProperties(TestLtiConsumerXBlock):
""" """
Test `is_past_due` when a graceperiod has been defined Test `is_past_due` when a graceperiod has been defined
""" """
now = datetime.utcnow() now = timezone.now()
self.xblock.graceperiod = timedelta(days=1) self.xblock.graceperiod = timedelta(days=1)
self.xblock.due = now self.xblock.due = now
...@@ -219,7 +221,7 @@ class TestProperties(TestLtiConsumerXBlock): ...@@ -219,7 +221,7 @@ class TestProperties(TestLtiConsumerXBlock):
""" """
Test `is_past_due` when no graceperiod has been defined Test `is_past_due` when no graceperiod has been defined
""" """
now = datetime.utcnow() now = timezone.now()
self.xblock.graceperiod = None self.xblock.graceperiod = None
self.xblock.due = now - timedelta(days=1) self.xblock.due = now - timedelta(days=1)
...@@ -228,6 +230,19 @@ class TestProperties(TestLtiConsumerXBlock): ...@@ -228,6 +230,19 @@ class TestProperties(TestLtiConsumerXBlock):
self.xblock.due = now + timedelta(days=1) self.xblock.due = now + timedelta(days=1)
self.assertFalse(self.xblock.is_past_due) self.assertFalse(self.xblock.is_past_due)
@patch('lti_consumer.lti_consumer.timezone.now')
def test_is_past_due_timezone_now_called(self, mock_timezone_now):
"""
Test `is_past_due` calls django.utils.timezone.now to get current datetime
"""
now = timezone.now()
self.xblock.graceperiod = None
self.xblock.due = now
mock_timezone_now.return_value = now
__ = self.xblock.is_past_due
self.assertTrue(mock_timezone_now.called)
class TestStudentView(TestLtiConsumerXBlock): class TestStudentView(TestLtiConsumerXBlock):
""" """
......
...@@ -22,7 +22,7 @@ def package_data(pkg, roots): ...@@ -22,7 +22,7 @@ def package_data(pkg, roots):
setup( setup(
name='lti_consumer-xblock', name='lti_consumer-xblock',
version='1.0.1', version='1.0.2',
description='This XBlock implements the consumer side of the LTI specification.', description='This XBlock implements the consumer side of the LTI specification.',
packages=[ packages=[
'lti_consumer', 'lti_consumer',
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment