Commit d9801524 by Muzaffar yousaf

Merge pull request #638 from edx/muzaffar/tnl58-date-validations

More accurate validation for date & time in studio editor.
parents 51df3aa6 41b054f6
...@@ -11,3 +11,4 @@ David Baumgold <david@davidbaumgold.com> ...@@ -11,3 +11,4 @@ David Baumgold <david@davidbaumgold.com>
Grady Ward <gward@brandeis.edu> Grady Ward <gward@brandeis.edu>
Andrew Dekker <a.dekker@uq.edu.au> Andrew Dekker <a.dekker@uq.edu.au>
Steven Burch <stv@stanford.edu> Steven Burch <stv@stanford.edu>
Muzaffar Yousaf <muzaffar@edx.org>
...@@ -44,6 +44,10 @@ describe("OpenAssessment.DatetimeControl", function() { ...@@ -44,6 +44,10 @@ describe("OpenAssessment.DatetimeControl", function() {
testValidateDate(datetimeControl, "99999999-01-01", "00:00", false, expectedError); testValidateDate(datetimeControl, "99999999-01-01", "00:00", false, expectedError);
testValidateDate(datetimeControl, "2014-99999-01", "00:00", false, expectedError); testValidateDate(datetimeControl, "2014-99999-01", "00:00", false, expectedError);
testValidateDate(datetimeControl, "2014-01-99999", "00:00", false, expectedError); testValidateDate(datetimeControl, "2014-01-99999", "00:00", false, expectedError);
//invalid month
testValidateDate(datetimeControl, "2014-13-01", "00:00", false, expectedError);
//invalid day
testValidateDate(datetimeControl, "2014-02-30", "00:00", false, expectedError);
}); });
it("validates invalid times", function() { it("validates invalid times", function() {
...@@ -64,6 +68,8 @@ describe("OpenAssessment.DatetimeControl", function() { ...@@ -64,6 +68,8 @@ describe("OpenAssessment.DatetimeControl", function() {
testValidateDate(datetimeControl, "2001-12-31", "00:00", true); testValidateDate(datetimeControl, "2001-12-31", "00:00", true);
testValidateDate(datetimeControl, "2014-04-01", "12:34", true); testValidateDate(datetimeControl, "2014-04-01", "12:34", true);
testValidateDate(datetimeControl, "2014-04-01", "23:59", true); testValidateDate(datetimeControl, "2014-04-01", "23:59", true);
// single character for month and date.
testValidateDate(datetimeControl, "2014-4-1", "23:59", true);
}); });
it("clears validation errors", function() { it("clears validation errors", function() {
......
...@@ -227,16 +227,31 @@ OpenAssessment.DatetimeControl.prototype = { ...@@ -227,16 +227,31 @@ OpenAssessment.DatetimeControl.prototype = {
**/ **/
validate: function() { validate: function() {
var datetimeString = this.datetime(); var dateString = $(this.datePicker, this.element).val();
var matches = datetimeString.match(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}$/g); var timeString = $(this.timePicker, this.element).val();
var isValid = (matches !== null);
if (!isValid) { //date validation
var isDateValid = false;
try {
var parsedDate = $.datepicker.parseDate($.datepicker.ISO_8601, dateString);
isDateValid = parsedDate instanceof Date;
} catch (err) {
// parseDate function throws error if date is not in expected format.
// isDateValid flag would remain false.
}
if (!isDateValid) {
$(this.datePicker, this.element).addClass("openassessment_highlighted_field"); $(this.datePicker, this.element).addClass("openassessment_highlighted_field");
}
//time validation
var matches = timeString.match(/^\d{2}:\d{2}$/g);
var isTimeValid = (matches !== null);
if(!isTimeValid) {
$(this.timePicker, this.element).addClass("openassessment_highlighted_field"); $(this.timePicker, this.element).addClass("openassessment_highlighted_field");
} }
return isValid; return (isDateValid && isTimeValid);
}, },
/** /**
......
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