ardm 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/.gitignore +35 -0
- data/Gemfile +13 -0
- data/LICENSE +21 -0
- data/README.md +70 -0
- data/Rakefile +4 -0
- data/ardm.gemspec +29 -0
- data/db/.gitignore +1 -0
- data/lib/ardm/active_record/associations.rb +80 -0
- data/lib/ardm/active_record/base.rb +49 -0
- data/lib/ardm/active_record/dirty.rb +25 -0
- data/lib/ardm/active_record/hooks.rb +31 -0
- data/lib/ardm/active_record/inheritance.rb +37 -0
- data/lib/ardm/active_record/is/state_machine.rb +21 -0
- data/lib/ardm/active_record/is.rb +22 -0
- data/lib/ardm/active_record/not_found.rb +7 -0
- data/lib/ardm/active_record/predicate_builder/array_handler.rb +31 -0
- data/lib/ardm/active_record/predicate_builder/rails3.rb +147 -0
- data/lib/ardm/active_record/predicate_builder/rails4.rb +139 -0
- data/lib/ardm/active_record/predicate_builder/relation_handler.rb +15 -0
- data/lib/ardm/active_record/predicate_builder.rb +19 -0
- data/lib/ardm/active_record/property.rb +357 -0
- data/lib/ardm/active_record/query.rb +108 -0
- data/lib/ardm/active_record/record.rb +70 -0
- data/lib/ardm/active_record/relation.rb +83 -0
- data/lib/ardm/active_record/repository.rb +38 -0
- data/lib/ardm/active_record/serialization.rb +164 -0
- data/lib/ardm/active_record/storage_names.rb +28 -0
- data/lib/ardm/active_record/validations.rb +111 -0
- data/lib/ardm/active_record.rb +43 -0
- data/lib/ardm/data_mapper/not_found.rb +5 -0
- data/lib/ardm/data_mapper/record.rb +41 -0
- data/lib/ardm/data_mapper.rb +5 -0
- data/lib/ardm/env.rb +5 -0
- data/lib/ardm/property/api_key.rb +30 -0
- data/lib/ardm/property/bcrypt_hash.rb +31 -0
- data/lib/ardm/property/binary.rb +23 -0
- data/lib/ardm/property/boolean.rb +29 -0
- data/lib/ardm/property/class.rb +19 -0
- data/lib/ardm/property/comma_separated_list.rb +28 -0
- data/lib/ardm/property/csv.rb +35 -0
- data/lib/ardm/property/date.rb +12 -0
- data/lib/ardm/property/datetime.rb +12 -0
- data/lib/ardm/property/decimal.rb +38 -0
- data/lib/ardm/property/discriminator.rb +65 -0
- data/lib/ardm/property/enum.rb +51 -0
- data/lib/ardm/property/epoch_time.rb +38 -0
- data/lib/ardm/property/file_path.rb +25 -0
- data/lib/ardm/property/flag.rb +65 -0
- data/lib/ardm/property/float.rb +18 -0
- data/lib/ardm/property/integer.rb +24 -0
- data/lib/ardm/property/invalid_value_error.rb +22 -0
- data/lib/ardm/property/ip_address.rb +35 -0
- data/lib/ardm/property/json.rb +49 -0
- data/lib/ardm/property/lookup.rb +29 -0
- data/lib/ardm/property/numeric.rb +40 -0
- data/lib/ardm/property/object.rb +36 -0
- data/lib/ardm/property/paranoid_boolean.rb +18 -0
- data/lib/ardm/property/paranoid_datetime.rb +17 -0
- data/lib/ardm/property/regexp.rb +22 -0
- data/lib/ardm/property/serial.rb +16 -0
- data/lib/ardm/property/slug.rb +29 -0
- data/lib/ardm/property/string.rb +40 -0
- data/lib/ardm/property/support/dirty_minder.rb +169 -0
- data/lib/ardm/property/support/flags.rb +41 -0
- data/lib/ardm/property/support/paranoid_base.rb +78 -0
- data/lib/ardm/property/text.rb +11 -0
- data/lib/ardm/property/time.rb +12 -0
- data/lib/ardm/property/uri.rb +27 -0
- data/lib/ardm/property/uuid.rb +65 -0
- data/lib/ardm/property/validation.rb +208 -0
- data/lib/ardm/property/yaml.rb +38 -0
- data/lib/ardm/property.rb +891 -0
- data/lib/ardm/property_set.rb +152 -0
- data/lib/ardm/query/expression.rb +85 -0
- data/lib/ardm/query/ext/symbol.rb +37 -0
- data/lib/ardm/query/operator.rb +64 -0
- data/lib/ardm/record.rb +1 -0
- data/lib/ardm/support/assertions.rb +8 -0
- data/lib/ardm/support/deprecate.rb +12 -0
- data/lib/ardm/support/descendant_set.rb +89 -0
- data/lib/ardm/support/equalizer.rb +48 -0
- data/lib/ardm/support/ext/array.rb +22 -0
- data/lib/ardm/support/ext/blank.rb +25 -0
- data/lib/ardm/support/ext/hash.rb +67 -0
- data/lib/ardm/support/ext/module.rb +47 -0
- data/lib/ardm/support/ext/object.rb +57 -0
- data/lib/ardm/support/ext/string.rb +24 -0
- data/lib/ardm/support/ext/try_dup.rb +12 -0
- data/lib/ardm/support/hook.rb +405 -0
- data/lib/ardm/support/lazy_array.rb +451 -0
- data/lib/ardm/support/local_object_space.rb +13 -0
- data/lib/ardm/support/logger.rb +201 -0
- data/lib/ardm/support/mash.rb +176 -0
- data/lib/ardm/support/naming_conventions.rb +90 -0
- data/lib/ardm/support/ordered_set.rb +380 -0
- data/lib/ardm/support/subject.rb +33 -0
- data/lib/ardm/support/subject_set.rb +250 -0
- data/lib/ardm/version.rb +3 -0
- data/lib/ardm.rb +56 -0
- data/spec/fixtures/api_user.rb +11 -0
- data/spec/fixtures/article.rb +22 -0
- data/spec/fixtures/bookmark.rb +14 -0
- data/spec/fixtures/invention.rb +5 -0
- data/spec/fixtures/network_node.rb +23 -0
- data/spec/fixtures/person.rb +17 -0
- data/spec/fixtures/software_package.rb +22 -0
- data/spec/fixtures/ticket.rb +12 -0
- data/spec/fixtures/tshirt.rb +15 -0
- data/spec/integration/api_key_spec.rb +25 -0
- data/spec/integration/bcrypt_hash_spec.rb +45 -0
- data/spec/integration/comma_separated_list_spec.rb +85 -0
- data/spec/integration/dirty_minder_spec.rb +197 -0
- data/spec/integration/enum_spec.rb +79 -0
- data/spec/integration/epoch_time_spec.rb +59 -0
- data/spec/integration/file_path_spec.rb +158 -0
- data/spec/integration/flag_spec.rb +72 -0
- data/spec/integration/ip_address_spec.rb +151 -0
- data/spec/integration/json_spec.rb +70 -0
- data/spec/integration/slug_spec.rb +65 -0
- data/spec/integration/uri_spec.rb +136 -0
- data/spec/integration/uuid_spec.rb +102 -0
- data/spec/integration/yaml_spec.rb +85 -0
- data/spec/public/property/binary_spec.rb +41 -0
- data/spec/public/property/boolean_spec.rb +30 -0
- data/spec/public/property/class_spec.rb +28 -0
- data/spec/public/property/date_spec.rb +22 -0
- data/spec/public/property/date_time_spec.rb +22 -0
- data/spec/public/property/decimal_spec.rb +23 -0
- data/spec/public/property/discriminator_spec.rb +133 -0
- data/spec/public/property/float_spec.rb +22 -0
- data/spec/public/property/integer_spec.rb +22 -0
- data/spec/public/property/object_spec.rb +103 -0
- data/spec/public/property/serial_spec.rb +22 -0
- data/spec/public/property/string_spec.rb +22 -0
- data/spec/public/property/text_spec.rb +23 -0
- data/spec/public/property/time_spec.rb +22 -0
- data/spec/public/property_spec.rb +316 -0
- data/spec/rcov.opts +6 -0
- data/spec/schema.rb +86 -0
- data/spec/semipublic/property/binary_spec.rb +14 -0
- data/spec/semipublic/property/boolean_spec.rb +48 -0
- data/spec/semipublic/property/class_spec.rb +36 -0
- data/spec/semipublic/property/date_spec.rb +44 -0
- data/spec/semipublic/property/date_time_spec.rb +47 -0
- data/spec/semipublic/property/decimal_spec.rb +83 -0
- data/spec/semipublic/property/discriminator_spec.rb +22 -0
- data/spec/semipublic/property/float_spec.rb +83 -0
- data/spec/semipublic/property/integer_spec.rb +83 -0
- data/spec/semipublic/property/lookup_spec.rb +27 -0
- data/spec/semipublic/property/serial_spec.rb +14 -0
- data/spec/semipublic/property/string_spec.rb +14 -0
- data/spec/semipublic/property/text_spec.rb +30 -0
- data/spec/semipublic/property/time_spec.rb +49 -0
- data/spec/semipublic/property_spec.rb +51 -0
- data/spec/shared/flags_shared_spec.rb +36 -0
- data/spec/shared/identity_function_group.rb +5 -0
- data/spec/shared/public_property_spec.rb +229 -0
- data/spec/shared/semipublic_property_spec.rb +159 -0
- data/spec/spec.opts +4 -0
- data/spec/spec_helper.rb +58 -0
- data/spec/unit/bcrypt_hash_spec.rb +154 -0
- data/spec/unit/csv_spec.rb +139 -0
- data/spec/unit/dirty_minder_spec.rb +64 -0
- data/spec/unit/enum_spec.rb +125 -0
- data/spec/unit/epoch_time_spec.rb +72 -0
- data/spec/unit/file_path_spec.rb +75 -0
- data/spec/unit/flag_spec.rb +114 -0
- data/spec/unit/ip_address_spec.rb +109 -0
- data/spec/unit/json_spec.rb +127 -0
- data/spec/unit/paranoid_boolean_spec.rb +142 -0
- data/spec/unit/paranoid_datetime_spec.rb +149 -0
- data/spec/unit/regexp_spec.rb +62 -0
- data/spec/unit/uri_spec.rb +64 -0
- data/spec/unit/yaml_spec.rb +111 -0
- data/tasks/spec.rake +40 -0
- data/tasks/yard.rake +9 -0
- data/tasks/yardstick.rake +19 -0
- metadata +350 -0
@@ -0,0 +1,197 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
try_spec do
|
4
|
+
|
5
|
+
# FIXME: DirtyMinder is currently unsupported on RBX, because unlike the other
|
6
|
+
# supported Rubies, RBX core class (e.g. Array, Hash) methods use #send(). In
|
7
|
+
# other words, the other Rubies don't use #send() (they map directly to their
|
8
|
+
# C functions).
|
9
|
+
#
|
10
|
+
# The current methodology takes advantage of this by using #send() to forward
|
11
|
+
# method invocations we've hooked. Supporting RBX will require finding
|
12
|
+
# another way, possibly for all Rubies. In the meantime, something is better
|
13
|
+
# than nothing.
|
14
|
+
next if defined?(RUBY_ENGINE) and RUBY_ENGINE == 'rbx'
|
15
|
+
|
16
|
+
require './spec/fixtures/person'
|
17
|
+
|
18
|
+
describe Ardm::Fixtures::Person do
|
19
|
+
before :each do
|
20
|
+
@resource = Ardm::Fixtures::Person.new(:name => 'Thomas Edison')
|
21
|
+
end
|
22
|
+
|
23
|
+
describe 'with positions indirectly mutated as a hash' do
|
24
|
+
before :each do
|
25
|
+
@resource.positions = {
|
26
|
+
'company' => "Soon To Be Dirty, LLC",
|
27
|
+
'title' => "Layperson",
|
28
|
+
'details' => { 'awesome' => true },
|
29
|
+
}
|
30
|
+
@resource.save!
|
31
|
+
@resource.reload
|
32
|
+
@resource.positions['title'].should == 'Layperson'
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "when I change positions" do
|
36
|
+
before :each do
|
37
|
+
@resource.changed?.should == false
|
38
|
+
@resource.positions['title'] = 'Chief Layer of People'
|
39
|
+
@resource.save!
|
40
|
+
@resource.reload
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should remember the new position" do
|
44
|
+
@resource.positions['title'].should == 'Chief Layer of People'
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe "when I add a new attribute of the position" do
|
49
|
+
before :each do
|
50
|
+
@resource.changed?.should == false
|
51
|
+
@resource.positions['pays_buttloads_of_money'] = true
|
52
|
+
@resource.save!
|
53
|
+
@resource.reload
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should remember the new attribute" do
|
57
|
+
@resource.positions['pays_buttloads_of_money'].should be_true
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe "when I change the details of the position" do
|
62
|
+
before :each do
|
63
|
+
@resource.changed?.should == false
|
64
|
+
@resource.positions['details'].merge!('awesome' => "VERY TRUE")
|
65
|
+
@resource.save!
|
66
|
+
@resource.reload
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should remember the changed detail" do
|
70
|
+
# Works in active record (unless something is fooling me)
|
71
|
+
#pending "not supported (YET)" do
|
72
|
+
# TODO: Not supported (yet?) -- this is a much harder problem to
|
73
|
+
# solve: using mutating accessors of nested objects. We could
|
74
|
+
# detect it from #dirty? (using the #hash method), but #dirty?
|
75
|
+
# only returns the status of known-mutated properties (not full,
|
76
|
+
# on-demand scan of object dirty-ness).
|
77
|
+
@resource.positions['details']['awesome'].should == 'VERY TRUE'
|
78
|
+
#end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
describe "when I reload the resource while the property is dirty" do
|
83
|
+
before :each do
|
84
|
+
@resource.positions['title'] = 'Chief Layer of People'
|
85
|
+
@resource.reload
|
86
|
+
end
|
87
|
+
|
88
|
+
it "should reflect the previously set/persisted value" do
|
89
|
+
@resource.positions.should_not be_nil
|
90
|
+
@resource.positions['title'].should == 'Layperson'
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
end # positions indirectly mutated as a hash
|
95
|
+
|
96
|
+
describe 'with positions indirectly mutated as an array' do
|
97
|
+
before :each do
|
98
|
+
@resource.positions = [
|
99
|
+
{ 'company' => "Soon To Be Dirty, LLC",
|
100
|
+
'title' => "Layperson",
|
101
|
+
'details' => { 'awesome' => true },
|
102
|
+
},
|
103
|
+
]
|
104
|
+
@resource.save!
|
105
|
+
@resource.reload
|
106
|
+
@resource.positions.first['title'].should == 'Layperson'
|
107
|
+
end
|
108
|
+
|
109
|
+
describe "when I remove the position" do
|
110
|
+
before :each do
|
111
|
+
@resource.changed?.should == false
|
112
|
+
@resource.positions.pop
|
113
|
+
@resource.save!
|
114
|
+
@resource.reload
|
115
|
+
end
|
116
|
+
|
117
|
+
it "should know there aren't any positions" do
|
118
|
+
@resource.positions.should == []
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
describe "when I add a new position" do
|
123
|
+
before :each do
|
124
|
+
@resource.changed?.should == false
|
125
|
+
@resource.positions << {
|
126
|
+
'company' => "Down and Dirty, LP",
|
127
|
+
'title' => "Porn Star",
|
128
|
+
'details' => { 'awesome' => "also true" },
|
129
|
+
}
|
130
|
+
@resource.save!
|
131
|
+
@resource.reload
|
132
|
+
end
|
133
|
+
|
134
|
+
it "should know there's two positions" do
|
135
|
+
@resource.positions.length.should == 2
|
136
|
+
end
|
137
|
+
|
138
|
+
it "should know which position is which" do
|
139
|
+
@resource.positions.first['title'].should == "Layperson"
|
140
|
+
@resource.positions.last['title'].should == "Porn Star"
|
141
|
+
end
|
142
|
+
|
143
|
+
describe "when I change the details of one of the positions" do
|
144
|
+
before :each do
|
145
|
+
@resource.positions.last['details'].merge!('high_risk' => true)
|
146
|
+
@resource.save!
|
147
|
+
@resource.reload
|
148
|
+
end
|
149
|
+
|
150
|
+
it "should remember the changed detail" do
|
151
|
+
# Works in active record (unless something is fooling me)
|
152
|
+
#pending "not supported (YET)" do
|
153
|
+
# TODO: Not supported (yet?) -- this is a much harder problem to
|
154
|
+
# solve: using mutating accessors of nested objects. We could
|
155
|
+
# detect it from #dirty? (using the #hash method), but #dirty?
|
156
|
+
# only returns the status of known-mutated properties (not full,
|
157
|
+
# on-demand scan of object dirty-ness).
|
158
|
+
@resource.positions.last['details']['high_risk'].should == true
|
159
|
+
#end
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end # when I add a new position
|
163
|
+
|
164
|
+
describe "when I remove the position with a block-based mutator" do
|
165
|
+
before :each do
|
166
|
+
@resource.changed?.should == false
|
167
|
+
@resource.positions.reject! { |_| true }
|
168
|
+
@resource.save!
|
169
|
+
@resource.reload
|
170
|
+
end
|
171
|
+
|
172
|
+
it "should know there aren't any positions" do
|
173
|
+
@resource.positions.should == []
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
describe "when I mutate positions through a reference" do
|
178
|
+
before :each do
|
179
|
+
@resource.changed?.should == false
|
180
|
+
@positions = @resource.positions
|
181
|
+
@positions << {
|
182
|
+
'company' => "Ooga Booga, Inc",
|
183
|
+
'title' => "Rocker",
|
184
|
+
}
|
185
|
+
end
|
186
|
+
|
187
|
+
it "should reflect the change in both the property and the reference" do
|
188
|
+
@resource.positions.length.should == 2
|
189
|
+
@resource.positions.last['title'].should == 'Rocker'
|
190
|
+
@positions.last['title'].should == 'Rocker'
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
end # positions indirectly mutated as an array
|
195
|
+
|
196
|
+
end
|
197
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
try_spec do
|
4
|
+
|
5
|
+
require './spec/fixtures/ticket'
|
6
|
+
|
7
|
+
describe Ardm::Fixtures::Ticket do
|
8
|
+
describe 'that is dumped and then loaded' do
|
9
|
+
before do
|
10
|
+
@resource = Ardm::Fixtures::Ticket.new(
|
11
|
+
:title => "Can't order by aggregated fields",
|
12
|
+
:id => 789,
|
13
|
+
:body => "I'm trying to use the aggregate method and sort the results by a summed field, but it doesn't work.",
|
14
|
+
:status => 'confirmed'
|
15
|
+
)
|
16
|
+
|
17
|
+
@resource.save.should be_true
|
18
|
+
@resource.reload
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'preserves property value' do
|
22
|
+
@resource.status.should == :confirmed
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe 'that is supplied a matching enumeration value' do
|
27
|
+
before do
|
28
|
+
@resource = Ardm::Fixtures::Ticket.new(:status => :assigned)
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'typecasts it for outside reader' do
|
32
|
+
@resource.status.should == :assigned
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe '#get' do
|
37
|
+
before do
|
38
|
+
@resource = Ardm::Fixtures::Ticket.new(
|
39
|
+
:title => '"sudo make install" of drizzle fails because it tries to chown mysql',
|
40
|
+
:id => 257497,
|
41
|
+
:body => "Note that at the very least, there should be a check to see whether or not the user is created before chown'ing a file to the user.",
|
42
|
+
:status => 'confirmed'
|
43
|
+
)
|
44
|
+
@resource.save.should be_true
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'supports queries with equality operator on enumeration property' do
|
48
|
+
Ardm::Fixtures::Ticket.where(:status => :confirmed).
|
49
|
+
should include(@resource)
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'supports queries with inequality operator on enumeration property' do
|
53
|
+
Ardm::Fixtures::Ticket.where.not(:status => :confirmed).
|
54
|
+
should_not include(@resource)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe 'with value unknown to enumeration property' do
|
59
|
+
before do
|
60
|
+
@resource = Ardm::Fixtures::Ticket.new(:status => :undecided)
|
61
|
+
@resource.valid?
|
62
|
+
end
|
63
|
+
|
64
|
+
# TODO: consider sharing shared spec exampels with dm-validations,
|
65
|
+
# which has 'invalid model' shared group
|
66
|
+
it 'is invalid (auto validation for :within kicks in)' do
|
67
|
+
@resource.should_not be_valid
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'has errors' do
|
71
|
+
@resource.errors.should_not be_empty
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'has a meaningful error message on invalid property' do
|
75
|
+
@resource.errors[:status].should include('must be one of unconfirmed, confirmed, assigned, resolved, not_applicable')
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
try_spec do
|
4
|
+
|
5
|
+
require './spec/fixtures/person'
|
6
|
+
|
7
|
+
describe Ardm::Fixtures::Person do
|
8
|
+
before do
|
9
|
+
@resource = Ardm::Fixtures::Person.new(:name => '')
|
10
|
+
end
|
11
|
+
|
12
|
+
describe 'with a birthday' do
|
13
|
+
before do
|
14
|
+
@resource.birthday = '1983-05-03'
|
15
|
+
end
|
16
|
+
|
17
|
+
describe 'after typecasting string input' do
|
18
|
+
it 'has a valid birthday' do
|
19
|
+
@resource.birthday.should == ::Time.parse('1983-05-03')
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe 'when dumped and loaded again' do
|
24
|
+
before do
|
25
|
+
@resource.save.should be_true
|
26
|
+
@resource.reload
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'has a valid birthday' do
|
30
|
+
@resource.birthday.should == ::Time.parse('1983-05-03')
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe 'without a birthday' do
|
36
|
+
before do
|
37
|
+
@resource.birthday = nil
|
38
|
+
end
|
39
|
+
|
40
|
+
describe 'after typecasting nil' do
|
41
|
+
it 'has a nil value for birthday' do
|
42
|
+
@resource.birthday.should be_nil
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe 'when dumped and loaded again' do
|
47
|
+
before do
|
48
|
+
@resource.save.should be_true
|
49
|
+
@resource.reload
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'has a nil value for birthday' do
|
53
|
+
@resource.birthday.should be_nil
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,158 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
try_spec do
|
4
|
+
|
5
|
+
require './spec/fixtures/software_package'
|
6
|
+
|
7
|
+
describe Ardm::Fixtures::SoftwarePackage do
|
8
|
+
describe 'with source path at /var/cache/apt/archives/linux-libc-dev_2.6.28-11.40_i386.deb' do
|
9
|
+
before do
|
10
|
+
@source_path = '/var/cache/apt/archives/linux-libc-dev_2.6.28-11.40_i386.deb'
|
11
|
+
@resource = Ardm::Fixtures::SoftwarePackage.new(:source_path => @source_path)
|
12
|
+
end
|
13
|
+
|
14
|
+
describe 'when is a new record' do
|
15
|
+
before do
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'points to original path' do
|
19
|
+
@resource.source_path.to_s.should == @source_path
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'responds to :directory?' do
|
23
|
+
@resource.source_path.should respond_to(:directory?)
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'responds to :file?' do
|
27
|
+
@resource.source_path.should respond_to(:file?)
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'responds to :dirname' do
|
31
|
+
@resource.source_path.should respond_to(:dirname)
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'responds to :absolute?' do
|
35
|
+
@resource.source_path.should respond_to(:absolute?)
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'responds to :readable?' do
|
39
|
+
@resource.source_path.should respond_to(:readable?)
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'responds to :size' do
|
43
|
+
@resource.source_path.should respond_to(:size)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe 'with destination path at /usr/local' do
|
49
|
+
before do
|
50
|
+
@destination_path = '/usr/local'
|
51
|
+
@resource = Ardm::Fixtures::SoftwarePackage.new(:destination_path => @destination_path)
|
52
|
+
end
|
53
|
+
|
54
|
+
describe 'when saved and reloaded' do
|
55
|
+
before do
|
56
|
+
@resource.save.should be_true
|
57
|
+
@resource.reload
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'points to original path' do
|
61
|
+
@resource.destination_path.to_s.should == @destination_path
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'responds to :directory?' do
|
65
|
+
@resource.destination_path.should respond_to(:directory?)
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'responds to :file?' do
|
69
|
+
@resource.destination_path.should respond_to(:file?)
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'responds to :dirname' do
|
73
|
+
@resource.destination_path.should respond_to(:dirname)
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'responds to :absolute?' do
|
77
|
+
@resource.destination_path.should respond_to(:absolute?)
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'responds to :readable?' do
|
81
|
+
@resource.destination_path.should respond_to(:readable?)
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'responds to :size' do
|
85
|
+
@resource.destination_path.should respond_to(:size)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
describe 'with no (nil) source path' do
|
91
|
+
before do
|
92
|
+
@source_path = nil
|
93
|
+
@resource = Ardm::Fixtures::SoftwarePackage.new(:source_path => @source_path)
|
94
|
+
end
|
95
|
+
|
96
|
+
describe 'when saved and reloaded' do
|
97
|
+
before do
|
98
|
+
@resource.save.should be_true
|
99
|
+
@resource.reload
|
100
|
+
end
|
101
|
+
|
102
|
+
it 'has nil source path' do
|
103
|
+
@resource.source_path.should be_nil
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
describe 'with a blank source path' do
|
109
|
+
before do
|
110
|
+
@source_path = ''
|
111
|
+
@resource = Ardm::Fixtures::SoftwarePackage.new(:source_path => @source_path)
|
112
|
+
end
|
113
|
+
|
114
|
+
describe 'when saved and reloaded' do
|
115
|
+
before do
|
116
|
+
@resource.save.should be_true
|
117
|
+
@resource.reload
|
118
|
+
end
|
119
|
+
|
120
|
+
it 'has nil source path' do
|
121
|
+
@resource.source_path.should be_nil
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
describe 'with a source path assigned to an empty array' do
|
127
|
+
before do
|
128
|
+
@source_path = []
|
129
|
+
@resource = Ardm::Fixtures::SoftwarePackage.new(:source_path => @source_path)
|
130
|
+
end
|
131
|
+
|
132
|
+
describe 'when saved and reloaded' do
|
133
|
+
before do
|
134
|
+
@resource.save.should be_true
|
135
|
+
@resource.reload
|
136
|
+
end
|
137
|
+
|
138
|
+
it 'has nil source path' do
|
139
|
+
@resource.source_path.should be_nil
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
describe 'with a source path assigned to a Hash' do
|
145
|
+
before do
|
146
|
+
@source_path = { :guitar => 'Joe Satriani' }
|
147
|
+
end
|
148
|
+
|
149
|
+
describe 'when instantiated' do
|
150
|
+
it 'raises an exception' do
|
151
|
+
lambda do
|
152
|
+
Ardm::Fixtures::SoftwarePackage.new(:source_path => @source_path)
|
153
|
+
end.should raise_error(TypeError)
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
try_spec do
|
4
|
+
|
5
|
+
require './spec/fixtures/tshirt'
|
6
|
+
|
7
|
+
describe Ardm::Fixtures::TShirt do
|
8
|
+
before do
|
9
|
+
@resource = Ardm::Fixtures::TShirt.new(
|
10
|
+
:writing => 'Fork you',
|
11
|
+
:has_picture => true,
|
12
|
+
:picture => :octocat,
|
13
|
+
:color => :white
|
14
|
+
)
|
15
|
+
end
|
16
|
+
|
17
|
+
describe 'with the default value' do
|
18
|
+
it 'returns it as an array' do
|
19
|
+
pending "FIXME: This probably should pass" do
|
20
|
+
@resource.size.should eq([Ardm::Fixtures::TShirt.properties[:size].default])
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe 'with multiple sizes' do
|
26
|
+
describe 'dumped and loaded' do
|
27
|
+
before do
|
28
|
+
@resource.size = [ :xs, :medium ]
|
29
|
+
@resource.save.should be_true
|
30
|
+
@resource.reload
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'returns size as array' do
|
34
|
+
@resource.size.should == [ :xs, :medium ]
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe 'with a single size' do
|
40
|
+
before do
|
41
|
+
@resource.size = :large
|
42
|
+
end
|
43
|
+
|
44
|
+
describe 'dumped and loaded' do
|
45
|
+
before do
|
46
|
+
@resource.save.should be_true
|
47
|
+
@resource.reload
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'returns size as array with a single value' do
|
51
|
+
@resource.size.should == [:large]
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
# Flag does not add any auto validations
|
57
|
+
describe 'without size' do
|
58
|
+
before do
|
59
|
+
@resource.should be_valid
|
60
|
+
@resource.size = nil
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'is valid' do
|
64
|
+
@resource.should be_valid
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'has no errors' do
|
68
|
+
@resource.errors.should be_empty
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|