offroad 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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