lib/matchers/validations/validations.rb in mongoid-minitest-0.0.1 vs lib/matchers/validations/validations.rb in mongoid-minitest-0.0.2

- old
+ new

@@ -7,34 +7,64 @@ def initialize(field, validation_type) @field = field.to_s @type = validation_type.to_s end - def matches?(actual) - @klass = actual.is_a?(Class) ? actual : actual.class - @validator = @klass.validators_on(@field).detect { |v| v.kind.to_s == @type } + def with_message(expected_message) + @expected_message = expected_message + self + end - if @validator - @negative_message = "#{@type.inspect} validator on #{@field.inspect}" - @positive_message = "#{@type.inspect} validator on #{@field.inspect}" - else - @negative_message = "no #{@type.inspect} validator on #{@field.inspect}" - return false - end + def matches?(subject) + @klass = class_of(subject) + @validator = detect_validator + @result = true - true + check_validator + check_message if @expected_message + + @result end def failure_message - "Expected #{@klass.inspect} to #{description}; instead got #{@negative_message}" + "#{@klass} to #{description}; instead got #{@negative_message}" end def negative_failure_message - "Expected #{@klass.inspect} to not #{description}; instead got #{@positive_message}" + "#{@klass} to not #{description}; instead got #{@positive_message}" end def description - "validate #{@type.inspect} of #{@field.inspect}" + desc = "validate #{@type.inspect} of #{@field.inspect}" + desc << " with message: #{@expected_message.inspect}" if @expected_message + + desc + end + + private + + def check_validator + if @validator + @negative_message = "#{@type.inspect} validator on #{@field.inspect}" + @positive_message = "#{@type.inspect} validator on #{@field.inspect}" + else + @negative_message = "no #{@type.inspect} validator on #{@field.inspect}" + @result = false + end + end + + def check_message + error_message = @validator.options[:message] + if @expected_message == error_message + @positive_message << " with message: #{error_message.inspect}" + else + @negative_message << " with message: #{error_message.inspect}" + @result = false + end + end + + def detect_validator + @klass.validators_on(@field).detect { |v| v.kind.to_s == @type } end end end end end