Commit fbdd4999 by Clinton Blackburn

Validating course verification deadline

This field is validated to ensure the verification deadline always occurs after the course seats' upgrade deadlines.

XCOM-581
parent 7d198b78
...@@ -65,6 +65,24 @@ define([ ...@@ -65,6 +65,24 @@ define([
type: { type: {
required: true, required: true,
msg: gettext('You must select a course type.') msg: gettext('You must select a course type.')
},
verification_deadline: function (value) {
var invalid;
// No validation is needed for empty values
if (_.isEmpty(value)) {
return;
}
// Find seats where the verification deadline occurs before the upgrade deadline.
invalid = _.some(this.seats(), function (seat) {
var expires = seat.get('expires');
return expires && moment(value).isBefore(expires);
});
if (invalid) {
return gettext('The verification deadline must occur AFTER the upgrade deadline.');
}
} }
}, },
......
...@@ -218,6 +218,27 @@ define([ ...@@ -218,6 +218,27 @@ define([
expect(model.get('products')).toEqual(jasmine.any(ProductCollection)); expect(model.get('products')).toEqual(jasmine.any(ProductCollection));
}); });
}); });
describe('verification deadline validation', function () {
it('succeeds if the verification deadline is after the course seats\' expiration dates', function () {
var seat = model.getOrCreateSeat('verified');
model.set('verification_deadline', '2016-01-01T00:00:00Z');
seat.set('expires', '2015-01-01T00:00:00Z');
expect(model.validate()).toBeUndefined();
expect(model.isValid(true)).toBeTruthy();
});
it('fails if the verification deadline is before the course seats\' expiration dates', function () {
var seat = model.getOrCreateSeat('verified'),
msg = 'The verification deadline must occur AFTER the upgrade deadline.';
model.set('verification_deadline', '2014-01-01T00:00:00Z');
seat.set('expires', '2015-01-01T00:00:00Z');
expect(model.validate().verification_deadline).toEqual(msg);
expect(model.isValid(true)).toBeFalsy();
});
});
}); });
} }
); );
...@@ -120,7 +120,12 @@ define([ ...@@ -120,7 +120,12 @@ define([
validate: true validate: true
} }
}, },
'input[name=verification_deadline]': 'verification_deadline' 'input[name=verification_deadline]': {
observe: 'verification_deadline',
setOptions: {
validate: true
}
}
}, },
initialize: function (options) { initialize: function (options) {
......
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