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 (
)
TESTUSER = object()
TESTUSER = "testuser"
@override_settings(FIELD_OVERRIDE_PROVIDERS=(
......
......@@ -20,7 +20,7 @@ class PersonalOnlineCoursesOverrideProvider(FieldOverrideProvider):
overrides to be made on a per user basis.
"""
def get(self, block, name, default):
poc = get_current_poc(self.user)
poc = get_current_poc()
if poc:
return get_override_for_poc(poc, block, name, default)
return default
......@@ -51,7 +51,7 @@ def poc_context(poc):
_POC_CONTEXT.poc = prev
def get_current_poc(user):
def get_current_poc():
"""
Return the poc that is active for this request.
"""
......
......@@ -237,9 +237,9 @@ def get_all_pocs_for_user(user):
mooc_url: <url to view this MOOC>
}
"""
current_active_poc = get_current_poc(user)
if user.is_anonymous():
return []
current_active_poc = get_current_poc()
memberships = []
for membership in PocMembership.memberships_for_user(user):
course = get_course_by_id(membership.poc.course_id)
......
......@@ -49,17 +49,18 @@ var edx = edx || {};
self = this;
$('#add-all').on('click', function(event) {
event.preventDefault();
this.schedule_apply(self.schedule, show);
self.schedule_apply(self.schedule, self.show);
self.dirty = true;
self.schedule_collection.set(self.schedule);
self.render();
});
},
render: function() {
this.schedule = this.schedule_collection.toJSON();
this.hidden = this.pruned(this.schedule, function(node) {
self.schedule = this.schedule_collection.toJSON();
self.hidden = this.pruned(self.schedule, function(node) {
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});
this.$el.html(schedule_template({chapters: this.showing}));
$('table.poc-schedule .sequential,.vertical').hide();
......@@ -80,8 +81,9 @@ var edx = edx || {};
// Click handler for remove all
$('table.poc-schedule a#remove-all').on('click', function(event) {
event.preventDefault();
this.schedule_apply(self.schedule, hide);
self.schedule_apply(self.schedule, self.hide);
self.dirty = true;
self.schedule_collection.set(self.schedule);
self.render();
});
......@@ -90,7 +92,7 @@ var edx = edx || {};
// Populate chapters select, depopulate others
this.chapter_select.html('')
.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.vertical_select.html('').prop('disabled', true);
$('form#add-unit').show();
......@@ -124,11 +126,11 @@ var edx = edx || {};
this.sequential_select.on('change', function(event) {
var sequential_location = self.sequential_select.val();
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);
self.vertical_select.html('')
.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.set_datetime('start', sequential.start);
self.set_datetime('due', sequential.due);
......@@ -141,9 +143,9 @@ var edx = edx || {};
this.vertical_select.on('change', function(event) {
var vertical_location = self.vertical_select.val();
if (vertical_location !== 'all') {
var chapter = chapter_select.val(),
var chapter = self.chapter_select.val(),
sequential = self.sequential_select.val();
vertical = self.find_unit(
var vertical = self.find_unit(
self.hidden, chapter, sequential, vertical_location);
self.set_datetime('start', vertical.start);
self.set_datetime('due', vertical.due);
......@@ -162,11 +164,12 @@ var edx = edx || {};
vertical == 'all' ? null: vertical),
start = self.get_datetime('start'),
due = self.get_datetime('due');
units.map(show);
unit = units[units.length - 1]
self.schedule_apply([unit], show);
if (start) unit.start = start;
if (due) unit.due = due;
units.map(self.show);
var unit = units[units.length - 1]
self.schedule_apply([unit], self.show);
if (unit !== undefined && start) unit.start = start;
if (unit !== undefined && due) unit.due = due;
self.schedule_collection.set(self.schedule);
self.dirty = true;
self.render();
});
......@@ -177,6 +180,7 @@ var edx = edx || {};
path = row.data('location').split(' '),
unit = self.find_unit(self.schedule, path[0], path[1], path[2]);
self.schedule_apply([unit], self.hide);
self.schedule_collection.set(self.schedule);
self.dirty = true;
self.render();
});
......@@ -197,6 +201,7 @@ var edx = edx || {};
},
save: function() {
self.schedule_collection.set(self.schedule);
var button = $('#dirty-schedule #save-changes');
button.prop('disabled', true).text(gettext("Saving")+'...');
......@@ -204,9 +209,8 @@ var edx = edx || {};
url: save_url,
type: 'POST',
contentType: 'application/json',
data: JSON.stringify(this.schedule),
data: JSON.stringify(self.schedule),
success: function(data, textStatus, jqXHR) {
self.schedule = data.schedule;
self.dirty = false;
self.render();
button.prop('disabled', false).text(gettext("Save changes"));
......@@ -220,16 +224,21 @@ var edx = edx || {};
$('#ajax-error').show();
$('#dirty-schedule').hide();
$('form#add-unit select,input,button').prop('disabled', true);
button.prop('disabled', false).text(gettext("Save changes"));
}
});
},
hide: function(unit) {
if (unit !== undefined) {
unit.hidden = true;
}
},
show: function(unit) {
if (unit !== undefined) {
unit.hidden = false;
}
},
get_datetime: function(which) {
......@@ -259,7 +268,7 @@ var edx = edx || {};
schedule_apply: function(nodes, f) {
nodes.map(function(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 || {};
alert('Please enter a valid time');
return;
}
unit[what] = date + ' ' + time;
if (what == 'start') {
unit.start = date + ' ' + time;
} else {
unit.due = date + ' ' + time;
}
modal.find('.close-modal').click();
self.dirty = true;
self.schedule_collection.set(self.schedule);
self.render();
});
}
......@@ -374,116 +388,7 @@ var edx = edx || {};
});
edx.pocs.schedule.XScheduleView = Backbone.View.extend({
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);
})(jQuery, _, Backbone, gettext);
......
......@@ -53,7 +53,7 @@ site_status_msg = get_site_status_msg(course_id)
<%
display_name = course.display_name_with_default
if settings.FEATURES.get('PERSONAL_ONLINE_COURSES', False):
poc = get_current_poc(user)
poc = get_current_poc()
if poc:
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