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.
Files changed (61) hide show
  1. data/LICENSE +674 -674
  2. data/README.rdoc +29 -29
  3. data/Rakefile +75 -75
  4. data/TODO +42 -42
  5. data/lib/app/models/offroad/group_state.rb +85 -85
  6. data/lib/app/models/offroad/mirror_info.rb +53 -53
  7. data/lib/app/models/offroad/model_state.rb +36 -36
  8. data/lib/app/models/offroad/received_record_state.rb +115 -115
  9. data/lib/app/models/offroad/sendable_record_state.rb +91 -91
  10. data/lib/app/models/offroad/system_state.rb +33 -33
  11. data/lib/cargo_streamer.rb +222 -222
  12. data/lib/controller_extensions.rb +74 -74
  13. data/lib/exceptions.rb +16 -16
  14. data/lib/migrate/20100512164608_create_offroad_tables.rb +72 -72
  15. data/lib/mirror_data.rb +376 -376
  16. data/lib/model_extensions.rb +378 -377
  17. data/lib/module_funcs.rb +94 -94
  18. data/lib/offroad.rb +41 -41
  19. data/lib/version.rb +3 -3
  20. data/lib/view_helper.rb +7 -7
  21. data/templates/offline.rb +36 -36
  22. data/templates/offline_database.yml +7 -7
  23. data/templates/offroad.yml +6 -6
  24. data/test/app_root/app/controllers/application_controller.rb +2 -2
  25. data/test/app_root/app/controllers/group_controller.rb +28 -28
  26. data/test/app_root/app/models/global_record.rb +10 -10
  27. data/test/app_root/app/models/group.rb +12 -12
  28. data/test/app_root/app/models/group_owned_record.rb +68 -68
  29. data/test/app_root/app/models/guest.rb +7 -7
  30. data/test/app_root/app/models/subrecord.rb +12 -12
  31. data/test/app_root/app/models/unmirrored_record.rb +4 -4
  32. data/test/app_root/app/views/group/download_down_mirror.html.erb +3 -3
  33. data/test/app_root/app/views/group/download_initial_down_mirror.html.erb +3 -3
  34. data/test/app_root/app/views/group/download_up_mirror.html.erb +5 -5
  35. data/test/app_root/app/views/layouts/mirror.html.erb +8 -8
  36. data/test/app_root/config/boot.rb +115 -115
  37. data/test/app_root/config/database-pg.yml +8 -8
  38. data/test/app_root/config/database.yml +5 -5
  39. data/test/app_root/config/environment.rb +24 -24
  40. data/test/app_root/config/environments/test.rb +17 -17
  41. data/test/app_root/config/offroad.yml +6 -6
  42. data/test/app_root/config/routes.rb +4 -4
  43. data/test/app_root/db/migrate/20100529235049_create_tables.rb +64 -64
  44. data/test/app_root/lib/common_hobo.rb +15 -15
  45. data/test/app_root/vendor/plugins/offroad/init.rb +2 -2
  46. data/test/functional/mirror_operations_test.rb +148 -148
  47. data/test/test_helper.rb +453 -453
  48. data/test/unit/app_state_tracking_test.rb +275 -275
  49. data/test/unit/cargo_streamer_test.rb +332 -332
  50. data/test/unit/global_data_test.rb +102 -102
  51. data/test/unit/group_controller_test.rb +152 -152
  52. data/test/unit/group_data_test.rb +442 -435
  53. data/test/unit/group_single_test.rb +136 -136
  54. data/test/unit/hobo_permissions_test.rb +57 -57
  55. data/test/unit/mirror_data_test.rb +1283 -1283
  56. data/test/unit/mirror_info_test.rb +31 -31
  57. data/test/unit/module_funcs_test.rb +37 -37
  58. data/test/unit/pathological_model_test.rb +62 -62
  59. data/test/unit/test_framework_test.rb +86 -86
  60. data/test/unit/unmirrored_data_test.rb +14 -14
  61. 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