Removing .DS_Store and .pid files from repository.
[merb_radiant.git] / radiant_specs / test / helpers / validation_test_helper.rb
blob16b1d11d7787fea3ee96947a1215e4c00e067e54
1 module ValidationTestHelper
2   def assert_valid(field, *values)
3     __model_check__
4     values.flatten.each do |value|
5       o = __setup_model__(field, value)
6       if o.valid?
7         assert_block { true }
8       else
9         messages = [o.errors[field]].flatten
10         assert_block("unexpected invalid field <#{o.class}##{field}>, value: <#{value.inspect}>, errors: <#{o.errors[field].inspect}>.") { false }
11       end
12     end
13   end
14   
15   def assert_invalid(field, message, *values)
16     __model_check__
17     values.flatten.each do |value|
18       o = __setup_model__(field, value)
19       if o.valid?
20         assert_block("field <#{o.class}##{field}> should be invalid for value <#{value.inspect}> with message <#{message.inspect}>") { false }
21       else
22         messages = [o.errors[field]].flatten
23         assert_block("field <#{o.class}##{field}> with value <#{value.inspect}> expected validation error <#{message.inspect}>, but got errors <#{messages.inspect}>") { messages.include?(message) }
24       end
25     end
26   end
27   
28   def __model_check__
29     raise "@model must be assigned in order to use validation assertions" if @model.nil?
30     
31     o = @model.dup
32     raise "@model must be valid before calling a validation assertion, instead @model contained the following errors #{o.errors.instance_variable_get('@errors').inspect}" unless o.valid?
33   end
34   
35   def __setup_model__(field, value)
36     o = @model.dup
37     attributes = o.instance_variable_get('@attributes')
38     o.instance_variable_set('@attributes', attributes.dup)
39     o.send("#{field}=", value)
40     o
41   end
42 end