Commit 1317e97d by Giulio Gratta

Merge remote-tracking branch 'origin/master' into feature/giulio/reset-master-stanford

parents f53c4b44 42a55faf
...@@ -527,12 +527,12 @@ def _do_create_account(post_vars): ...@@ -527,12 +527,12 @@ def _do_create_account(post_vars):
js = {'success': False} js = {'success': False}
# Figure out the cause of the integrity error # Figure out the cause of the integrity error
if len(User.objects.filter(username=post_vars['username'])) > 0: if len(User.objects.filter(username=post_vars['username'])) > 0:
js['value'] = "An account with this username already exists." js['value'] = "An account with the Public Username '" + post_vars['username'] + "' already exists."
js['field'] = 'username' js['field'] = 'username'
return HttpResponse(json.dumps(js)) return HttpResponse(json.dumps(js))
if len(User.objects.filter(email=post_vars['email'])) > 0: if len(User.objects.filter(email=post_vars['email'])) > 0:
js['value'] = "An account with this e-mail already exists." js['value'] = "An account with the Email '" + post_vars['email'] + "' already exists."
js['field'] = 'email' js['field'] = 'email'
return HttpResponse(json.dumps(js)) return HttpResponse(json.dumps(js))
......
--- ---
metadata: metadata:
display_name: default display_name: Video Alpha 1
data_dir: a_made_up_name version: 1
data: | data: |
<videoalpha youtube="0.75:JMD_ifUUfsU,1.0:OEoXaMPEzfM,1.25:AKqURZnYqpk,1.50:DYpADpL7jAY"/> <videoalpha show_captions="true" sub="name_of_file" youtube="0.75:JMD_ifUUfsU,1.0:OEoXaMPEzfM,1.25:AKqURZnYqpk,1.50:DYpADpL7jAY" >
<source src="https://s3.amazonaws.com/edx-course-videos/edx-intro/edX-FA12-cware-1_100.mp4"/>
<source src="https://s3.amazonaws.com/edx-course-videos/edx-intro/edX-FA12-cware-1_100.webm"/>
<source src="https://s3.amazonaws.com/edx-course-videos/edx-intro/edX-FA12-cware-1_100.ogv"/>
</videoalpha>
children: [] children: []
...@@ -4,10 +4,12 @@ ...@@ -4,10 +4,12 @@
import json import json
import unittest import unittest
from lxml import etree
from xmodule.poll_module import PollDescriptor from xmodule.poll_module import PollDescriptor
from xmodule.conditional_module import ConditionalDescriptor from xmodule.conditional_module import ConditionalDescriptor
from xmodule.word_cloud_module import WordCloudDescriptor from xmodule.word_cloud_module import WordCloudDescriptor
from xmodule.videoalpha_module import VideoAlphaDescriptor
class PostData: class PostData:
"""Class which emulate postdata.""" """Class which emulate postdata."""
...@@ -117,3 +119,33 @@ class WordCloudModuleTest(LogicTest): ...@@ -117,3 +119,33 @@ class WordCloudModuleTest(LogicTest):
) )
self.assertEqual(100.0, sum(i['percent'] for i in response['top_words']) ) self.assertEqual(100.0, sum(i['percent'] for i in response['top_words']) )
class VideoAlphaModuleTest(LogicTest):
descriptor_class = VideoAlphaDescriptor
raw_model_data = {
'data': '<videoalpha />'
}
def test_get_timeframe_no_parameters(self):
xmltree = etree.fromstring('<videoalpha>test</videoalpha>')
output = self.xmodule._get_timeframe(xmltree)
self.assertEqual(output, ('', ''))
def test_get_timeframe_with_one_parameter(self):
xmltree = etree.fromstring(
'<videoalpha start_time="00:04:07">test</videoalpha>'
)
output = self.xmodule._get_timeframe(xmltree)
self.assertEqual(output, (247, ''))
def test_get_timeframe_with_two_parameters(self):
xmltree = etree.fromstring(
'''<videoalpha
start_time="00:04:07"
end_time="13:04:39"
>test</videoalpha>'''
)
output = self.xmodule._get_timeframe(xmltree)
self.assertEqual(output, (247, 47079))
...@@ -93,7 +93,7 @@ class VideoAlphaModule(VideoAlphaFields, XModule): ...@@ -93,7 +93,7 @@ class VideoAlphaModule(VideoAlphaFields, XModule):
return result return result
def _get_timeframe(self, xmltree): def _get_timeframe(self, xmltree):
""" Converts 'from' and 'to' parameters in video tag to seconds. """ Converts 'start_time' and 'end_time' parameters in video tag to seconds.
If there are no parameters, returns empty string. """ If there are no parameters, returns empty string. """
def parse_time(s): def parse_time(s):
...@@ -103,11 +103,13 @@ class VideoAlphaModule(VideoAlphaFields, XModule): ...@@ -103,11 +103,13 @@ class VideoAlphaModule(VideoAlphaFields, XModule):
return '' return ''
else: else:
x = time.strptime(s, '%H:%M:%S') x = time.strptime(s, '%H:%M:%S')
return datetime.timedelta(hours=x.tm_hour, return datetime.timedelta(
minutes=x.tm_min, hours=x.tm_hour,
seconds=x.tm_sec).total_seconds() minutes=x.tm_min,
seconds=x.tm_sec
).total_seconds()
return parse_time(xmltree.get('from')), parse_time(xmltree.get('to')) return parse_time(xmltree.get('start_time')), parse_time(xmltree.get('end_time'))
def handle_ajax(self, dispatch, get): def handle_ajax(self, dispatch, get):
"""Handle ajax calls to this video. """Handle ajax calls to this video.
......
...@@ -13,8 +13,8 @@ Feature: Register for a course ...@@ -13,8 +13,8 @@ Feature: Register for a course
Scenario: I can unregister for a course Scenario: I can unregister for a course
Given I am registered for the course "6.002x" Given I am registered for the course "6.002x"
And I visit the dashboard And I visit the dashboard
When I click the link with the text "Unregister" Then I should see the course numbered "6.002x" in my dashboard
And I press the "Unregister" button in the Unenroll dialog When I unregister for the course numbered "6.002x"
Then All dialogs should be closed Then I should be on the dashboard page
And I should be on the dashboard page
And I should see "Looks like you haven't registered for any courses yet." somewhere in the page And I should see "Looks like you haven't registered for any courses yet." somewhere in the page
And I should NOT see the course numbered "6.002x" in my dashboard
...@@ -25,8 +25,15 @@ def i_should_see_that_course_in_my_dashboard(step, course): ...@@ -25,8 +25,15 @@ def i_should_see_that_course_in_my_dashboard(step, course):
assert world.is_css_present(course_link_css) assert world.is_css_present(course_link_css)
@step(u'I press the "([^"]*)" button in the Unenroll dialog') @step(u'I should NOT see the course numbered "([^"]*)" in my dashboard$')
def i_press_the_button_in_the_unenroll_dialog(step, value): def i_should_not_see_that_course_in_my_dashboard(step, course):
button_css = 'section#unenroll-modal input[value="%s"]' % value course_link_css = 'section.my-courses a[href*="%s"]' % course
assert not world.is_css_present(course_link_css)
@step(u'I unregister for the course numbered "([^"]*)"')
def i_unregister_for_that_course(step, course):
unregister_css = 'section.info a[href*="#unenroll-modal"][data-course-number*="%s"]' % course
world.css_click(unregister_css)
button_css = 'section#unenroll-modal input[value="Unregister"]'
world.css_click(button_css) world.css_click(button_css)
assert world.is_css_present('section.container.dashboard')
...@@ -22,10 +22,6 @@ urlpatterns = ('', # nopep8 ...@@ -22,10 +22,6 @@ urlpatterns = ('', # nopep8
url(r'^admin_dashboard$', 'dashboard.views.dashboard'), url(r'^admin_dashboard$', 'dashboard.views.dashboard'),
# Adding to allow debugging issues when prod is mysteriously different from staging
# (specifically missing get parameters in certain cases)
url(r'^debug_request$', 'util.views.debug_request'),
url(r'^change_email$', 'student.views.change_email_request', name="change_email"), url(r'^change_email$', 'student.views.change_email_request', name="change_email"),
url(r'^email_confirm/(?P<key>[^/]*)$', 'student.views.confirm_email_change'), url(r'^email_confirm/(?P<key>[^/]*)$', 'student.views.confirm_email_change'),
url(r'^change_name$', 'student.views.change_name_request', name="change_name"), url(r'^change_name$', 'student.views.change_name_request', name="change_name"),
...@@ -334,6 +330,13 @@ if settings.DEBUG or settings.MITX_FEATURES.get('ENABLE_DJANGO_ADMIN_SITE'): ...@@ -334,6 +330,13 @@ if settings.DEBUG or settings.MITX_FEATURES.get('ENABLE_DJANGO_ADMIN_SITE'):
## Jasmine and admin ## Jasmine and admin
urlpatterns += (url(r'^admin/', include(admin.site.urls)),) urlpatterns += (url(r'^admin/', include(admin.site.urls)),)
if settings.DEBUG:
# Originally added to allow debugging issues when prod is
# mysteriously different from staging (specifically missing get
# parameters in certain cases), but removing from prod because
# it's a security risk.
urlpatterns += (url(r'^debug_request$', 'util.views.debug_request'),)
if settings.MITX_FEATURES.get('AUTH_USE_OPENID'): if settings.MITX_FEATURES.get('AUTH_USE_OPENID'):
urlpatterns += ( urlpatterns += (
url(r'^openid/login/$', 'django_openid_auth.views.login_begin', name='openid-login'), url(r'^openid/login/$', 'django_openid_auth.views.login_begin', name='openid-login'),
......
...@@ -9,4 +9,4 @@ ...@@ -9,4 +9,4 @@
# Our libraries: # Our libraries:
-e git+https://github.com/edx/XBlock.git@2144a25d#egg=XBlock -e git+https://github.com/edx/XBlock.git@2144a25d#egg=XBlock
-e git+https://github.com/edx/codejail.git@72cf791#egg=codejail -e git+https://github.com/edx/codejail.git@874361f#egg=codejail
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment