-
Notifications
You must be signed in to change notification settings - Fork 0
/
between_parser_test.rb
108 lines (82 loc) · 2.75 KB
/
between_parser_test.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
require "between/test"
require "between/parser"
describe Between::Parser do
it "is initialized with a broker and data" do
p = Between::Parser.new :broker, "foo" => "bar"
assert_equal :broker, p.broker
assert_equal 1, p.data.size
end
it "defaults to an empty Hash if data is missing" do
p = Between::Parser.new :model
assert_equal Hash.new, p.data
end
describe :id do
it "extracts name and sets it as name_id on the broker" do
b = mock { expects(:set).with :foo_id, 42 }
p = Between::Parser.new b, "foo" => 42
assert_equal 42, p.id(:foo)
end
it "passes through names ending in _id unchanged" do
b = mock { expects(:set).with :foo_id, 42 }
p = Between::Parser.new b, "foo_id" => 42
assert_equal 42, p.id(:foo_id)
end
end
describe :attr do
it "extracts a value and sets it on the model" do
b = mock { expects(:set).with :foo, "bar" }
p = Between::Parser.new b, "foo" => "bar"
assert_equal "bar", p.attr(:foo)
end
it "won't set if the attr doesn't exist in data" do
p = Between::Parser.new mock
p.attr :foo
end
it "removes trailing ? from predicates" do
b = mock { expects(:set).with :foo, true }
p = Between::Parser.new b, "foo" => true
assert p.attr :foo?
end
it "can specify a completely different source name" do
b = mock { expects(:set).with :foo, "bar" }
p = Between::Parser.new b, "baz" => "bar"
assert_equal "bar", p.attr(:foo, :from => :baz)
end
it "can specify an explicit override value" do
b = mock { expects(:set).with :foo, "bar" }
p = Between::Parser.new b, "foo" => "baz"
assert_equal "bar", p.attr(:foo, :value => "bar")
end
it "can specify a default value" do
b = mock { expects(:set).with :foo, "bar" }
p = Between::Parser.new b
assert_equal "bar", p.attr(:foo, :default => "bar")
end
it "returns the value set on the model" do
b = stub :set
p = Between::Parser.new b, "foo" => "bar"
assert_equal "bar", p.attr(:foo)
end
it "takes a block to transform provided values" do
b = stub :set
p = Between::Parser.new b, "foo" => "bar"
assert_equal "BAR", p.attr(:foo) { |v| v.upcase }
end
it "can ignore nil, empty, and blank attrs" do
m = mock
data = {
"blankString" => " \t",
"emptyArray" => [],
"emptyHash" => {},
"emptyString" => "",
"nil" => nil,
}
p = Between::Parser.new m, data
p.attr :blankString, :blank => false
p.attr :emptyArray, :blank => false
p.attr :emptyHash, :blank => false
p.attr :emptyString, :blank => false
p.attr :nil, :blank => false
end
end
end