From 4cb03f43a2c944c7358ae4c0a14a8ef307b215bc Mon Sep 17 00:00:00 2001 From: zubiar-arbi Date: Tue, 24 Dec 2013 15:03:09 +0500 Subject: [PATCH] Grading types should not allow empty field for "Total Number" and "Number of Droppable" STUD-988 --- .../spec/models/settings_course_grader_spec.coffee | 7 +++++++ cms/static/js/models/settings/course_grader.js | 12 +++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/cms/static/coffee/spec/models/settings_course_grader_spec.coffee b/cms/static/coffee/spec/models/settings_course_grader_spec.coffee index f6252a3590..ed43b5d036 100644 --- a/cms/static/coffee/spec/models/settings_course_grader_spec.coffee +++ b/cms/static/coffee/spec/models/settings_course_grader_spec.coffee @@ -18,3 +18,10 @@ define ["js/models/settings/course_grader"], (CourseGrader) -> expect(model.get('weight')).toBe(7) expect(model.get('min_count')).toBe(3) expect(model.get('drop_count')).toBe(1) + + it "gives validation error if min_count is less than 1 or drop_count is NaN", -> + model = new CourseGrader() + errors = model.validate({min_count: 0, drop_count: ''}, {validate:true}) + expect(errors.min_count).toBe('Please enter an integer greater than 0.') + expect(errors.drop_count).toBe('Please enter an integer.') + diff --git a/cms/static/js/models/settings/course_grader.js b/cms/static/js/models/settings/course_grader.js index a915c5f0ec..6f46af5f02 100644 --- a/cms/static/js/models/settings/course_grader.js +++ b/cms/static/js/models/settings/course_grader.js @@ -50,16 +50,18 @@ var CourseGrader = Backbone.Model.extend({ } }} if (_.has(attrs, 'min_count')) { - if (!isFinite(attrs.min_count) || /\D+/.test(attrs.min_count)) { - errors.min_count = gettext("Please enter an integer."); + var intMinCount = parseInt(attrs.min_count, 10); + if (!isFinite(intMinCount) || /\D+/.test(intMinCount) || intMinCount < 1) { + errors.min_count = gettext("Please enter an integer greater than 0."); } - else attrs.min_count = parseInt(attrs.min_count, 10); + else attrs.min_count = intMinCount; } if (_.has(attrs, 'drop_count')) { - if (!isFinite(attrs.drop_count) || /\D+/.test(attrs.drop_count)) { + var intDropCount = parseInt(attrs.drop_count, 10); + if (!isFinite(intDropCount) || /\D+/.test(intDropCount) || isNaN(intDropCount)) { errors.drop_count = gettext("Please enter an integer."); } - else attrs.drop_count = parseInt(attrs.drop_count, 10); + else attrs.drop_count = intDropCount; } if (_.has(attrs, 'min_count') && _.has(attrs, 'drop_count') && attrs.drop_count > attrs.min_count) { errors.drop_count = _.template(