Commit 97748e56 by Carlos de la Guardia Committed by cewing

MIT: CCX. Fix test failures

Django double-importing overwrites the TESTUSER object, invalidating identity comparisons.  Use a string instead to avoid the problem.

The get_current_poc function operates using a threadlocal and so no longer requires the user as an argument
parent 0b184881
...@@ -15,7 +15,7 @@ from ..field_overrides import ( ...@@ -15,7 +15,7 @@ from ..field_overrides import (
) )
TESTUSER = object() TESTUSER = "testuser"
@override_settings(FIELD_OVERRIDE_PROVIDERS=( @override_settings(FIELD_OVERRIDE_PROVIDERS=(
......
...@@ -20,7 +20,7 @@ class PersonalOnlineCoursesOverrideProvider(FieldOverrideProvider): ...@@ -20,7 +20,7 @@ class PersonalOnlineCoursesOverrideProvider(FieldOverrideProvider):
overrides to be made on a per user basis. overrides to be made on a per user basis.
""" """
def get(self, block, name, default): def get(self, block, name, default):
poc = get_current_poc(self.user) poc = get_current_poc()
if poc: if poc:
return get_override_for_poc(poc, block, name, default) return get_override_for_poc(poc, block, name, default)
return default return default
...@@ -51,7 +51,7 @@ def poc_context(poc): ...@@ -51,7 +51,7 @@ def poc_context(poc):
_POC_CONTEXT.poc = prev _POC_CONTEXT.poc = prev
def get_current_poc(user): def get_current_poc():
""" """
Return the poc that is active for this request. Return the poc that is active for this request.
""" """
......
...@@ -237,9 +237,9 @@ def get_all_pocs_for_user(user): ...@@ -237,9 +237,9 @@ def get_all_pocs_for_user(user):
mooc_url: <url to view this MOOC> mooc_url: <url to view this MOOC>
} }
""" """
current_active_poc = get_current_poc(user)
if user.is_anonymous(): if user.is_anonymous():
return [] return []
current_active_poc = get_current_poc()
memberships = [] memberships = []
for membership in PocMembership.memberships_for_user(user): for membership in PocMembership.memberships_for_user(user):
course = get_course_by_id(membership.poc.course_id) course = get_course_by_id(membership.poc.course_id)
......
...@@ -49,17 +49,18 @@ var edx = edx || {}; ...@@ -49,17 +49,18 @@ var edx = edx || {};
self = this; self = this;
$('#add-all').on('click', function(event) { $('#add-all').on('click', function(event) {
event.preventDefault(); event.preventDefault();
this.schedule_apply(self.schedule, show); self.schedule_apply(self.schedule, self.show);
self.dirty = true; self.dirty = true;
self.schedule_collection.set(self.schedule);
self.render(); self.render();
}); });
}, },
render: function() { render: function() {
this.schedule = this.schedule_collection.toJSON(); self.schedule = this.schedule_collection.toJSON();
this.hidden = this.pruned(this.schedule, function(node) { self.hidden = this.pruned(self.schedule, function(node) {
return node.hidden || node.category !== 'vertical'}); return node.hidden || node.category !== 'vertical'});
this.showing = this.pruned(this.schedule, function(node) { this.showing = this.pruned(self.schedule, function(node) {
return !node.hidden}); return !node.hidden});
this.$el.html(schedule_template({chapters: this.showing})); this.$el.html(schedule_template({chapters: this.showing}));
$('table.poc-schedule .sequential,.vertical').hide(); $('table.poc-schedule .sequential,.vertical').hide();
...@@ -80,8 +81,9 @@ var edx = edx || {}; ...@@ -80,8 +81,9 @@ var edx = edx || {};
// Click handler for remove all // Click handler for remove all
$('table.poc-schedule a#remove-all').on('click', function(event) { $('table.poc-schedule a#remove-all').on('click', function(event) {
event.preventDefault(); event.preventDefault();
this.schedule_apply(self.schedule, hide); self.schedule_apply(self.schedule, self.hide);
self.dirty = true; self.dirty = true;
self.schedule_collection.set(self.schedule);
self.render(); self.render();
}); });
...@@ -90,7 +92,7 @@ var edx = edx || {}; ...@@ -90,7 +92,7 @@ var edx = edx || {};
// Populate chapters select, depopulate others // Populate chapters select, depopulate others
this.chapter_select.html('') this.chapter_select.html('')
.append('<option value="none">'+gettext("Select a chapter")+'...</option>') .append('<option value="none">'+gettext("Select a chapter")+'...</option>')
.append(this.schedule_options(this.hidden)); .append(self.schedule_options(this.hidden));
this.sequential_select.html('').prop('disabled', true); this.sequential_select.html('').prop('disabled', true);
this.vertical_select.html('').prop('disabled', true); this.vertical_select.html('').prop('disabled', true);
$('form#add-unit').show(); $('form#add-unit').show();
...@@ -124,11 +126,11 @@ var edx = edx || {}; ...@@ -124,11 +126,11 @@ var edx = edx || {};
this.sequential_select.on('change', function(event) { this.sequential_select.on('change', function(event) {
var sequential_location = self.sequential_select.val(); var sequential_location = self.sequential_select.val();
if (sequential_location !== 'all') { if (sequential_location !== 'all') {
var chapter = self.chapter_select.val(); var chapter = self.chapter_select.val(),
sequential = self.find_unit(self.hidden, chapter, sequential_location); sequential = self.find_unit(self.hidden, chapter, sequential_location);
self.vertical_select.html('') self.vertical_select.html('')
.append('<option value="all">'+gettext("All units")+'</option>') .append('<option value="all">'+gettext("All units")+'</option>')
.append(schedule_options(sequential.children)); .append(self.schedule_options(sequential.children));
self.vertical_select.prop('disabled', false); self.vertical_select.prop('disabled', false);
self.set_datetime('start', sequential.start); self.set_datetime('start', sequential.start);
self.set_datetime('due', sequential.due); self.set_datetime('due', sequential.due);
...@@ -141,9 +143,9 @@ var edx = edx || {}; ...@@ -141,9 +143,9 @@ var edx = edx || {};
this.vertical_select.on('change', function(event) { this.vertical_select.on('change', function(event) {
var vertical_location = self.vertical_select.val(); var vertical_location = self.vertical_select.val();
if (vertical_location !== 'all') { if (vertical_location !== 'all') {
var chapter = chapter_select.val(), var chapter = self.chapter_select.val(),
sequential = self.sequential_select.val(); sequential = self.sequential_select.val();
vertical = self.find_unit( var vertical = self.find_unit(
self.hidden, chapter, sequential, vertical_location); self.hidden, chapter, sequential, vertical_location);
self.set_datetime('start', vertical.start); self.set_datetime('start', vertical.start);
self.set_datetime('due', vertical.due); self.set_datetime('due', vertical.due);
...@@ -162,11 +164,12 @@ var edx = edx || {}; ...@@ -162,11 +164,12 @@ var edx = edx || {};
vertical == 'all' ? null: vertical), vertical == 'all' ? null: vertical),
start = self.get_datetime('start'), start = self.get_datetime('start'),
due = self.get_datetime('due'); due = self.get_datetime('due');
units.map(show); units.map(self.show);
unit = units[units.length - 1] var unit = units[units.length - 1]
self.schedule_apply([unit], show); self.schedule_apply([unit], self.show);
if (start) unit.start = start; if (unit !== undefined && start) unit.start = start;
if (due) unit.due = due; if (unit !== undefined && due) unit.due = due;
self.schedule_collection.set(self.schedule);
self.dirty = true; self.dirty = true;
self.render(); self.render();
}); });
...@@ -177,6 +180,7 @@ var edx = edx || {}; ...@@ -177,6 +180,7 @@ var edx = edx || {};
path = row.data('location').split(' '), path = row.data('location').split(' '),
unit = self.find_unit(self.schedule, path[0], path[1], path[2]); unit = self.find_unit(self.schedule, path[0], path[1], path[2]);
self.schedule_apply([unit], self.hide); self.schedule_apply([unit], self.hide);
self.schedule_collection.set(self.schedule);
self.dirty = true; self.dirty = true;
self.render(); self.render();
}); });
...@@ -197,6 +201,7 @@ var edx = edx || {}; ...@@ -197,6 +201,7 @@ var edx = edx || {};
}, },
save: function() { save: function() {
self.schedule_collection.set(self.schedule);
var button = $('#dirty-schedule #save-changes'); var button = $('#dirty-schedule #save-changes');
button.prop('disabled', true).text(gettext("Saving")+'...'); button.prop('disabled', true).text(gettext("Saving")+'...');
...@@ -204,9 +209,8 @@ var edx = edx || {}; ...@@ -204,9 +209,8 @@ var edx = edx || {};
url: save_url, url: save_url,
type: 'POST', type: 'POST',
contentType: 'application/json', contentType: 'application/json',
data: JSON.stringify(this.schedule), data: JSON.stringify(self.schedule),
success: function(data, textStatus, jqXHR) { success: function(data, textStatus, jqXHR) {
self.schedule = data.schedule;
self.dirty = false; self.dirty = false;
self.render(); self.render();
button.prop('disabled', false).text(gettext("Save changes")); button.prop('disabled', false).text(gettext("Save changes"));
...@@ -220,16 +224,21 @@ var edx = edx || {}; ...@@ -220,16 +224,21 @@ var edx = edx || {};
$('#ajax-error').show(); $('#ajax-error').show();
$('#dirty-schedule').hide(); $('#dirty-schedule').hide();
$('form#add-unit select,input,button').prop('disabled', true); $('form#add-unit select,input,button').prop('disabled', true);
button.prop('disabled', false).text(gettext("Save changes"));
} }
}); });
}, },
hide: function(unit) { hide: function(unit) {
unit.hidden = true; if (unit !== undefined) {
unit.hidden = true;
}
}, },
show: function(unit) { show: function(unit) {
unit.hidden = false; if (unit !== undefined) {
unit.hidden = false;
}
}, },
get_datetime: function(which) { get_datetime: function(which) {
...@@ -259,7 +268,7 @@ var edx = edx || {}; ...@@ -259,7 +268,7 @@ var edx = edx || {};
schedule_apply: function(nodes, f) { schedule_apply: function(nodes, f) {
nodes.map(function(node) { nodes.map(function(node) {
f(node); f(node);
if (node.children !== undefined) self.schedule_apply(node.children, f); if (node !== undefined && node.children !== undefined) self.schedule_apply(node.children, f);
}); });
}, },
...@@ -331,9 +340,14 @@ var edx = edx || {}; ...@@ -331,9 +340,14 @@ var edx = edx || {};
alert('Please enter a valid time'); alert('Please enter a valid time');
return; return;
} }
unit[what] = date + ' ' + time; if (what == 'start') {
unit.start = date + ' ' + time;
} else {
unit.due = date + ' ' + time;
}
modal.find('.close-modal').click(); modal.find('.close-modal').click();
self.dirty = true; self.dirty = true;
self.schedule_collection.set(self.schedule);
self.render(); self.render();
}); });
} }
...@@ -374,116 +388,7 @@ var edx = edx || {}; ...@@ -374,116 +388,7 @@ var edx = edx || {};
}); });
edx.pocs.schedule.XScheduleView = Backbone.View.extend({ })(jQuery, _, Backbone, gettext);
events: {
'submit': 'submit',
'change': 'change'
},
initialize: function() {
_.bindAll(this, 'render', 'change', 'submit', 'invalidProfile', 'invalidPreference', 'error', 'sync', 'clearStatus');
this.scheduleModel = new edx.pocs.schedule.ProfileModel();
this.scheduleModel.on('invalid', this.invalidProfile);
this.scheduleModel.on('error', this.error);
this.scheduleModel.on('sync', this.sync);
this.preferencesModel = new edx.pocs.schedule.PreferencesModel();
this.preferencesModel.on('invalid', this.invalidPreference);
this.preferencesModel.on('error', this.error);
this.preferencesModel.on('sync', this.sync);
},
render: function() {
this.$el.html(_.template($('#schedule-tpl').html()));
this.$nameField = $('#schedule-name', this.$el);
this.$nameStatus = $('#schedule-name-status', this.$el);
this.$languageChoices = $('#preference-language', this.$el);
this.$languageStatus = $('#preference-language-status', this.$el);
this.$submitStatus = $('#submit-status', this.$el);
var self = this;
$.getJSON('preferences/languages')
.done(function(json) {
/** Asynchronously populate the language choices. */
self.$languageChoices.html(_.template($('#languages-tpl').html(), {languageInfo: json}));
})
.fail(function() {
self.$languageStatus
.addClass('language-list-error')
.text(gettext("We couldn't populate the list of language choices."));
});
return this;
},
change: function() {
this.scheduleModel.set({
fullName: this.$nameField.val()
});
this.preferencesModel.set({
language: this.$languageChoices.val()
});
},
submit: function(event) {
event.preventDefault();
this.clearStatus();
this.scheduleModel.save();
this.preferencesModel.save();
},
invalidProfile: function(model) {
var errors = model.validationError;
if (errors.hasOwnProperty('fullName')) {
this.$nameStatus
.addClass('validation-error')
.text(errors.fullName);
}
},
invalidPreference: function(model) {
var errors = model.validationError;
if (errors.hasOwnProperty('language')) {
this.$languageStatus
.addClass('validation-error')
.text(errors.language);
}
},
error: function(error) {
this.$submitStatus
.addClass('error')
.text(error);
},
sync: function() {
this.$submitStatus
.addClass('success')
.text(gettext("Saved"));
},
clearStatus: function() {
this.$nameStatus
.removeClass('validation-error')
.text("");
this.$languageStatus
.removeClass('validation-error')
.text("");
this.$submitStatus
.removeClass('error')
.text("");
}
});
})(jQuery, _, Backbone, gettext);
......
...@@ -53,7 +53,7 @@ site_status_msg = get_site_status_msg(course_id) ...@@ -53,7 +53,7 @@ site_status_msg = get_site_status_msg(course_id)
<% <%
display_name = course.display_name_with_default display_name = course.display_name_with_default
if settings.FEATURES.get('PERSONAL_ONLINE_COURSES', False): if settings.FEATURES.get('PERSONAL_ONLINE_COURSES', False):
poc = get_current_poc(user) poc = get_current_poc()
if poc: if poc:
display_name = poc.display_name display_name = poc.display_name
%> %>
......
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