Merge pull request #13837 from edx/release

Release to master
This commit is contained in:
Ned Batchelder
2016-10-26 05:28:04 -04:00
committed by GitHub
10 changed files with 58 additions and 28 deletions

View File

@@ -95,7 +95,7 @@
// end of Annotation tool files
// externally hosted files
mathjax: '//cdn.mathjax.org/mathjax/2.6-latest/MathJax.js?config=TeX-MML-AM_SVG&delayStartupUntil=configured', // eslint-disable-line max-len
mathjax: '//cdn.mathjax.org/mathjax/2.7-latest/MathJax.js?config=TeX-MML-AM_SVG&delayStartupUntil=configured', // eslint-disable-line max-len
'youtube': [
// youtube URL does not end in '.js'. We add '?noext' to the path so
// that require.js adds the '.js' to the query component of the URL,

View File

@@ -55,7 +55,7 @@
'domReady': 'xmodule_js/common_static/js/vendor/domReady',
'URI': 'xmodule_js/common_static/js/vendor/URI.min',
'mock-ajax': 'xmodule_js/common_static/js/vendor/mock-ajax',
mathjax: '//cdn.mathjax.org/mathjax/2.6-latest/MathJax.js?config=TeX-MML-AM_SVG&delayStartupUntil=configured', // eslint-disable-line max-len
mathjax: '//cdn.mathjax.org/mathjax/2.7-latest/MathJax.js?config=TeX-MML-AM_SVG&delayStartupUntil=configured', // eslint-disable-line max-len
'youtube': '//www.youtube.com/player_api?noext',
'coffee/src/ajax_prefix': 'xmodule_js/common_static/coffee/src/ajax_prefix',
'js/spec/test_utils': 'js/spec/test_utils'

View File

@@ -48,7 +48,7 @@
'draggabilly': 'xmodule_js/common_static/js/vendor/draggabilly',
'domReady': 'xmodule_js/common_static/js/vendor/domReady',
'URI': 'xmodule_js/common_static/js/vendor/URI.min',
mathjax: '//cdn.mathjax.org/mathjax/2.6-latest/MathJax.js?config=TeX-MML-AM_SVG&delayStartupUntil=configured', // eslint-disable-line max-len
mathjax: '//cdn.mathjax.org/mathjax/2.7-latest/MathJax.js?config=TeX-MML-AM_SVG&delayStartupUntil=configured', // eslint-disable-line max-len
'youtube': '//www.youtube.com/player_api?noext',
'coffee/src/ajax_prefix': 'xmodule_js/common_static/coffee/src/ajax_prefix'
},

View File

@@ -975,7 +975,7 @@ div.problem .action {
}
.submit {
@include margin-right($baseline / 2);
float: left;
@include float(left);
}
}

View File

@@ -42,6 +42,6 @@ if (typeof MathJax === 'undefined') {
});
};
};
vendorScript.src = 'https://cdn.mathjax.org/mathjax/2.6-latest/MathJax.js?config=TeX-MML-AM_SVG';
vendorScript.src = 'https://cdn.mathjax.org/mathjax/2.7-latest/MathJax.js?config=TeX-MML-AM_SVG';
document.body.appendChild(vendorScript);
}

View File

@@ -76,4 +76,4 @@
<!-- This must appear after all mathjax-config blocks, so it is after the imports from the other templates.
It can't be run through static.url because MathJax uses crazy url introspection to do lazy loading of
MathJax extension libraries -->
<script type="text/javascript" src="https://cdn.mathjax.org/mathjax/2.6-latest/MathJax.js?config=TeX-MML-AM_SVG"></script>
<script type="text/javascript" src="https://cdn.mathjax.org/mathjax/2.7-latest/MathJax.js?config=TeX-MML-AM_SVG"></script>

View File

@@ -6,7 +6,7 @@ Teams pages.
from common.test.acceptance.pages.lms.course_page import CoursePage
from common.test.acceptance.pages.lms.discussion import InlineDiscussionPage
from common.test.acceptance.pages.common.paging import PaginatedUIMixin
from common.test.acceptance.pages.common.utils import confirm_prompt
from common.test.acceptance.pages.common.utils import confirm_prompt, click_css
from common.test.acceptance.pages.lms.fields import FieldsMixin
@@ -502,7 +502,7 @@ class TeamPage(CoursePage, PaginatedUIMixin, BreadcrumbsMixin):
def click_leave_team_link(self, remaining_members=0, cancel=False):
""" Click on Leave Team link"""
self.q(css='.leave-team-link').first.click()
click_css(self, '.leave-team-link', require_notification=False)
confirm_prompt(self, cancel, require_notification=False)
if cancel is False:

View File

@@ -1042,8 +1042,21 @@ class CreateTeamTest(TeamFormActions):
Then I should see the error message and highlighted fields.
"""
self.verify_and_navigate_to_create_team_page()
self.team_management_page.submit_form()
# `submit_form` clicks on a button, but that button doesn't always
# have the click event handler registered on it in time. That's why
# this test is flaky. Unfortunately, I don't know of a straightforward
# way to write something that waits for that event handler to be bound
# to the button element. So I used time.sleep as well, even though
# the bok choy docs explicitly ask us not to:
# http://bok-choy.readthedocs.io/en/latest/guidelines.html
# Sorry! For the story to address this anti-pattern, see TNL-5820
time.sleep(0.5)
self.team_management_page.submit_form()
self.team_management_page.wait_for(
lambda: self.team_management_page.validation_message_text,
"Validation message text never loaded."
)
self.assertEqual(
self.team_management_page.validation_message_text,
'Check the highlighted fields below and try again.'
@@ -1150,6 +1163,13 @@ class CreateTeamTest(TeamFormActions):
self.assertTrue(self.browse_teams_page.get_pagination_header_text().startswith('Showing 0 out of 0 total'))
self.verify_and_navigate_to_create_team_page()
# We add a sleep here to allow time for the click event handler to bind
# to the cancel button. Using time.sleep in bok-choy tests is,
# generally, an anti-pattern. So don't copy this :).
# For the story to address this anti-pattern, see TNL-5820
time.sleep(0.5)
self.team_management_page.cancel_team()
self.assertTrue(self.browse_teams_page.is_browser_on_page())
@@ -1940,6 +1960,13 @@ class TeamPageTest(TeamsTabBase):
}
]
with self.assert_events_match_during(event_filter=self.only_team_events, expected_events=expected_events):
# I think we're seeing the same problem that we're seeing in
# CreateTeamTest.test_user_can_see_error_message_for_missing_data.
# We click on the "leave team" link after it's loaded, but before
# its JavaScript event handler is added. Adding this sleep gives
# enough time for that event handler to bind to the link. Sorry!
# For the story to address this anti-pattern, see TNL-5820
time.sleep(0.5)
self.team_page.click_leave_team_link()
self.assert_team_details(num_members=0, is_member=False)
self.assertTrue(self.team_page.join_team_button_present)

View File

@@ -12,7 +12,11 @@ such that the value can be defined later than this assignment (file load order).
(function() {
'use strict';
var AuthListWidget, BatchEnrollment, BetaTesterBulkAddition,
MemberListWidget, Membership, emailStudents, plantTimeout, statusAjaxError;
MemberListWidget, Membership, emailStudents, plantTimeout, statusAjaxError,
/* eslint-disable */
__hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
/* eslint-enable */
plantTimeout = function() {
return window.InstructorDashboard.util.plantTimeout.apply(this, arguments);
@@ -38,10 +42,8 @@ such that the value can be defined later than this assignment (file load order).
add_btn_label: 'Add Member',
add_handler: function() {}
});
templateHtml = $('#member-list-widget-template').html();
edx.HtmlUtils.setHtml(
this.$container, window.Mustache.render(templateHtml, edx.HtmlUtils.HTML(memberListParams))
);
templateHtml = window.Mustache.render($('#member-list-widget-template').html(), memberListParams);
edx.HtmlUtils.setHtml(this.$container, edx.HtmlUtils.HTML(templateHtml));
this.$('input[type="button"].add').click(function() {
condition = typeof memberListParams.add_handler === 'function';
return condition ? memberListParams.add_handler(memberlistwidget.$('.add-field').val()) : undefined;
@@ -64,7 +66,7 @@ such that the value can be defined later than this assignment (file load order).
item = rowArray[i];
$td = $('<td>');
if (item instanceof jQuery) {
edx.HtmlUtils.append($td, item);
edx.HtmlUtils.append($td, edx.HtmlUtils.HTML(item));
} else {
$td.text(item);
}
@@ -86,13 +88,14 @@ such that the value can be defined later than this assignment (file load order).
return memberListWidget;
}());
AuthListWidget = (function() {
function authListWidget($container, rolename, $errorSection) {
AuthListWidget = (function(_super) {
__extends(AuthListWidget, _super); // eslint-disable-line no-use-before-define
function AuthListWidget($container, rolename, $errorSection) { // eslint-disable-line no-shadow
var msg,
authlistwidget = this;
this.rolename = rolename;
this.$errorSection = $errorSection;
authListWidget.super.constructor.call(this, $container, {
AuthListWidget.__super__.constructor.call(this, $container, { // eslint-disable-line no-underscore-dangle
title: $container.data('display-name'),
info: $container.data('info-text'),
labels: [gettext('Username'), gettext('Email'), gettext('Revoke access')],
@@ -112,13 +115,13 @@ such that the value can be defined later than this assignment (file load order).
this.reload_list();
}
authListWidget.prototype.re_view = function() {
AuthListWidget.prototype.re_view = function() {
this.clear_errors();
this.clear_input();
return this.reload_list();
};
authListWidget.prototype.add_handler = function(input) {
AuthListWidget.prototype.add_handler = function(input) {
var authlistwidgetaddhandler = this;
if ((input != null) && input !== '') {
return this.modify_member_access(input, 'allow', function(error) {
@@ -134,7 +137,7 @@ such that the value can be defined later than this assignment (file load order).
}
};
authListWidget.prototype.reload_list = function() {
AuthListWidget.prototype.reload_list = function() {
var authlistwidgetreloadlist = this;
return this.get_member_list(function(error, memberList) {
if (error !== null) {
@@ -163,19 +166,19 @@ such that the value can be defined later than this assignment (file load order).
});
};
authListWidget.prototype.clear_errors = function() {
AuthListWidget.prototype.clear_errors = function() {
var ref, result;
result = (this.$error_section) != null ? ref.text('') : undefined;
return result;
};
authListWidget.prototype.show_errors = function(msg) {
AuthListWidget.prototype.show_errors = function(msg) {
var ref, result;
result = (this.$error_section) != null ? ref.text(msg) : undefined;
return result;
};
authListWidget.prototype.get_member_list = function(cb) {
AuthListWidget.prototype.get_member_list = function(cb) {
var authlistwidgetgetmemberlist = this;
return $.ajax({
type: 'POST',
@@ -190,7 +193,7 @@ such that the value can be defined later than this assignment (file load order).
});
};
authListWidget.prototype.modify_member_access = function(uniqueStudentIdentifier, action, cb) {
AuthListWidget.prototype.modify_member_access = function(uniqueStudentIdentifier, action, cb) {
var authlistwidgetmemberaccess = this;
return $.ajax({
type: 'POST',
@@ -210,7 +213,7 @@ such that the value can be defined later than this assignment (file load order).
});
};
authListWidget.prototype.member_response = function(data) {
AuthListWidget.prototype.member_response = function(data) {
var msg;
this.clear_errors();
this.clear_input();
@@ -233,7 +236,7 @@ such that the value can be defined later than this assignment (file load order).
}
};
return authListWidget;
return AuthListWidget;
}(MemberListWidget));
this.AutoEnrollmentViaCsv = (function() {

View File

@@ -51,7 +51,7 @@
'squire': 'xmodule_js/common_static/js/vendor/Squire',
'jasmine-imagediff': 'xmodule_js/common_static/js/vendor/jasmine-imagediff',
'domReady': 'xmodule_js/common_static/js/vendor/domReady',
mathjax: '//cdn.mathjax.org/mathjax/2.6-latest/MathJax.js?config=TeX-MML-AM_SVG&delayStartupUntil=configured', // eslint-disable-line max-len
mathjax: '//cdn.mathjax.org/mathjax/2.7-latest/MathJax.js?config=TeX-MML-AM_SVG&delayStartupUntil=configured', // eslint-disable-line max-len
'youtube': '//www.youtube.com/player_api?noext',
'coffee/src/ajax_prefix': 'xmodule_js/common_static/coffee/src/ajax_prefix',
'js/instructor_dashboard/student_admin': 'js/instructor_dashboard/student_admin',