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 ed43b5d036..3007c5377f 100644 --- a/cms/static/coffee/spec/models/settings_course_grader_spec.coffee +++ b/cms/static/coffee/spec/models/settings_course_grader_spec.coffee @@ -23,5 +23,13 @@ define ["js/models/settings/course_grader"], (CourseGrader) -> 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.') + expect(errors.drop_count).toBe('Please enter non-negative integer.') + # don't allow negative integers + errors = model.validate({min_count: -12, drop_count: -1}, {validate:true}) + expect(errors.min_count).toBe('Please enter an integer greater than 0.') + expect(errors.drop_count).toBe('Please enter non-negative integer.') + # don't allow floats + errors = model.validate({min_count: 12.2, drop_count: 1.5}, {validate:true}) + expect(errors.min_count).toBe('Please enter an integer greater than 0.') + expect(errors.drop_count).toBe('Please enter non-negative integer.') diff --git a/cms/static/js/models/settings/course_grader.js b/cms/static/js/models/settings/course_grader.js index 6f46af5f02..0fee8f6555 100644 --- a/cms/static/js/models/settings/course_grader.js +++ b/cms/static/js/models/settings/course_grader.js @@ -51,19 +51,19 @@ var CourseGrader = Backbone.Model.extend({ }} if (_.has(attrs, 'min_count')) { var intMinCount = parseInt(attrs.min_count, 10); - if (!isFinite(intMinCount) || /\D+/.test(intMinCount) || intMinCount < 1) { + if (!isFinite(intMinCount) || /\D+/.test(attrs.min_count) || intMinCount < 1) { errors.min_count = gettext("Please enter an integer greater than 0."); } else attrs.min_count = intMinCount; } if (_.has(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."); + if (!isFinite(intDropCount) || /\D+/.test(attrs.drop_count) || isNaN(intDropCount) || intDropCount < 0) { + errors.drop_count = gettext("Please enter non-negative integer."); } else attrs.drop_count = intDropCount; } - if (_.has(attrs, 'min_count') && _.has(attrs, 'drop_count') && attrs.drop_count > attrs.min_count) { + if (_.has(attrs, 'min_count') && _.has(attrs, 'drop_count') && !_.has(errors, 'min_count') && !_.has(errors, 'drop_count') && attrs.drop_count > attrs.min_count) { errors.drop_count = _.template( gettext("Cannot drop more <% attrs.types %> than will assigned."), attrs, {variable: 'attrs'});