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