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
This commit is contained in:
@@ -104,23 +104,41 @@ var edx = edx || {};
|
||||
// Add unit handler
|
||||
$('#add-unit-button').on('click', function(event) {
|
||||
event.preventDefault();
|
||||
var chapter = self.chapter_select.val(),
|
||||
sequential = self.sequential_select.val(),
|
||||
vertical = self.vertical_select.val(),
|
||||
units = self.find_lineage(self.schedule,
|
||||
chapter,
|
||||
sequential === 'all' ? null : sequential,
|
||||
vertical === 'all' ? null: vertical),
|
||||
start = self.get_datetime('start'),
|
||||
due = self.get_datetime('due');
|
||||
units.map(self.show);
|
||||
var unit = units[units.length - 1];
|
||||
if (unit !== undefined && start) { unit.start = start; }
|
||||
if (unit !== undefined && due) { unit.due = due; }
|
||||
self.schedule_apply([unit], self.show);
|
||||
self.schedule_collection.set(self.schedule);
|
||||
self.dirty = true;
|
||||
self.render();
|
||||
// Default value of time is 00:00.
|
||||
var start, chapter, sequential, vertical, units, due;
|
||||
start = self.get_datetime('start');
|
||||
chapter = self.chapter_select.val();
|
||||
sequential = self.sequential_select.val();
|
||||
vertical = self.vertical_select.val();
|
||||
units = self.find_lineage(
|
||||
self.schedule,
|
||||
chapter,
|
||||
sequential === 'all' ? null : sequential,
|
||||
vertical === 'all' ? null : vertical
|
||||
);
|
||||
due = self.get_datetime('due');
|
||||
var errorMessage = self.valid_dates(start, due);
|
||||
if (_.isUndefined(errorMessage)) {
|
||||
units.map(self.show);
|
||||
var unit = units[units.length - 1];
|
||||
if (!_.isUndefined(unit)) {
|
||||
if (!_.isNull(start)) {
|
||||
unit.start = start;
|
||||
}
|
||||
if (!_.isNull(due)) {
|
||||
unit.due = due;
|
||||
}
|
||||
}
|
||||
self.schedule_apply([unit], self.show);
|
||||
self.schedule_collection.set(self.schedule);
|
||||
self.dirty = true;
|
||||
self.render();
|
||||
} else {
|
||||
self.dirty = false;
|
||||
$('#ccx_schedule_error_message').text(errorMessage);
|
||||
$('#ajax-error').show().focus();
|
||||
$('#dirty-schedule').hide();
|
||||
}
|
||||
});
|
||||
|
||||
// Handle save button
|
||||
@@ -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) {
|
||||
var date = $('form#add-unit input[name=' + which + '_date]').val();
|
||||
var time = $('form#add-unit input[name=' + which + '_time]').val();
|
||||
time = _.isEmpty(time) ? "00:00" : time;
|
||||
if (date && time) {
|
||||
return date + ' ' + time; }
|
||||
return null;
|
||||
|
||||
@@ -124,7 +124,7 @@ define(['common/js/spec_helpers/ajax_helpers', 'js/ccx/schedule'],
|
||||
val = "i4x://edX/DemoX/sequential/edx_introduction";
|
||||
view.sequential_select.val(val);
|
||||
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.change();
|
||||
expect(view.vertical_select.val()).toEqual(val);
|
||||
@@ -141,11 +141,53 @@ define(['common/js/spec_helpers/ajax_helpers', 'js/ccx/schedule'],
|
||||
view.vertical_select.val(val);
|
||||
view.vertical_select.change();
|
||||
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);
|
||||
$('#add-unit-button').click();
|
||||
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() {
|
||||
view.set_datetime('start', '2015-12-12 10:45');
|
||||
expect($('form#add-unit input[name=start_date]')).toHaveValue('2015-12-12');
|
||||
|
||||
@@ -316,7 +316,7 @@
|
||||
},
|
||||
'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
|
||||
|
||||
Reference in New Issue
Block a user