offroad 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +674 -674
- data/README.rdoc +29 -29
- data/Rakefile +75 -75
- data/TODO +42 -42
- data/lib/app/models/offroad/group_state.rb +85 -85
- data/lib/app/models/offroad/mirror_info.rb +53 -53
- data/lib/app/models/offroad/model_state.rb +36 -36
- data/lib/app/models/offroad/received_record_state.rb +115 -115
- data/lib/app/models/offroad/sendable_record_state.rb +91 -91
- data/lib/app/models/offroad/system_state.rb +33 -33
- data/lib/cargo_streamer.rb +222 -222
- data/lib/controller_extensions.rb +74 -74
- data/lib/exceptions.rb +16 -16
- data/lib/migrate/20100512164608_create_offroad_tables.rb +72 -72
- data/lib/mirror_data.rb +376 -376
- data/lib/model_extensions.rb +378 -377
- data/lib/module_funcs.rb +94 -94
- data/lib/offroad.rb +41 -41
- data/lib/version.rb +3 -3
- data/lib/view_helper.rb +7 -7
- data/templates/offline.rb +36 -36
- data/templates/offline_database.yml +7 -7
- data/templates/offroad.yml +6 -6
- data/test/app_root/app/controllers/application_controller.rb +2 -2
- data/test/app_root/app/controllers/group_controller.rb +28 -28
- data/test/app_root/app/models/global_record.rb +10 -10
- data/test/app_root/app/models/group.rb +12 -12
- data/test/app_root/app/models/group_owned_record.rb +68 -68
- data/test/app_root/app/models/guest.rb +7 -7
- data/test/app_root/app/models/subrecord.rb +12 -12
- data/test/app_root/app/models/unmirrored_record.rb +4 -4
- data/test/app_root/app/views/group/download_down_mirror.html.erb +3 -3
- data/test/app_root/app/views/group/download_initial_down_mirror.html.erb +3 -3
- data/test/app_root/app/views/group/download_up_mirror.html.erb +5 -5
- data/test/app_root/app/views/layouts/mirror.html.erb +8 -8
- data/test/app_root/config/boot.rb +115 -115
- data/test/app_root/config/database-pg.yml +8 -8
- data/test/app_root/config/database.yml +5 -5
- data/test/app_root/config/environment.rb +24 -24
- data/test/app_root/config/environments/test.rb +17 -17
- data/test/app_root/config/offroad.yml +6 -6
- data/test/app_root/config/routes.rb +4 -4
- data/test/app_root/db/migrate/20100529235049_create_tables.rb +64 -64
- data/test/app_root/lib/common_hobo.rb +15 -15
- data/test/app_root/vendor/plugins/offroad/init.rb +2 -2
- data/test/functional/mirror_operations_test.rb +148 -148
- data/test/test_helper.rb +453 -453
- data/test/unit/app_state_tracking_test.rb +275 -275
- data/test/unit/cargo_streamer_test.rb +332 -332
- data/test/unit/global_data_test.rb +102 -102
- data/test/unit/group_controller_test.rb +152 -152
- data/test/unit/group_data_test.rb +442 -435
- data/test/unit/group_single_test.rb +136 -136
- data/test/unit/hobo_permissions_test.rb +57 -57
- data/test/unit/mirror_data_test.rb +1283 -1283
- data/test/unit/mirror_info_test.rb +31 -31
- data/test/unit/module_funcs_test.rb +37 -37
- data/test/unit/pathological_model_test.rb +62 -62
- data/test/unit/test_framework_test.rb +86 -86
- data/test/unit/unmirrored_data_test.rb +14 -14
- metadata +6 -8
@@ -1,275 +1,275 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
2
|
-
|
3
|
-
# This is a unit test for all the Offroad internal models whose names end with "State"
|
4
|
-
|
5
|
-
class AppStateTrackingTest < Test::Unit::TestCase
|
6
|
-
def assert_newly_created_record_matches_srs(rec, rec_srs)
|
7
|
-
assert_equal rec.id, rec_srs.local_record_id, "SendableRecordState has correct record id"
|
8
|
-
assert_equal Offroad::SystemState::current_mirror_version, rec_srs.mirror_version
|
9
|
-
end
|
10
|
-
|
11
|
-
online_test "group state data is created when online group is made offline" do
|
12
|
-
prior_group_state_count = Offroad::GroupState::count
|
13
|
-
rec = Group.create(:name => "Foo Bar")
|
14
|
-
|
15
|
-
assert_nil Offroad::GroupState::find_by_app_group_id(rec.id)
|
16
|
-
rec.group_offline = true
|
17
|
-
group_state = Offroad::GroupState::find_by_app_group_id(rec.id)
|
18
|
-
assert group_state
|
19
|
-
assert_equal prior_group_state_count+1, Offroad::GroupState::count, "GroupState was created on demand"
|
20
|
-
assert_equal rec.id, group_state.app_group_id, "GroupState has correct app group id"
|
21
|
-
assert_equal 1, group_state.confirmed_group_data_version, "Newly offline group has an group data version of 1"
|
22
|
-
assert_equal Offroad::SystemState::current_mirror_version, group_state.confirmed_global_data_version
|
23
|
-
end
|
24
|
-
|
25
|
-
online_test "can change offline state of groups" do
|
26
|
-
assert @online_group.group_online?
|
27
|
-
assert_equal false, @online_group.group_offline?
|
28
|
-
@online_group.group_offline = true
|
29
|
-
assert @online_group.group_offline?
|
30
|
-
assert_equal false, @online_group.group_online?
|
31
|
-
|
32
|
-
assert @offline_group.group_offline?
|
33
|
-
assert_equal false, @offline_group.group_online?
|
34
|
-
@offline_group.group_offline = false
|
35
|
-
assert @offline_group.group_online?
|
36
|
-
assert_equal false, @offline_group.group_offline?
|
37
|
-
end
|
38
|
-
|
39
|
-
online_test "state data is destroyed when offline group is made online" do
|
40
|
-
group_state_id = @offline_group.group_state.id
|
41
|
-
assert_not_equal 0, Offroad::ReceivedRecordState.all(:conditions => {:group_state_id => group_state_id}).count
|
42
|
-
@offline_group.group_offline = false
|
43
|
-
assert_nil Offroad::GroupState::find_by_app_group_id(@offline_group.id)
|
44
|
-
assert_equal 0, Offroad::ReceivedRecordState.all(:conditions => {:group_state_id => group_state_id}).count
|
45
|
-
end
|
46
|
-
|
47
|
-
offline_test "creating group owned record causes creation of valid sendable record state" do
|
48
|
-
rec = GroupOwnedRecord.create(:description => "Foo Bar", :group => @offline_group)
|
49
|
-
|
50
|
-
rec_state = Offroad::SendableRecordState.for_record(rec).first
|
51
|
-
assert rec_state
|
52
|
-
assert_equal "GroupOwnedRecord", rec_state.model_state.app_model_name, "ModelState has correct model name"
|
53
|
-
assert_newly_created_record_matches_srs(rec, rec_state)
|
54
|
-
end
|
55
|
-
|
56
|
-
online_test "creating group owned record does not cause creation of sendable record state" do
|
57
|
-
rec = GroupOwnedRecord.create(:description => "Foo Bar", :group => @online_group)
|
58
|
-
assert_equal nil, Offroad::SendableRecordState.for_record(rec).first
|
59
|
-
end
|
60
|
-
|
61
|
-
offline_test "creating indirectly group owned record causes creation of valid sendable record state" do
|
62
|
-
rec = SubRecord.create(:description => "Foo Bar", :group_owned_record => @offline_group_data)
|
63
|
-
|
64
|
-
rec_state = Offroad::SendableRecordState.for_record(rec).first
|
65
|
-
assert rec_state
|
66
|
-
assert_equal "SubRecord", rec_state.model_state.app_model_name, "ModelState has correct model name"
|
67
|
-
assert_newly_created_record_matches_srs(rec, rec_state)
|
68
|
-
end
|
69
|
-
|
70
|
-
online_test "creating indirectly group owned record does not cause creation of sendable record state" do
|
71
|
-
rec = SubRecord.create(:description => "Foo Bar", :group_owned_record => @online_group_data)
|
72
|
-
assert_equal nil, Offroad::SendableRecordState.for_record(rec).first
|
73
|
-
end
|
74
|
-
|
75
|
-
online_test "creating global record causes creation of valid sendable record state data" do
|
76
|
-
assert_nothing_raised "No pre-existing SendableRecordStates for GlobalRecord" do
|
77
|
-
Offroad::SendableRecordState::find(:all, :include => [ :model_state]).each do |rec|
|
78
|
-
raise "Already a GlobalRecord state entry!" if rec.model_state.app_model_name == "GlobalRecord"
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
rec = GlobalRecord.create(:title => "Foo Bar")
|
83
|
-
|
84
|
-
rec_state = Offroad::SendableRecordState.for_record(rec).first
|
85
|
-
assert rec_state, "SendableRecordState was created when record was created"
|
86
|
-
assert_equal "GlobalRecord", rec_state.model_state.app_model_name, "ModelState has correct model name"
|
87
|
-
assert_newly_created_record_matches_srs(rec, rec_state)
|
88
|
-
end
|
89
|
-
|
90
|
-
def assert_only_changing_attribute_causes_version_change(model, attribute, rec)
|
91
|
-
rec_state = Offroad::SendableRecordState.for_record(rec).first
|
92
|
-
original_version = rec_state.mirror_version
|
93
|
-
system_state = Offroad::SystemState::instance_record
|
94
|
-
system_state.current_mirror_version = original_version + 42
|
95
|
-
system_state.save
|
96
|
-
|
97
|
-
rec.save!
|
98
|
-
rec_state.reload
|
99
|
-
assert_equal original_version, rec_state.mirror_version, "Save without changes did not affect record version"
|
100
|
-
|
101
|
-
rec.send((attribute.to_s + "=").to_sym, "Narf Bork")
|
102
|
-
rec.save!
|
103
|
-
rec_state.reload
|
104
|
-
assert_equal original_version+42, rec_state.mirror_version, "Save with changes updated record's version"
|
105
|
-
end
|
106
|
-
|
107
|
-
online_test "saving global record updates mirror version only on changed records" do
|
108
|
-
rec = GlobalRecord.create(:title => "Foo Bar")
|
109
|
-
assert_only_changing_attribute_causes_version_change(GlobalRecord, :title, rec)
|
110
|
-
end
|
111
|
-
|
112
|
-
offline_test "saving group base record updates mirror version only on changed records" do
|
113
|
-
assert_only_changing_attribute_causes_version_change(Group, :name, @offline_group)
|
114
|
-
end
|
115
|
-
|
116
|
-
offline_test "saving group owned record updates mirror version only on changed records" do
|
117
|
-
assert_only_changing_attribute_causes_version_change(GroupOwnedRecord, :description, @offline_group_data)
|
118
|
-
end
|
119
|
-
|
120
|
-
offline_test "saving indirectly owned recored updates mirror version only on changed records" do
|
121
|
-
assert_only_changing_attribute_causes_version_change(SubRecord, :description, @offline_indirect_data)
|
122
|
-
end
|
123
|
-
|
124
|
-
def assert_deleting_record_correctly_updated_record_state(rec)
|
125
|
-
rec_state = Offroad::SendableRecordState.for_record(rec).first
|
126
|
-
assert_equal false, rec_state.deleted, "By default deleted flag is false"
|
127
|
-
original_version = rec_state.mirror_version
|
128
|
-
system_state = Offroad::SystemState::instance_record
|
129
|
-
system_state.current_mirror_version = original_version + 42
|
130
|
-
system_state.save
|
131
|
-
|
132
|
-
rec.destroy
|
133
|
-
rec_state.reload
|
134
|
-
assert_equal original_version+42, rec_state.mirror_version, "Deleting record updated version"
|
135
|
-
assert_equal true, rec_state.deleted, "Deleting record deleted flag to true"
|
136
|
-
end
|
137
|
-
|
138
|
-
online_test "deleting global record updates mirror version" do
|
139
|
-
rec = GlobalRecord.create(:title => "Foo Bar")
|
140
|
-
assert_deleting_record_correctly_updated_record_state(rec)
|
141
|
-
end
|
142
|
-
|
143
|
-
offline_test "deleting group owned record updates mirror version" do
|
144
|
-
assert_deleting_record_correctly_updated_record_state(@editable_group_data)
|
145
|
-
end
|
146
|
-
|
147
|
-
offline_test "deleting indirectly group owned record updates mirror version" do
|
148
|
-
assert_deleting_record_correctly_updated_record_state(@editable_indirect_data)
|
149
|
-
end
|
150
|
-
|
151
|
-
online_test "deleting offline group base record deletes corresponding group state" do
|
152
|
-
assert_not_nil Offroad::GroupState::find_by_app_group_id(@offline_group)
|
153
|
-
@offline_group.destroy
|
154
|
-
assert_nil Offroad::GroupState::find_by_app_group_id(@offline_group)
|
155
|
-
end
|
156
|
-
|
157
|
-
online_test "can only create valid group state of saved group records that are :group_base" do
|
158
|
-
assert_equal false, Offroad::GroupState::for_group(@editable_group_data).new.valid?
|
159
|
-
|
160
|
-
new_group = Group.new(:name => "Test")
|
161
|
-
assert_equal false, Offroad::GroupState::for_group(new_group).new.valid?
|
162
|
-
new_group.save!
|
163
|
-
assert Offroad::GroupState::for_group(new_group).new.valid?
|
164
|
-
end
|
165
|
-
|
166
|
-
double_test "cannot create valid model state of unmirrored models" do
|
167
|
-
model_state = Offroad::ModelState::for_model(GlobalRecord).new
|
168
|
-
assert model_state.valid?
|
169
|
-
|
170
|
-
model_state = Offroad::ModelState::for_model(UnmirroredRecord).new
|
171
|
-
assert_equal false, model_state.valid?
|
172
|
-
end
|
173
|
-
|
174
|
-
double_test "cannot create valid model state of non-existent models" do
|
175
|
-
model_state = Offroad::ModelState::for_model(nil).new
|
176
|
-
assert_equal false, model_state.valid?
|
177
|
-
|
178
|
-
model_state = Offroad::ModelState::new(:app_model_name => "this is not a constant name")
|
179
|
-
assert_equal false, model_state.valid?
|
180
|
-
|
181
|
-
model_state = Offroad::ModelState::new(:app_model_name => "NonExistantConstant")
|
182
|
-
assert_equal false, model_state.valid?
|
183
|
-
end
|
184
|
-
|
185
|
-
double_test "cannot create valid received record state of records of unmirrored models" do
|
186
|
-
unmirrored_rec = UnmirroredRecord.create!(:content => "Test")
|
187
|
-
assert_equal false, Offroad::ReceivedRecordState.for_record(unmirrored_rec).new.valid?
|
188
|
-
end
|
189
|
-
|
190
|
-
double_test "cannot create valid sendable record state of records of unmirrored models" do
|
191
|
-
unmirrored_rec = UnmirroredRecord.create!(:content => "Test")
|
192
|
-
assert_equal false, Offroad::SendableRecordState.for_record(unmirrored_rec).new.valid?
|
193
|
-
end
|
194
|
-
|
195
|
-
online_test "cannot create valid received record state of online group data records" do
|
196
|
-
rrs = Offroad::ReceivedRecordState.for_record(@online_group_data).new(:remote_record_id => 1)
|
197
|
-
assert_equal false, rrs.valid?
|
198
|
-
end
|
199
|
-
|
200
|
-
online_test "cannot create valid received record state of online indirect group data records" do
|
201
|
-
rrs = Offroad::ReceivedRecordState.for_record(@online_indirect_data).new(:remote_record_id => 1)
|
202
|
-
assert_equal false, rrs.valid?
|
203
|
-
end
|
204
|
-
|
205
|
-
online_test "cannot create valid sendable record state of group records" do
|
206
|
-
srs_scope = Offroad::SendableRecordState.for_model(Group)
|
207
|
-
srs = srs_scope.new(:local_record_id => @offline_group.id)
|
208
|
-
assert_equal false, srs.valid?
|
209
|
-
end
|
210
|
-
|
211
|
-
online_test "cannot create valid sendable record state of group data records" do
|
212
|
-
srs_scope = Offroad::SendableRecordState.for_model(GroupOwnedRecord)
|
213
|
-
srs = srs_scope.new(:local_record_id => @offline_group_data.id)
|
214
|
-
assert_equal false, srs.valid?
|
215
|
-
end
|
216
|
-
|
217
|
-
online_test "cannot create valid sendable record state of indirect group data records" do
|
218
|
-
srs_scope = Offroad::SendableRecordState.for_model(SubRecord)
|
219
|
-
srs = srs_scope.new(:local_record_id => @offline_indirect_data.id)
|
220
|
-
assert_equal false, srs.valid?
|
221
|
-
end
|
222
|
-
|
223
|
-
online_test "cannot create valid received record state of global data records" do
|
224
|
-
global_rec = GlobalRecord.create(:title => "Testing")
|
225
|
-
rrs_scope = Offroad::ReceivedRecordState.for_model(GlobalRecord)
|
226
|
-
rrs = rrs_scope.new(:local_record_id => global_rec.id, :remote_record_id => 1)
|
227
|
-
assert_equal false, rrs.valid?
|
228
|
-
end
|
229
|
-
|
230
|
-
offline_test "cannot create valid received record state of group data records" do
|
231
|
-
rrs = Offroad::ReceivedRecordState.for_record(@offline_group_data).new(:remote_record_id => 1)
|
232
|
-
assert_equal false, rrs.valid?
|
233
|
-
end
|
234
|
-
|
235
|
-
offline_test "cannot create valid received record state of indirect group data records" do
|
236
|
-
rrs = Offroad::ReceivedRecordState.for_record(@offline_indirect_data).new(:remote_record_id => 1)
|
237
|
-
assert_equal false, rrs.valid?
|
238
|
-
end
|
239
|
-
|
240
|
-
offline_test "cannot create valid sendable record state of global data records" do
|
241
|
-
global_rec = GlobalRecord.new(:title => "Testing")
|
242
|
-
force_save_and_reload(global_rec)
|
243
|
-
srs_scope = Offroad::SendableRecordState.for_model(GlobalRecord)
|
244
|
-
srs = srs_scope.new(:local_record_id => global_rec.id)
|
245
|
-
assert_equal false, srs.valid?
|
246
|
-
end
|
247
|
-
|
248
|
-
offline_test "cannot create valid received record state of global data records if associated with a group" do
|
249
|
-
global_rec = GlobalRecord.new(:title => "Testing")
|
250
|
-
force_save_and_reload(global_rec)
|
251
|
-
rrs = Offroad::ReceivedRecordState.for_record(global_rec).new(:remote_record_id => 1)
|
252
|
-
rrs.group_state = @offline_group.group_state
|
253
|
-
assert_equal false, rrs.valid?
|
254
|
-
end
|
255
|
-
|
256
|
-
online_test "cannot create valid received record state of unsaved records" do
|
257
|
-
group_data = GroupOwnedRecord.new(:description => "Test", :group => @offline_group)
|
258
|
-
rrs = Offroad::ReceivedRecordState.for_record(group_data).new(:remote_record_id => 1)
|
259
|
-
assert_equal false, rrs.valid?
|
260
|
-
end
|
261
|
-
|
262
|
-
online_test "cannot create valid sendable record state of unsaved records" do
|
263
|
-
global_data = GlobalRecord.new(:title => "Test")
|
264
|
-
srs = Offroad::SendableRecordState.for_record(global_data).new
|
265
|
-
assert_equal false, srs.valid?
|
266
|
-
end
|
267
|
-
|
268
|
-
double_test "can auto-generate system settings" do
|
269
|
-
Offroad::SystemState.instance_record.destroy
|
270
|
-
|
271
|
-
assert_nothing_raised do
|
272
|
-
Offroad::SystemState.instance_record
|
273
|
-
end
|
274
|
-
end
|
275
|
-
end
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
2
|
+
|
3
|
+
# This is a unit test for all the Offroad internal models whose names end with "State"
|
4
|
+
|
5
|
+
class AppStateTrackingTest < Test::Unit::TestCase
|
6
|
+
def assert_newly_created_record_matches_srs(rec, rec_srs)
|
7
|
+
assert_equal rec.id, rec_srs.local_record_id, "SendableRecordState has correct record id"
|
8
|
+
assert_equal Offroad::SystemState::current_mirror_version, rec_srs.mirror_version
|
9
|
+
end
|
10
|
+
|
11
|
+
online_test "group state data is created when online group is made offline" do
|
12
|
+
prior_group_state_count = Offroad::GroupState::count
|
13
|
+
rec = Group.create(:name => "Foo Bar")
|
14
|
+
|
15
|
+
assert_nil Offroad::GroupState::find_by_app_group_id(rec.id)
|
16
|
+
rec.group_offline = true
|
17
|
+
group_state = Offroad::GroupState::find_by_app_group_id(rec.id)
|
18
|
+
assert group_state
|
19
|
+
assert_equal prior_group_state_count+1, Offroad::GroupState::count, "GroupState was created on demand"
|
20
|
+
assert_equal rec.id, group_state.app_group_id, "GroupState has correct app group id"
|
21
|
+
assert_equal 1, group_state.confirmed_group_data_version, "Newly offline group has an group data version of 1"
|
22
|
+
assert_equal Offroad::SystemState::current_mirror_version, group_state.confirmed_global_data_version
|
23
|
+
end
|
24
|
+
|
25
|
+
online_test "can change offline state of groups" do
|
26
|
+
assert @online_group.group_online?
|
27
|
+
assert_equal false, @online_group.group_offline?
|
28
|
+
@online_group.group_offline = true
|
29
|
+
assert @online_group.group_offline?
|
30
|
+
assert_equal false, @online_group.group_online?
|
31
|
+
|
32
|
+
assert @offline_group.group_offline?
|
33
|
+
assert_equal false, @offline_group.group_online?
|
34
|
+
@offline_group.group_offline = false
|
35
|
+
assert @offline_group.group_online?
|
36
|
+
assert_equal false, @offline_group.group_offline?
|
37
|
+
end
|
38
|
+
|
39
|
+
online_test "state data is destroyed when offline group is made online" do
|
40
|
+
group_state_id = @offline_group.group_state.id
|
41
|
+
assert_not_equal 0, Offroad::ReceivedRecordState.all(:conditions => {:group_state_id => group_state_id}).count
|
42
|
+
@offline_group.group_offline = false
|
43
|
+
assert_nil Offroad::GroupState::find_by_app_group_id(@offline_group.id)
|
44
|
+
assert_equal 0, Offroad::ReceivedRecordState.all(:conditions => {:group_state_id => group_state_id}).count
|
45
|
+
end
|
46
|
+
|
47
|
+
offline_test "creating group owned record causes creation of valid sendable record state" do
|
48
|
+
rec = GroupOwnedRecord.create(:description => "Foo Bar", :group => @offline_group)
|
49
|
+
|
50
|
+
rec_state = Offroad::SendableRecordState.for_record(rec).first
|
51
|
+
assert rec_state
|
52
|
+
assert_equal "GroupOwnedRecord", rec_state.model_state.app_model_name, "ModelState has correct model name"
|
53
|
+
assert_newly_created_record_matches_srs(rec, rec_state)
|
54
|
+
end
|
55
|
+
|
56
|
+
online_test "creating group owned record does not cause creation of sendable record state" do
|
57
|
+
rec = GroupOwnedRecord.create(:description => "Foo Bar", :group => @online_group)
|
58
|
+
assert_equal nil, Offroad::SendableRecordState.for_record(rec).first
|
59
|
+
end
|
60
|
+
|
61
|
+
offline_test "creating indirectly group owned record causes creation of valid sendable record state" do
|
62
|
+
rec = SubRecord.create(:description => "Foo Bar", :group_owned_record => @offline_group_data)
|
63
|
+
|
64
|
+
rec_state = Offroad::SendableRecordState.for_record(rec).first
|
65
|
+
assert rec_state
|
66
|
+
assert_equal "SubRecord", rec_state.model_state.app_model_name, "ModelState has correct model name"
|
67
|
+
assert_newly_created_record_matches_srs(rec, rec_state)
|
68
|
+
end
|
69
|
+
|
70
|
+
online_test "creating indirectly group owned record does not cause creation of sendable record state" do
|
71
|
+
rec = SubRecord.create(:description => "Foo Bar", :group_owned_record => @online_group_data)
|
72
|
+
assert_equal nil, Offroad::SendableRecordState.for_record(rec).first
|
73
|
+
end
|
74
|
+
|
75
|
+
online_test "creating global record causes creation of valid sendable record state data" do
|
76
|
+
assert_nothing_raised "No pre-existing SendableRecordStates for GlobalRecord" do
|
77
|
+
Offroad::SendableRecordState::find(:all, :include => [ :model_state]).each do |rec|
|
78
|
+
raise "Already a GlobalRecord state entry!" if rec.model_state.app_model_name == "GlobalRecord"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
rec = GlobalRecord.create(:title => "Foo Bar")
|
83
|
+
|
84
|
+
rec_state = Offroad::SendableRecordState.for_record(rec).first
|
85
|
+
assert rec_state, "SendableRecordState was created when record was created"
|
86
|
+
assert_equal "GlobalRecord", rec_state.model_state.app_model_name, "ModelState has correct model name"
|
87
|
+
assert_newly_created_record_matches_srs(rec, rec_state)
|
88
|
+
end
|
89
|
+
|
90
|
+
def assert_only_changing_attribute_causes_version_change(model, attribute, rec)
|
91
|
+
rec_state = Offroad::SendableRecordState.for_record(rec).first
|
92
|
+
original_version = rec_state.mirror_version
|
93
|
+
system_state = Offroad::SystemState::instance_record
|
94
|
+
system_state.current_mirror_version = original_version + 42
|
95
|
+
system_state.save
|
96
|
+
|
97
|
+
rec.save!
|
98
|
+
rec_state.reload
|
99
|
+
assert_equal original_version, rec_state.mirror_version, "Save without changes did not affect record version"
|
100
|
+
|
101
|
+
rec.send((attribute.to_s + "=").to_sym, "Narf Bork")
|
102
|
+
rec.save!
|
103
|
+
rec_state.reload
|
104
|
+
assert_equal original_version+42, rec_state.mirror_version, "Save with changes updated record's version"
|
105
|
+
end
|
106
|
+
|
107
|
+
online_test "saving global record updates mirror version only on changed records" do
|
108
|
+
rec = GlobalRecord.create(:title => "Foo Bar")
|
109
|
+
assert_only_changing_attribute_causes_version_change(GlobalRecord, :title, rec)
|
110
|
+
end
|
111
|
+
|
112
|
+
offline_test "saving group base record updates mirror version only on changed records" do
|
113
|
+
assert_only_changing_attribute_causes_version_change(Group, :name, @offline_group)
|
114
|
+
end
|
115
|
+
|
116
|
+
offline_test "saving group owned record updates mirror version only on changed records" do
|
117
|
+
assert_only_changing_attribute_causes_version_change(GroupOwnedRecord, :description, @offline_group_data)
|
118
|
+
end
|
119
|
+
|
120
|
+
offline_test "saving indirectly owned recored updates mirror version only on changed records" do
|
121
|
+
assert_only_changing_attribute_causes_version_change(SubRecord, :description, @offline_indirect_data)
|
122
|
+
end
|
123
|
+
|
124
|
+
def assert_deleting_record_correctly_updated_record_state(rec)
|
125
|
+
rec_state = Offroad::SendableRecordState.for_record(rec).first
|
126
|
+
assert_equal false, rec_state.deleted, "By default deleted flag is false"
|
127
|
+
original_version = rec_state.mirror_version
|
128
|
+
system_state = Offroad::SystemState::instance_record
|
129
|
+
system_state.current_mirror_version = original_version + 42
|
130
|
+
system_state.save
|
131
|
+
|
132
|
+
rec.destroy
|
133
|
+
rec_state.reload
|
134
|
+
assert_equal original_version+42, rec_state.mirror_version, "Deleting record updated version"
|
135
|
+
assert_equal true, rec_state.deleted, "Deleting record deleted flag to true"
|
136
|
+
end
|
137
|
+
|
138
|
+
online_test "deleting global record updates mirror version" do
|
139
|
+
rec = GlobalRecord.create(:title => "Foo Bar")
|
140
|
+
assert_deleting_record_correctly_updated_record_state(rec)
|
141
|
+
end
|
142
|
+
|
143
|
+
offline_test "deleting group owned record updates mirror version" do
|
144
|
+
assert_deleting_record_correctly_updated_record_state(@editable_group_data)
|
145
|
+
end
|
146
|
+
|
147
|
+
offline_test "deleting indirectly group owned record updates mirror version" do
|
148
|
+
assert_deleting_record_correctly_updated_record_state(@editable_indirect_data)
|
149
|
+
end
|
150
|
+
|
151
|
+
online_test "deleting offline group base record deletes corresponding group state" do
|
152
|
+
assert_not_nil Offroad::GroupState::find_by_app_group_id(@offline_group)
|
153
|
+
@offline_group.destroy
|
154
|
+
assert_nil Offroad::GroupState::find_by_app_group_id(@offline_group)
|
155
|
+
end
|
156
|
+
|
157
|
+
online_test "can only create valid group state of saved group records that are :group_base" do
|
158
|
+
assert_equal false, Offroad::GroupState::for_group(@editable_group_data).new.valid?
|
159
|
+
|
160
|
+
new_group = Group.new(:name => "Test")
|
161
|
+
assert_equal false, Offroad::GroupState::for_group(new_group).new.valid?
|
162
|
+
new_group.save!
|
163
|
+
assert Offroad::GroupState::for_group(new_group).new.valid?
|
164
|
+
end
|
165
|
+
|
166
|
+
double_test "cannot create valid model state of unmirrored models" do
|
167
|
+
model_state = Offroad::ModelState::for_model(GlobalRecord).new
|
168
|
+
assert model_state.valid?
|
169
|
+
|
170
|
+
model_state = Offroad::ModelState::for_model(UnmirroredRecord).new
|
171
|
+
assert_equal false, model_state.valid?
|
172
|
+
end
|
173
|
+
|
174
|
+
double_test "cannot create valid model state of non-existent models" do
|
175
|
+
model_state = Offroad::ModelState::for_model(nil).new
|
176
|
+
assert_equal false, model_state.valid?
|
177
|
+
|
178
|
+
model_state = Offroad::ModelState::new(:app_model_name => "this is not a constant name")
|
179
|
+
assert_equal false, model_state.valid?
|
180
|
+
|
181
|
+
model_state = Offroad::ModelState::new(:app_model_name => "NonExistantConstant")
|
182
|
+
assert_equal false, model_state.valid?
|
183
|
+
end
|
184
|
+
|
185
|
+
double_test "cannot create valid received record state of records of unmirrored models" do
|
186
|
+
unmirrored_rec = UnmirroredRecord.create!(:content => "Test")
|
187
|
+
assert_equal false, Offroad::ReceivedRecordState.for_record(unmirrored_rec).new.valid?
|
188
|
+
end
|
189
|
+
|
190
|
+
double_test "cannot create valid sendable record state of records of unmirrored models" do
|
191
|
+
unmirrored_rec = UnmirroredRecord.create!(:content => "Test")
|
192
|
+
assert_equal false, Offroad::SendableRecordState.for_record(unmirrored_rec).new.valid?
|
193
|
+
end
|
194
|
+
|
195
|
+
online_test "cannot create valid received record state of online group data records" do
|
196
|
+
rrs = Offroad::ReceivedRecordState.for_record(@online_group_data).new(:remote_record_id => 1)
|
197
|
+
assert_equal false, rrs.valid?
|
198
|
+
end
|
199
|
+
|
200
|
+
online_test "cannot create valid received record state of online indirect group data records" do
|
201
|
+
rrs = Offroad::ReceivedRecordState.for_record(@online_indirect_data).new(:remote_record_id => 1)
|
202
|
+
assert_equal false, rrs.valid?
|
203
|
+
end
|
204
|
+
|
205
|
+
online_test "cannot create valid sendable record state of group records" do
|
206
|
+
srs_scope = Offroad::SendableRecordState.for_model(Group)
|
207
|
+
srs = srs_scope.new(:local_record_id => @offline_group.id)
|
208
|
+
assert_equal false, srs.valid?
|
209
|
+
end
|
210
|
+
|
211
|
+
online_test "cannot create valid sendable record state of group data records" do
|
212
|
+
srs_scope = Offroad::SendableRecordState.for_model(GroupOwnedRecord)
|
213
|
+
srs = srs_scope.new(:local_record_id => @offline_group_data.id)
|
214
|
+
assert_equal false, srs.valid?
|
215
|
+
end
|
216
|
+
|
217
|
+
online_test "cannot create valid sendable record state of indirect group data records" do
|
218
|
+
srs_scope = Offroad::SendableRecordState.for_model(SubRecord)
|
219
|
+
srs = srs_scope.new(:local_record_id => @offline_indirect_data.id)
|
220
|
+
assert_equal false, srs.valid?
|
221
|
+
end
|
222
|
+
|
223
|
+
online_test "cannot create valid received record state of global data records" do
|
224
|
+
global_rec = GlobalRecord.create(:title => "Testing")
|
225
|
+
rrs_scope = Offroad::ReceivedRecordState.for_model(GlobalRecord)
|
226
|
+
rrs = rrs_scope.new(:local_record_id => global_rec.id, :remote_record_id => 1)
|
227
|
+
assert_equal false, rrs.valid?
|
228
|
+
end
|
229
|
+
|
230
|
+
offline_test "cannot create valid received record state of group data records" do
|
231
|
+
rrs = Offroad::ReceivedRecordState.for_record(@offline_group_data).new(:remote_record_id => 1)
|
232
|
+
assert_equal false, rrs.valid?
|
233
|
+
end
|
234
|
+
|
235
|
+
offline_test "cannot create valid received record state of indirect group data records" do
|
236
|
+
rrs = Offroad::ReceivedRecordState.for_record(@offline_indirect_data).new(:remote_record_id => 1)
|
237
|
+
assert_equal false, rrs.valid?
|
238
|
+
end
|
239
|
+
|
240
|
+
offline_test "cannot create valid sendable record state of global data records" do
|
241
|
+
global_rec = GlobalRecord.new(:title => "Testing")
|
242
|
+
force_save_and_reload(global_rec)
|
243
|
+
srs_scope = Offroad::SendableRecordState.for_model(GlobalRecord)
|
244
|
+
srs = srs_scope.new(:local_record_id => global_rec.id)
|
245
|
+
assert_equal false, srs.valid?
|
246
|
+
end
|
247
|
+
|
248
|
+
offline_test "cannot create valid received record state of global data records if associated with a group" do
|
249
|
+
global_rec = GlobalRecord.new(:title => "Testing")
|
250
|
+
force_save_and_reload(global_rec)
|
251
|
+
rrs = Offroad::ReceivedRecordState.for_record(global_rec).new(:remote_record_id => 1)
|
252
|
+
rrs.group_state = @offline_group.group_state
|
253
|
+
assert_equal false, rrs.valid?
|
254
|
+
end
|
255
|
+
|
256
|
+
online_test "cannot create valid received record state of unsaved records" do
|
257
|
+
group_data = GroupOwnedRecord.new(:description => "Test", :group => @offline_group)
|
258
|
+
rrs = Offroad::ReceivedRecordState.for_record(group_data).new(:remote_record_id => 1)
|
259
|
+
assert_equal false, rrs.valid?
|
260
|
+
end
|
261
|
+
|
262
|
+
online_test "cannot create valid sendable record state of unsaved records" do
|
263
|
+
global_data = GlobalRecord.new(:title => "Test")
|
264
|
+
srs = Offroad::SendableRecordState.for_record(global_data).new
|
265
|
+
assert_equal false, srs.valid?
|
266
|
+
end
|
267
|
+
|
268
|
+
double_test "can auto-generate system settings" do
|
269
|
+
Offroad::SystemState.instance_record.destroy
|
270
|
+
|
271
|
+
assert_nothing_raised do
|
272
|
+
Offroad::SystemState.instance_record
|
273
|
+
end
|
274
|
+
end
|
275
|
+
end
|