Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class GradeScale < ActiveRecord::Base
- # Associations
- belongs_to :gradebook
- # Validations
- validates_presence_of :gradebook_id, :grade_letter, :range_start, :range_end
- validates_numericality_of :range_start, :range_end, :greater_than_or_equal_to => 0, :less_than_or_equal_to => 100
- validates_uniqueness_of :grade_letter, :scope => :gradebook_id
- validate :range_exclusion
- private
- def range_exclusion
- ranges = GradeScale.find(:all, :select => "range_start, range_end")
- self.errors.add :range_start, 'lies within an existing range' if ranges.any?{ |r| (r.range_start.to_f..r.range_end.to_f).include?(range_start) }
- self.errors.add :range_end, 'lies within an existing range' if ranges.any?{ |r| (r.range_start.to_f..r.range_end.to_f).include?(range_end) }
- end
- end
- ## Test
- require File.dirname(__FILE__) + '/../test_helper'
- class GradeScaleTest < ActiveSupport::TestCase
- fixtures :grade_scales
- def test_should_add_error_on_conflicting_ranges
- puts "inside tst"
- grade_scale1 = create(:gradebook_id => 1, :grade_letter => 'A', :range_start => 91.2, :range_end => 100)
- assert grade_scale1.valid?, "grade_scale1 should have been valid #{grade_scale1.errors.full_messages.join(', ')}"
- end
- private
- def create(options={})
- GradeScale.create({
- :gradebook_id => 1, :grade_letter => 'A'
- }.merge(options))
- end
- end
- ## Error
- 1) Failure:
- test_should_add_error_on_conflicting_ranges(GradeScaleTest)
- [test/unit/grade_scale_test.rb:10:in `test_should_add_error_on_conflicting_ranges'
- /Library/Ruby/Gems/1.8/gems/activesupport-2.0.2/lib/active_support/testing/default.rb:7:in `run']:
- grade_scale1 should have been valid Range start lies within an existing range, Range end lies within an existing range.
- <false> is not true.
Add Comment
Please, Sign In to add comment