From 0fe31fa981728b7b52c213fdeb4d6605f43e242b Mon Sep 17 00:00:00 2001 From: Alex Dusenbery Date: Mon, 28 Aug 2017 14:16:49 -0400 Subject: [PATCH] EDUCATOR-1251 | cert available date validation should take course pacing into account. --- cms/static/js/models/settings/course_details.js | 10 ++++++---- cms/static/js/spec/views/settings/main_spec.js | 13 ++++++++++++- cms/templates/js/mock/mock-settings-page.underscore | 10 ++++++++++ 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/cms/static/js/models/settings/course_details.js b/cms/static/js/models/settings/course_details.js index 66a3d0f5ef..3503c2d308 100644 --- a/cms/static/js/models/settings/course_details.js +++ b/cms/static/js/models/settings/course_details.js @@ -31,7 +31,8 @@ define(['backbone', 'underscore', 'gettext', 'js/models/validation_helpers', 'js entrance_exam_enabled: '', entrance_exam_minimum_score_pct: '50', learning_info: [], - instructor_info: {} + instructor_info: {}, + self_paced: null }, validate: function(newattrs) { @@ -39,8 +40,9 @@ define(['backbone', 'underscore', 'gettext', 'js/models/validation_helpers', 'js // A bit funny in that the video key validation is asynchronous; so, it won't stop the validation. var errors = {}; newattrs = DateUtils.convertDateStringsToObjects( - newattrs, ['start_date', 'end_date', 'certificate_available_date', 'enrollment_start', 'enrollment_end'] - ); + newattrs, + ['start_date', 'end_date', 'certificate_available_date', 'enrollment_start', 'enrollment_end'] + ); if (newattrs.start_date === null) { errors.start_date = gettext('The course must have an assigned start date.'); @@ -58,7 +60,7 @@ define(['backbone', 'underscore', 'gettext', 'js/models/validation_helpers', 'js if (newattrs.end_date && newattrs.enrollment_end && newattrs.end_date < newattrs.enrollment_end) { errors.enrollment_end = gettext('The enrollment end date cannot be after the course end date.'); } - if (newattrs.end_date && newattrs.certificate_available_date && + if (!this.get('self_paced') && newattrs.end_date && newattrs.certificate_available_date && newattrs.certificate_available_date < newattrs.end_date) { errors.certificate_available_date = gettext( 'The certificate available date must be later than the course end date.' diff --git a/cms/static/js/spec/views/settings/main_spec.js b/cms/static/js/spec/views/settings/main_spec.js index e33e845465..5411ce495c 100644 --- a/cms/static/js/spec/views/settings/main_spec.js +++ b/cms/static/js/spec/views/settings/main_spec.js @@ -48,7 +48,8 @@ define([ learning_info: [''], instructor_info: { 'instructors': [{'name': '', 'title': '', 'organization': '', 'image': '', 'bio': ''}] - } + }, + self_paced: false }, mockSettingsPage = readFixtures('mock/mock-settings-page.underscore'), @@ -348,5 +349,15 @@ define([ ); AjaxHelpers.respondWithJson(requests, expectedJson); }); + it('should disallow save with a certificate available date before end date', function() { + $('#course-end-date').val('01/01/2030').trigger('change'); + expect(this.view.$('.message-error')).toExist(); + }); + it('should allow save with a certificate available date before end date for self-paced course', function() { + this.model.set('self_paced', true); + $('#course-end-date').val('01/01/2030').trigger('change'); + expect(this.view.$('.message-error')).not.toExist(); + this.model.set('self_paced', false); + }); }); }); diff --git a/cms/templates/js/mock/mock-settings-page.underscore b/cms/templates/js/mock/mock-settings-page.underscore index c03fb697a2..168dfdc93c 100644 --- a/cms/templates/js/mock/mock-settings-page.underscore +++ b/cms/templates/js/mock/mock-settings-page.underscore @@ -34,6 +34,16 @@ +
    +
  1. +
    + + + By default, 48 hours after course end date +
    +
  2. +
+