Commit 6687aa1a by Peter Pinch

Merge pull request #10538 from mitocw/fix/aq/error/validation_on_start_time

Added validations for start and due date in Schedule tab inside CCX coach dashboard
parents b3b1b7e4 3ee5acfc
...@@ -104,23 +104,41 @@ var edx = edx || {}; ...@@ -104,23 +104,41 @@ var edx = edx || {};
// Add unit handler // Add unit handler
$('#add-unit-button').on('click', function(event) { $('#add-unit-button').on('click', function(event) {
event.preventDefault(); event.preventDefault();
var chapter = self.chapter_select.val(), // Default value of time is 00:00.
sequential = self.sequential_select.val(), var start, chapter, sequential, vertical, units, due;
vertical = self.vertical_select.val(), start = self.get_datetime('start');
units = self.find_lineage(self.schedule, chapter = self.chapter_select.val();
sequential = self.sequential_select.val();
vertical = self.vertical_select.val();
units = self.find_lineage(
self.schedule,
chapter, chapter,
sequential === 'all' ? null : sequential, sequential === 'all' ? null : sequential,
vertical === 'all' ? null: vertical), vertical === 'all' ? null : vertical
start = self.get_datetime('start'), );
due = self.get_datetime('due'); due = self.get_datetime('due');
var errorMessage = self.valid_dates(start, due);
if (_.isUndefined(errorMessage)) {
units.map(self.show); units.map(self.show);
var unit = units[units.length - 1]; var unit = units[units.length - 1];
if (unit !== undefined && start) { unit.start = start; } if (!_.isUndefined(unit)) {
if (unit !== undefined && due) { unit.due = due; } if (!_.isNull(start)) {
unit.start = start;
}
if (!_.isNull(due)) {
unit.due = due;
}
}
self.schedule_apply([unit], self.show); self.schedule_apply([unit], self.show);
self.schedule_collection.set(self.schedule); self.schedule_collection.set(self.schedule);
self.dirty = true; self.dirty = true;
self.render(); self.render();
} else {
self.dirty = false;
$('#ccx_schedule_error_message').text(errorMessage);
$('#ajax-error').show().focus();
$('#dirty-schedule').hide();
}
}); });
// Handle save button // Handle save button
...@@ -251,9 +269,27 @@ var edx = edx || {}; ...@@ -251,9 +269,27 @@ var edx = edx || {};
} }
}, },
valid_dates: function(start, due) {
var errorMessage;
// Start date is compulsory and due date is optional.
if (_.isEmpty(start) && !_.isEmpty(due)) {
errorMessage = gettext("Please enter valid start date and time.");
} else if (!_.isEmpty(start) && !_.isEmpty(due)) {
var requirejs = window.require || RequireJS.require;
var moment = requirejs("moment");
var parsedDueDate = moment(due, 'YYYY-MM-DD HH:mm');
var parsedStartDate = moment(start, 'YYYY-MM-DD HH:mm');
if (parsedDueDate.isBefore(parsedStartDate)) {
errorMessage = gettext("Due date cannot be before start date.");
}
}
return errorMessage;
},
get_datetime: function(which) { get_datetime: function(which) {
var date = $('form#add-unit input[name=' + which + '_date]').val(); var date = $('form#add-unit input[name=' + which + '_date]').val();
var time = $('form#add-unit input[name=' + which + '_time]').val(); var time = $('form#add-unit input[name=' + which + '_time]').val();
time = _.isEmpty(time) ? "00:00" : time;
if (date && time) { if (date && time) {
return date + ' ' + time; } return date + ' ' + time; }
return null; return null;
......
...@@ -124,7 +124,7 @@ define(['common/js/spec_helpers/ajax_helpers', 'js/ccx/schedule'], ...@@ -124,7 +124,7 @@ define(['common/js/spec_helpers/ajax_helpers', 'js/ccx/schedule'],
val = "i4x://edX/DemoX/sequential/edx_introduction"; val = "i4x://edX/DemoX/sequential/edx_introduction";
view.sequential_select.val(val); view.sequential_select.val(val);
view.sequential_select.change(); view.sequential_select.change();
val = "i4x://edX/DemoX/vertical/vertical_0270f6de40fc", val = "i4x://edX/DemoX/vertical/vertical_0270f6de40fc";
view.vertical_select.val(val); view.vertical_select.val(val);
view.vertical_select.change(); view.vertical_select.change();
expect(view.vertical_select.val()).toEqual(val); expect(view.vertical_select.val()).toEqual(val);
...@@ -141,11 +141,53 @@ define(['common/js/spec_helpers/ajax_helpers', 'js/ccx/schedule'], ...@@ -141,11 +141,53 @@ define(['common/js/spec_helpers/ajax_helpers', 'js/ccx/schedule'],
view.vertical_select.val(val); view.vertical_select.val(val);
view.vertical_select.change(); view.vertical_select.change();
var unit = view.find_unit(view.schedule, 'i4x://edX/DemoX/chapter/d8a6192ade314473a78242dfeedfbf5b'); var unit = view.find_unit(view.schedule, 'i4x://edX/DemoX/chapter/d8a6192ade314473a78242dfeedfbf5b');
view.set_datetime('start', '2015-12-12 10:00');
view.set_datetime('due', '2015-12-12 10:30');
expect(unit.hidden).toBe(true); expect(unit.hidden).toBe(true);
$('#add-unit-button').click(); $('#add-unit-button').click();
expect(unit.hidden).toBe(false); expect(unit.hidden).toBe(false);
}); });
it("add unit when start date is greater the due date", function() {
var val = 'i4x://edX/DemoX/chapter/d8a6192ade314473a78242dfeedfbf5b';
view.chapter_select.val(val);
view.chapter_select.change();
val = "i4x://edX/DemoX/sequential/edx_introduction";
view.sequential_select.val(val);
view.sequential_select.change();
val = "i4x://edX/DemoX/vertical/vertical_0270f6de40fc";
view.vertical_select.val(val);
view.vertical_select.change();
var unit = view.find_unit(view.schedule, 'i4x://edX/DemoX/chapter/d8a6192ade314473a78242dfeedfbf5b');
// start date is before due date
view.set_datetime('start', '2015-11-13 10:45');
view.set_datetime('due', '2015-11-12 10:00');
expect(unit.hidden).toBe(true);
$('#add-unit-button').click();
// Assert unit is not added to schedule
expect(unit.hidden).toBe(true);
});
it("add unit when start date is missing", function() {
var val = 'i4x://edX/DemoX/chapter/d8a6192ade314473a78242dfeedfbf5b';
view.chapter_select.val(val);
view.chapter_select.change();
val = "i4x://edX/DemoX/sequential/edx_introduction";
view.sequential_select.val(val);
view.sequential_select.change();
val = "i4x://edX/DemoX/vertical/vertical_0270f6de40fc";
view.vertical_select.val(val);
view.vertical_select.change();
var unit = view.find_unit(view.schedule, 'i4x://edX/DemoX/chapter/d8a6192ade314473a78242dfeedfbf5b');
// start date is missing
view.set_datetime('start', null);
view.set_datetime('due', '2015-12-12 10:00');
expect(unit.hidden).toBe(true);
$('#add-unit-button').click();
// Assert unit is not added to schedule
expect(unit.hidden).toBe(true);
});
it("gets a datetime string from date and time fields", function() { it("gets a datetime string from date and time fields", function() {
view.set_datetime('start', '2015-12-12 10:45'); view.set_datetime('start', '2015-12-12 10:45');
expect($('form#add-unit input[name=start_date]')).toHaveValue('2015-12-12'); expect($('form#add-unit input[name=start_date]')).toHaveValue('2015-12-12');
......
...@@ -316,7 +316,7 @@ ...@@ -316,7 +316,7 @@
}, },
'js/ccx/schedule': { 'js/ccx/schedule': {
exports: 'js/ccx/schedule', exports: 'js/ccx/schedule',
deps: ['jquery', 'underscore', 'backbone', 'gettext'] deps: ['jquery', 'underscore', 'backbone', 'gettext', 'moment']
}, },
// Backbone classes loaded explicitly until they are converted to use RequireJS // Backbone classes loaded explicitly until they are converted to use RequireJS
......
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