test/validation_support_test.rb in whyvalidationssuckin96-1.5.1 vs test/validation_support_test.rb in whyvalidationssuckin96-1.5.2

- old
+ new

@@ -2,92 +2,92 @@ context "validation_support" do context "when mixed into a class supporting callbacks" do setup do - Class.new do + Class.new do attr_reader :callbacks_run - + def initialize @callbacks_run = [] end - + def run_callbacks(callback_name) @callbacks_run << callback_name end - + include WhyValidationsSuckIn96::ValidationSupport setup_validations do validate(:foo) { pass } end end.new end - + should "run the before_validation callback when calling valid?" do topic.callbacks_run.clear topic.valid? topic.callbacks_run end.includes(:before_validation) - + should "run the after_validation callback when calling valid?" do topic.callbacks_run.clear topic.valid? topic.callbacks_run end.includes(:after_validation) - + end # when mixed into a class supporting callbacks - + context "when mixed into a class" do setup do Class.new { include WhyValidationsSuckIn96::ValidationSupport } end - + should "add a 'validation_collection' method" do topic end.respond_to(:validation_collection) - + should "add a 'setup_validations' method" do topic end.respond_to(:setup_validations) - + should "add a 'valid?' instance method" do topic.new end.respond_to(:valid?) - + should "add a 'invalid?' instance method" do topic.new end.respond_to(:invalid?) - + should "add a 'failed_validations' instance method" do topic.new end.respond_to(:failed_validations) - + should "add a 'passed_validations' instance method" do topic.new end.respond_to(:passed_validations) - + should "add a 'all_validations' instance method" do topic.new end.respond_to(:all_validations) - + should "have a ValidationCollection for all_validations" do topic.new.all_validations.instance_of?(WhyValidationsSuckIn96::ValidationCollection) end should "have an empty validation collection" do topic.validation_collection.size end.equals(0) - + should "be valid when no validations have been defined" do topic.new.valid? end - + should "not be invalid when no validations have been defined" do !topic.new.invalid? end end # mixed into a class - + context "when mixed into a class and used to add a simple validation" do setup do Class.new do attr_accessor :title include WhyValidationsSuckIn96::ValidationSupport @@ -97,61 +97,61 @@ fail end end # setup_validations end # Class.new end # setup - + should "have one validation in the validation_collection" do topic.validation_collection.size end.equals(1) - + should "be able to reflect on the validation and find its name" do topic.validation_collection.first.first.name end.equals(:title_is_present) - + should "be able to reflect on the validation and find its options" do topic.validation_collection.first.last end.equals(:example => "the number song", :message => "title must be present") - + context "given an instance of the class" do setup { topic.new } - + should "have one entry for all validations" do topic.all_validations.size end.equals(1) - + should "have all the entries for all validations be validation instances" do topic.all_validations.all? { |validation| validation.kind_of?(WhyValidationsSuckIn96::Validation) } end - + should "not be valid without a title" do topic.title = nil !topic.valid? end - + should "be valid with a title" do topic.title = "building steam with a grain of salt" topic.valid? end - + should "have one passed validation with a title" do topic.title = "building steam with a grain of salt" topic.valid? topic.passed_validations.size end.equals(1) - + should "have one failed validation without a title" do topic.title = nil topic.valid? topic.failed_validations.size end.equals(1) end # given an instance of the class end # when mixed into a class and used to add a simple validation - + context "when extending a class with existing validations and adding new validations" do parent_class = child_class = nil - + setup do parent_class = Class.new do attr_accessor :artist include WhyValidationsSuckIn96::ValidationSupport setup_validations do @@ -159,47 +159,47 @@ pass if validatable.artist && !validatable.artist.empty? fail end end # setup_validations end # parent_class - + child_class = Class.new(parent_class) do attr_accessor :title setup_validations do validate :title_is_present, :example => "the number song", :message => "title must be present" do pass if validatable.title && !validatable.title.empty? fail end end # setup_validations end # child_class end # setup - + should "have only one validation in the collection for the base class" do parent_class.validation_collection.size end.equals(1) - + should "have a validation for the artist in the base class" do parent_class.validation_collection.detect {|(validation, opts)| validation.name == :artist_is_present } end - + should "have two validations in the collection for the child class" do child_class.validation_collection.size end.equals(2) - + should "have a validation for the artist in the child class" do child_class.validation_collection.detect {|(validation, opts)| validation.name == :artist_is_present } end - + should "have a validation for the title in the child class" do child_class.validation_collection.detect {|(validation, opts)| validation.name == :title_is_present } end - + end # when extending a class with existing validations - + context "when extending a class with existing validations and not adding new validations" do parent_class = child_class = nil - + setup do parent_class = Class.new do attr_accessor :artist include WhyValidationsSuckIn96::ValidationSupport setup_validations do @@ -207,20 +207,20 @@ pass if validatable.artist && !validatable.artist.empty? fail end end # setup_validations end # parent_class - + child_class = Class.new(parent_class) end # setup - + should "have the parent class' validations by default" do child_class.validation_collection.size end.equals(1) - + end # when extending a class with existing validations and not adding new validations - + context "when calling setup_validations twice in a class" do setup do Class.new do include WhyValidationsSuckIn96::ValidationSupport setup_validations do @@ -229,20 +229,40 @@ setup_validations do validate(:second_validation) {} end end # Class.new end # setup - + should "add two validations to the class" do topic.validation_collection.size end.equals(2) - + should "have the first validation" do topic.validation_collection.detect { |(validation, opts)| validation.name == :first_validation } end - + should "have the second validation" do topic.validation_collection.detect { |(validation, opts)| validation.name == :second_validation } end - + end # when calling setup_validations twice in a class + + context "when asking for validations on a specific attribute" do + setup do + Class.new do + include WhyValidationsSuckIn96::ValidationSupport + setup_validations do + validates_presence_of :foo + end + end # Class.new + end + + should "return validations on an instance" do + topic.new.validations_for(:foo).size + end + + should "return validations an empty array if no validations on attribute" do + topic.new.validations_for(:bar).size + end.equals(0) + end + end # validation_support