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,8 +1,8 @@
|
|
1
|
-
test:
|
2
|
-
adapter: postgresql
|
3
|
-
encoding: unicode
|
4
|
-
database: offroad_test
|
5
|
-
pool: 5
|
6
|
-
username: david
|
7
|
-
password: foobar
|
8
|
-
min_messages: WARNING
|
1
|
+
test:
|
2
|
+
adapter: postgresql
|
3
|
+
encoding: unicode
|
4
|
+
database: offroad_test
|
5
|
+
pool: 5
|
6
|
+
username: david
|
7
|
+
password: foobar
|
8
|
+
min_messages: WARNING
|
@@ -1,6 +1,6 @@
|
|
1
|
-
test:
|
2
|
-
adapter: sqlite3
|
3
|
-
database: ":memory:"
|
4
|
-
verbosity: quiet
|
5
|
-
pool: 5
|
1
|
+
test:
|
2
|
+
adapter: sqlite3
|
3
|
+
database: ":memory:"
|
4
|
+
verbosity: quiet
|
5
|
+
pool: 5
|
6
6
|
timeout: 5000
|
@@ -1,24 +1,24 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), 'boot')
|
2
|
-
|
3
|
-
RAILS_GEM_VERSION = '2.3.11'
|
4
|
-
|
5
|
-
Rails::Initializer.run do |config|
|
6
|
-
config.cache_classes = false
|
7
|
-
config.whiny_nils = true
|
8
|
-
config.action_controller.session = {:key => 'rails_session', :secret => 'd229e4d22437432705ab3985d4d246'}
|
9
|
-
|
10
|
-
if ENV['HOBO_TEST_MODE']
|
11
|
-
puts "Loading Hobo gem"
|
12
|
-
config.gem 'hobo'
|
13
|
-
HOBO_TEST_MODE = true
|
14
|
-
else
|
15
|
-
HOBO_TEST_MODE = false
|
16
|
-
end
|
17
|
-
|
18
|
-
if ENV['PSQL_TEST_MODE']
|
19
|
-
puts "Using postgresql for a test database"
|
20
|
-
config.database_configuration_file = "#{RAILS_ROOT}/config/database-pg.yml"
|
21
|
-
else
|
22
|
-
puts "Using sqlite for a test database"
|
23
|
-
end
|
24
|
-
end
|
1
|
+
require File.join(File.dirname(__FILE__), 'boot')
|
2
|
+
|
3
|
+
RAILS_GEM_VERSION = '2.3.11'
|
4
|
+
|
5
|
+
Rails::Initializer.run do |config|
|
6
|
+
config.cache_classes = false
|
7
|
+
config.whiny_nils = true
|
8
|
+
config.action_controller.session = {:key => 'rails_session', :secret => 'd229e4d22437432705ab3985d4d246'}
|
9
|
+
|
10
|
+
if ENV['HOBO_TEST_MODE']
|
11
|
+
puts "Loading Hobo gem"
|
12
|
+
config.gem 'hobo'
|
13
|
+
HOBO_TEST_MODE = true
|
14
|
+
else
|
15
|
+
HOBO_TEST_MODE = false
|
16
|
+
end
|
17
|
+
|
18
|
+
if ENV['PSQL_TEST_MODE']
|
19
|
+
puts "Using postgresql for a test database"
|
20
|
+
config.database_configuration_file = "#{RAILS_ROOT}/config/database-pg.yml"
|
21
|
+
else
|
22
|
+
puts "Using sqlite for a test database"
|
23
|
+
end
|
24
|
+
end
|
@@ -1,17 +1,17 @@
|
|
1
|
-
config.cache_classes = true
|
2
|
-
|
3
|
-
# Log error messages when you accidentally call methods on nil.
|
4
|
-
config.whiny_nils = true
|
5
|
-
|
6
|
-
# Show full error reports and disable caching
|
7
|
-
config.action_controller.consider_all_requests_local = true
|
8
|
-
config.action_controller.perform_caching = false
|
9
|
-
config.action_view.cache_template_loading = true
|
10
|
-
|
11
|
-
# Disable request forgery protection in test environment
|
12
|
-
config.action_controller.allow_forgery_protection = false
|
13
|
-
|
14
|
-
# Tell Action Mailer not to deliver emails to the real world.
|
15
|
-
# The :test delivery method accumulates sent emails in the
|
16
|
-
# ActionMailer::Base.deliveries array.
|
17
|
-
config.action_mailer.delivery_method = :test
|
1
|
+
config.cache_classes = true
|
2
|
+
|
3
|
+
# Log error messages when you accidentally call methods on nil.
|
4
|
+
config.whiny_nils = true
|
5
|
+
|
6
|
+
# Show full error reports and disable caching
|
7
|
+
config.action_controller.consider_all_requests_local = true
|
8
|
+
config.action_controller.perform_caching = false
|
9
|
+
config.action_view.cache_template_loading = true
|
10
|
+
|
11
|
+
# Disable request forgery protection in test environment
|
12
|
+
config.action_controller.allow_forgery_protection = false
|
13
|
+
|
14
|
+
# Tell Action Mailer not to deliver emails to the real world.
|
15
|
+
# The :test delivery method accumulates sent emails in the
|
16
|
+
# ActionMailer::Base.deliveries array.
|
17
|
+
config.action_mailer.delivery_method = :test
|
@@ -1,6 +1,6 @@
|
|
1
|
-
# Configuration for Offroad
|
2
|
-
# :online_url: The URL for the regular online version of the app
|
3
|
-
# :app_name: The name of the application, to be used in helpful messages in the generated mirror data files.
|
4
|
-
|
5
|
-
:online_url: "http://example.com"
|
6
|
-
:app_name: Example Application
|
1
|
+
# Configuration for Offroad
|
2
|
+
# :online_url: The URL for the regular online version of the app
|
3
|
+
# :app_name: The name of the application, to be used in helpful messages in the generated mirror data files.
|
4
|
+
|
5
|
+
:online_url: "http://example.com"
|
6
|
+
:app_name: Example Application
|
@@ -1,4 +1,4 @@
|
|
1
|
-
ActionController::Routing::Routes.draw do |map|
|
2
|
-
map.connect ':controller/:action/:id'
|
3
|
-
map.connect ':controller/:action/:id.:format'
|
4
|
-
end
|
1
|
+
ActionController::Routing::Routes.draw do |map|
|
2
|
+
map.connect ':controller/:action/:id'
|
3
|
+
map.connect ':controller/:action/:id.:format'
|
4
|
+
end
|
@@ -1,64 +1,64 @@
|
|
1
|
-
class CreateTables < ActiveRecord::Migration
|
2
|
-
def self.up
|
3
|
-
create_table :groups do |t|
|
4
|
-
t.string :name
|
5
|
-
t.integer :favorite_id
|
6
|
-
t.integer :unmirrored_record_id
|
7
|
-
t.integer :global_record_id
|
8
|
-
t.timestamps
|
9
|
-
end
|
10
|
-
|
11
|
-
create_table :group_owned_records do |t|
|
12
|
-
t.string :description
|
13
|
-
t.integer :some_integer
|
14
|
-
t.integer :should_be_even, :default => 0
|
15
|
-
t.integer :group_id
|
16
|
-
t.integer :parent_id
|
17
|
-
t.integer :unmirrored_record_id
|
18
|
-
t.integer :global_record_id
|
19
|
-
t.integer :protected_integer, :default => 1
|
20
|
-
t.timestamps
|
21
|
-
end
|
22
|
-
|
23
|
-
create_table :sub_records do |t|
|
24
|
-
t.string :description
|
25
|
-
t.integer :group_owned_record_id
|
26
|
-
t.integer :unmirrored_record_id
|
27
|
-
t.integer :buddy_id
|
28
|
-
t.timestamps
|
29
|
-
end
|
30
|
-
|
31
|
-
create_table :group_single_records do |t|
|
32
|
-
t.string :description
|
33
|
-
t.timestamps
|
34
|
-
end
|
35
|
-
|
36
|
-
create_table :global_records do |t|
|
37
|
-
t.string :title
|
38
|
-
t.boolean :some_boolean, :default => false
|
39
|
-
t.integer :should_be_odd, :default => 1
|
40
|
-
t.integer :unmirrored_record_id
|
41
|
-
t.integer :friend_id
|
42
|
-
t.integer :some_group_id
|
43
|
-
t.integer :protected_integer, :default => 1
|
44
|
-
t.timestamps
|
45
|
-
end
|
46
|
-
|
47
|
-
create_table :unmirrored_records do |t|
|
48
|
-
t.string :content
|
49
|
-
t.float :some_float
|
50
|
-
t.timestamps
|
51
|
-
end
|
52
|
-
|
53
|
-
create_table :broken_records do |t|
|
54
|
-
t.integer :group_id
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
def self.down
|
59
|
-
drop_table :groups
|
60
|
-
drop_table :group_owned_records
|
61
|
-
drop_table :unmirrored_records
|
62
|
-
drop_table :broken_records
|
63
|
-
end
|
64
|
-
end
|
1
|
+
class CreateTables < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :groups do |t|
|
4
|
+
t.string :name
|
5
|
+
t.integer :favorite_id
|
6
|
+
t.integer :unmirrored_record_id
|
7
|
+
t.integer :global_record_id
|
8
|
+
t.timestamps
|
9
|
+
end
|
10
|
+
|
11
|
+
create_table :group_owned_records do |t|
|
12
|
+
t.string :description
|
13
|
+
t.integer :some_integer
|
14
|
+
t.integer :should_be_even, :default => 0
|
15
|
+
t.integer :group_id
|
16
|
+
t.integer :parent_id
|
17
|
+
t.integer :unmirrored_record_id
|
18
|
+
t.integer :global_record_id
|
19
|
+
t.integer :protected_integer, :default => 1
|
20
|
+
t.timestamps
|
21
|
+
end
|
22
|
+
|
23
|
+
create_table :sub_records do |t|
|
24
|
+
t.string :description
|
25
|
+
t.integer :group_owned_record_id
|
26
|
+
t.integer :unmirrored_record_id
|
27
|
+
t.integer :buddy_id
|
28
|
+
t.timestamps
|
29
|
+
end
|
30
|
+
|
31
|
+
create_table :group_single_records do |t|
|
32
|
+
t.string :description
|
33
|
+
t.timestamps
|
34
|
+
end
|
35
|
+
|
36
|
+
create_table :global_records do |t|
|
37
|
+
t.string :title
|
38
|
+
t.boolean :some_boolean, :default => false
|
39
|
+
t.integer :should_be_odd, :default => 1
|
40
|
+
t.integer :unmirrored_record_id
|
41
|
+
t.integer :friend_id
|
42
|
+
t.integer :some_group_id
|
43
|
+
t.integer :protected_integer, :default => 1
|
44
|
+
t.timestamps
|
45
|
+
end
|
46
|
+
|
47
|
+
create_table :unmirrored_records do |t|
|
48
|
+
t.string :content
|
49
|
+
t.float :some_float
|
50
|
+
t.timestamps
|
51
|
+
end
|
52
|
+
|
53
|
+
create_table :broken_records do |t|
|
54
|
+
t.integer :group_id
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.down
|
59
|
+
drop_table :groups
|
60
|
+
drop_table :group_owned_records
|
61
|
+
drop_table :unmirrored_records
|
62
|
+
drop_table :broken_records
|
63
|
+
end
|
64
|
+
end
|
@@ -1,15 +1,15 @@
|
|
1
|
-
module CommonHobo
|
2
|
-
def self.included(base)
|
3
|
-
base.class_eval do
|
4
|
-
hobo_model
|
5
|
-
attr_accessor :permissive
|
6
|
-
include InstanceMethods
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
module InstanceMethods
|
11
|
-
def create_permitted?() @permissive; end
|
12
|
-
def update_permitted?() @permissive; end
|
13
|
-
def destroy_permitted?() @permissive; end
|
14
|
-
end
|
15
|
-
end
|
1
|
+
module CommonHobo
|
2
|
+
def self.included(base)
|
3
|
+
base.class_eval do
|
4
|
+
hobo_model
|
5
|
+
attr_accessor :permissive
|
6
|
+
include InstanceMethods
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
module InstanceMethods
|
11
|
+
def create_permitted?() @permissive; end
|
12
|
+
def update_permitted?() @permissive; end
|
13
|
+
def destroy_permitted?() @permissive; end
|
14
|
+
end
|
15
|
+
end
|
@@ -1,2 +1,2 @@
|
|
1
|
-
# Pretend the offroad gem is a plugin for the test environment
|
2
|
-
require "#{File.dirname(__FILE__)}/../../../../../lib/offroad.rb"
|
1
|
+
# Pretend the offroad gem is a plugin for the test environment
|
2
|
+
require "#{File.dirname(__FILE__)}/../../../../../lib/offroad.rb"
|
@@ -1,148 +1,148 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
2
|
-
|
3
|
-
class MirrorOperationsTest < ActionController::TestCase
|
4
|
-
tests GroupController
|
5
|
-
|
6
|
-
cross_test "can create an offline app then use it to work with the online app" do
|
7
|
-
mirror_data = ""
|
8
|
-
in_online_app do
|
9
|
-
Group.create(:name => "Some Other Group")
|
10
|
-
Group.create(:name => "Some Other Offline Group").group_offline = true
|
11
|
-
test_group = Group.create(:name => "Test Group")
|
12
|
-
|
13
|
-
grec_a = GlobalRecord.create(:title => "Important Announcement", :some_boolean => true)
|
14
|
-
GlobalRecord.create(:title => "Trivial Announcement", :some_boolean => true, :friend => grec_a)
|
15
|
-
|
16
|
-
GroupOwnedRecord.create(:description => "First Item", :group => test_group)
|
17
|
-
GroupOwnedRecord.create(:description => "Second Item", :group => test_group)
|
18
|
-
third = GroupOwnedRecord.create(:description => "Third Item", :group => test_group)
|
19
|
-
SubRecord.create(:description => "Subitem A", :group_owned_record => third)
|
20
|
-
SubRecord.create(:description => "Subitem B", :group_owned_record => third)
|
21
|
-
|
22
|
-
test_group.favorite = GroupOwnedRecord.find_by_description("Third Item")
|
23
|
-
test_group.save
|
24
|
-
|
25
|
-
test_group.group_offline = true
|
26
|
-
get :download_initial_down_mirror, "id" => test_group.id
|
27
|
-
mirror_data = @response.binary_content
|
28
|
-
end
|
29
|
-
|
30
|
-
in_offline_app(false, true) do
|
31
|
-
assert_equal 0, Group.count
|
32
|
-
assert_equal 0, GlobalRecord.count
|
33
|
-
assert_equal 0, GroupOwnedRecord.count
|
34
|
-
|
35
|
-
post :upload_initial_down_mirror, "mirror_data" => mirror_data
|
36
|
-
|
37
|
-
assert_equal 1, Group.count
|
38
|
-
test_group = Group.find_by_name("Test Group")
|
39
|
-
assert_not_nil test_group
|
40
|
-
|
41
|
-
assert_equal 3, GroupOwnedRecord.count
|
42
|
-
assert_not_nil GroupOwnedRecord.find_by_description("First Item")
|
43
|
-
assert_not_nil GroupOwnedRecord.find_by_description("Second Item")
|
44
|
-
assert_not_nil GroupOwnedRecord.find_by_description("Third Item")
|
45
|
-
assert_not_nil SubRecord.find_by_description("Subitem A")
|
46
|
-
assert_not_nil SubRecord.find_by_description("Subitem B")
|
47
|
-
|
48
|
-
assert_equal GroupOwnedRecord.find_by_description("Third Item"), test_group.favorite
|
49
|
-
assert_equal GroupOwnedRecord.find_by_description("Third Item"), SubRecord.find_by_description("Subitem A").group_owned_record
|
50
|
-
assert_equal GroupOwnedRecord.find_by_description("Third Item"), SubRecord.find_by_description("Subitem B").group_owned_record
|
51
|
-
|
52
|
-
assert_equal 2, GlobalRecord.count
|
53
|
-
grec_a = GlobalRecord.find_by_title("Important Announcement")
|
54
|
-
grec_b = GlobalRecord.find_by_title("Trivial Announcement")
|
55
|
-
assert_not_nil grec_a
|
56
|
-
assert_not_nil grec_b
|
57
|
-
assert_equal grec_a, grec_b.friend
|
58
|
-
|
59
|
-
group = Group.first
|
60
|
-
group.name = "Renamed Group"
|
61
|
-
group.save!
|
62
|
-
|
63
|
-
first_item = GroupOwnedRecord.find_by_description("First Item")
|
64
|
-
first_item.description = "Absolutely The First Item"
|
65
|
-
first_item.save!
|
66
|
-
|
67
|
-
second_item = GroupOwnedRecord.find_by_description("Second Item")
|
68
|
-
second_item.destroy
|
69
|
-
|
70
|
-
subitem_a = SubRecord.find_by_description("Subitem A")
|
71
|
-
subitem_a.description = "Subitem Apple"
|
72
|
-
subitem_a.save!
|
73
|
-
|
74
|
-
subitem_b = SubRecord.find_by_description("Subitem B")
|
75
|
-
subitem_b.destroy
|
76
|
-
|
77
|
-
get :download_up_mirror, "id" => group.id
|
78
|
-
mirror_data = @response.binary_content
|
79
|
-
end
|
80
|
-
|
81
|
-
in_online_app do
|
82
|
-
GlobalRecord.find_by_title("Trivial Announcement").destroy
|
83
|
-
GlobalRecord.create(:title => "Yet Another Announcement")
|
84
|
-
rec = GlobalRecord.find_by_title("Important Announcement")
|
85
|
-
rec.title = "Very Important Announcement"
|
86
|
-
rec.save
|
87
|
-
|
88
|
-
assert_equal 3, Group.find_by_name("Test Group").group_owned_records.size
|
89
|
-
|
90
|
-
post :upload_up_mirror, "id" => Group.find_by_name("Test Group").id, "mirror_data" => mirror_data
|
91
|
-
|
92
|
-
assert_nil Group.find_by_name("Test Group")
|
93
|
-
assert_not_nil Group.find_by_name("Renamed Group")
|
94
|
-
|
95
|
-
assert_equal 2, Group.find_by_name("Renamed Group").group_owned_records.size
|
96
|
-
assert_nil GroupOwnedRecord.find_by_description("First Item")
|
97
|
-
assert_not_nil GroupOwnedRecord.find_by_description("Absolutely The First Item")
|
98
|
-
assert_nil GroupOwnedRecord.find_by_description("Second Item")
|
99
|
-
assert_not_nil GroupOwnedRecord.find_by_description("Third Item")
|
100
|
-
assert_nil SubRecord.find_by_description("Subitem A")
|
101
|
-
assert_not_nil SubRecord.find_by_description("Subitem Apple")
|
102
|
-
assert_nil SubRecord.find_by_description("Subitem B")
|
103
|
-
|
104
|
-
get :download_down_mirror, "id" => Group.find_by_name("Renamed Group").id
|
105
|
-
mirror_data = @response.binary_content
|
106
|
-
end
|
107
|
-
|
108
|
-
in_offline_app do
|
109
|
-
post :upload_down_mirror, "id" => Group.first.id, "mirror_data" => mirror_data
|
110
|
-
|
111
|
-
assert_equal 2, GlobalRecord.count
|
112
|
-
assert_nil GlobalRecord.find_by_title("Important Announcement")
|
113
|
-
assert_not_nil GlobalRecord.find_by_title("Very Important Announcement")
|
114
|
-
assert_nil GlobalRecord.find_by_title("Trivial Announcement")
|
115
|
-
assert_not_nil GlobalRecord.find_by_title("Yet Another Announcement")
|
116
|
-
|
117
|
-
group = Group.first
|
118
|
-
first_item = GroupOwnedRecord.find_by_description("Absolutely The First Item")
|
119
|
-
third_item = GroupOwnedRecord.find_by_description("Third Item")
|
120
|
-
group.favorite = first_item
|
121
|
-
group.save
|
122
|
-
first_item.parent = third_item
|
123
|
-
first_item.save
|
124
|
-
third_item.parent = third_item
|
125
|
-
third_item.save
|
126
|
-
|
127
|
-
subitem = SubRecord.find_by_description("Subitem Apple")
|
128
|
-
subitem.group_owned_record = first_item
|
129
|
-
subitem.save
|
130
|
-
|
131
|
-
get :download_up_mirror, "id" => Group.first.id
|
132
|
-
mirror_data = @response.binary_content
|
133
|
-
end
|
134
|
-
|
135
|
-
in_online_app do
|
136
|
-
post :upload_up_mirror, "id" => Group.find_by_name("Renamed Group").id, "mirror_data" => mirror_data
|
137
|
-
|
138
|
-
group = Group.find_by_name("Renamed Group")
|
139
|
-
first_item = GroupOwnedRecord.find_by_description("Absolutely The First Item")
|
140
|
-
third_item = GroupOwnedRecord.find_by_description("Third Item")
|
141
|
-
subrec = SubRecord.find_by_description("Subitem Apple")
|
142
|
-
assert_equal first_item, group.favorite
|
143
|
-
assert_equal third_item, first_item.parent
|
144
|
-
assert_equal third_item, third_item.parent
|
145
|
-
assert_equal first_item, subrec.group_owned_record
|
146
|
-
end
|
147
|
-
end
|
148
|
-
end
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
2
|
+
|
3
|
+
class MirrorOperationsTest < ActionController::TestCase
|
4
|
+
tests GroupController
|
5
|
+
|
6
|
+
cross_test "can create an offline app then use it to work with the online app" do
|
7
|
+
mirror_data = ""
|
8
|
+
in_online_app do
|
9
|
+
Group.create(:name => "Some Other Group")
|
10
|
+
Group.create(:name => "Some Other Offline Group").group_offline = true
|
11
|
+
test_group = Group.create(:name => "Test Group")
|
12
|
+
|
13
|
+
grec_a = GlobalRecord.create(:title => "Important Announcement", :some_boolean => true)
|
14
|
+
GlobalRecord.create(:title => "Trivial Announcement", :some_boolean => true, :friend => grec_a)
|
15
|
+
|
16
|
+
GroupOwnedRecord.create(:description => "First Item", :group => test_group)
|
17
|
+
GroupOwnedRecord.create(:description => "Second Item", :group => test_group)
|
18
|
+
third = GroupOwnedRecord.create(:description => "Third Item", :group => test_group)
|
19
|
+
SubRecord.create(:description => "Subitem A", :group_owned_record => third)
|
20
|
+
SubRecord.create(:description => "Subitem B", :group_owned_record => third)
|
21
|
+
|
22
|
+
test_group.favorite = GroupOwnedRecord.find_by_description("Third Item")
|
23
|
+
test_group.save
|
24
|
+
|
25
|
+
test_group.group_offline = true
|
26
|
+
get :download_initial_down_mirror, "id" => test_group.id
|
27
|
+
mirror_data = @response.binary_content
|
28
|
+
end
|
29
|
+
|
30
|
+
in_offline_app(false, true) do
|
31
|
+
assert_equal 0, Group.count
|
32
|
+
assert_equal 0, GlobalRecord.count
|
33
|
+
assert_equal 0, GroupOwnedRecord.count
|
34
|
+
|
35
|
+
post :upload_initial_down_mirror, "mirror_data" => mirror_data
|
36
|
+
|
37
|
+
assert_equal 1, Group.count
|
38
|
+
test_group = Group.find_by_name("Test Group")
|
39
|
+
assert_not_nil test_group
|
40
|
+
|
41
|
+
assert_equal 3, GroupOwnedRecord.count
|
42
|
+
assert_not_nil GroupOwnedRecord.find_by_description("First Item")
|
43
|
+
assert_not_nil GroupOwnedRecord.find_by_description("Second Item")
|
44
|
+
assert_not_nil GroupOwnedRecord.find_by_description("Third Item")
|
45
|
+
assert_not_nil SubRecord.find_by_description("Subitem A")
|
46
|
+
assert_not_nil SubRecord.find_by_description("Subitem B")
|
47
|
+
|
48
|
+
assert_equal GroupOwnedRecord.find_by_description("Third Item"), test_group.favorite
|
49
|
+
assert_equal GroupOwnedRecord.find_by_description("Third Item"), SubRecord.find_by_description("Subitem A").group_owned_record
|
50
|
+
assert_equal GroupOwnedRecord.find_by_description("Third Item"), SubRecord.find_by_description("Subitem B").group_owned_record
|
51
|
+
|
52
|
+
assert_equal 2, GlobalRecord.count
|
53
|
+
grec_a = GlobalRecord.find_by_title("Important Announcement")
|
54
|
+
grec_b = GlobalRecord.find_by_title("Trivial Announcement")
|
55
|
+
assert_not_nil grec_a
|
56
|
+
assert_not_nil grec_b
|
57
|
+
assert_equal grec_a, grec_b.friend
|
58
|
+
|
59
|
+
group = Group.first
|
60
|
+
group.name = "Renamed Group"
|
61
|
+
group.save!
|
62
|
+
|
63
|
+
first_item = GroupOwnedRecord.find_by_description("First Item")
|
64
|
+
first_item.description = "Absolutely The First Item"
|
65
|
+
first_item.save!
|
66
|
+
|
67
|
+
second_item = GroupOwnedRecord.find_by_description("Second Item")
|
68
|
+
second_item.destroy
|
69
|
+
|
70
|
+
subitem_a = SubRecord.find_by_description("Subitem A")
|
71
|
+
subitem_a.description = "Subitem Apple"
|
72
|
+
subitem_a.save!
|
73
|
+
|
74
|
+
subitem_b = SubRecord.find_by_description("Subitem B")
|
75
|
+
subitem_b.destroy
|
76
|
+
|
77
|
+
get :download_up_mirror, "id" => group.id
|
78
|
+
mirror_data = @response.binary_content
|
79
|
+
end
|
80
|
+
|
81
|
+
in_online_app do
|
82
|
+
GlobalRecord.find_by_title("Trivial Announcement").destroy
|
83
|
+
GlobalRecord.create(:title => "Yet Another Announcement")
|
84
|
+
rec = GlobalRecord.find_by_title("Important Announcement")
|
85
|
+
rec.title = "Very Important Announcement"
|
86
|
+
rec.save
|
87
|
+
|
88
|
+
assert_equal 3, Group.find_by_name("Test Group").group_owned_records.size
|
89
|
+
|
90
|
+
post :upload_up_mirror, "id" => Group.find_by_name("Test Group").id, "mirror_data" => mirror_data
|
91
|
+
|
92
|
+
assert_nil Group.find_by_name("Test Group")
|
93
|
+
assert_not_nil Group.find_by_name("Renamed Group")
|
94
|
+
|
95
|
+
assert_equal 2, Group.find_by_name("Renamed Group").group_owned_records.size
|
96
|
+
assert_nil GroupOwnedRecord.find_by_description("First Item")
|
97
|
+
assert_not_nil GroupOwnedRecord.find_by_description("Absolutely The First Item")
|
98
|
+
assert_nil GroupOwnedRecord.find_by_description("Second Item")
|
99
|
+
assert_not_nil GroupOwnedRecord.find_by_description("Third Item")
|
100
|
+
assert_nil SubRecord.find_by_description("Subitem A")
|
101
|
+
assert_not_nil SubRecord.find_by_description("Subitem Apple")
|
102
|
+
assert_nil SubRecord.find_by_description("Subitem B")
|
103
|
+
|
104
|
+
get :download_down_mirror, "id" => Group.find_by_name("Renamed Group").id
|
105
|
+
mirror_data = @response.binary_content
|
106
|
+
end
|
107
|
+
|
108
|
+
in_offline_app do
|
109
|
+
post :upload_down_mirror, "id" => Group.first.id, "mirror_data" => mirror_data
|
110
|
+
|
111
|
+
assert_equal 2, GlobalRecord.count
|
112
|
+
assert_nil GlobalRecord.find_by_title("Important Announcement")
|
113
|
+
assert_not_nil GlobalRecord.find_by_title("Very Important Announcement")
|
114
|
+
assert_nil GlobalRecord.find_by_title("Trivial Announcement")
|
115
|
+
assert_not_nil GlobalRecord.find_by_title("Yet Another Announcement")
|
116
|
+
|
117
|
+
group = Group.first
|
118
|
+
first_item = GroupOwnedRecord.find_by_description("Absolutely The First Item")
|
119
|
+
third_item = GroupOwnedRecord.find_by_description("Third Item")
|
120
|
+
group.favorite = first_item
|
121
|
+
group.save
|
122
|
+
first_item.parent = third_item
|
123
|
+
first_item.save
|
124
|
+
third_item.parent = third_item
|
125
|
+
third_item.save
|
126
|
+
|
127
|
+
subitem = SubRecord.find_by_description("Subitem Apple")
|
128
|
+
subitem.group_owned_record = first_item
|
129
|
+
subitem.save
|
130
|
+
|
131
|
+
get :download_up_mirror, "id" => Group.first.id
|
132
|
+
mirror_data = @response.binary_content
|
133
|
+
end
|
134
|
+
|
135
|
+
in_online_app do
|
136
|
+
post :upload_up_mirror, "id" => Group.find_by_name("Renamed Group").id, "mirror_data" => mirror_data
|
137
|
+
|
138
|
+
group = Group.find_by_name("Renamed Group")
|
139
|
+
first_item = GroupOwnedRecord.find_by_description("Absolutely The First Item")
|
140
|
+
third_item = GroupOwnedRecord.find_by_description("Third Item")
|
141
|
+
subrec = SubRecord.find_by_description("Subitem Apple")
|
142
|
+
assert_equal first_item, group.favorite
|
143
|
+
assert_equal third_item, first_item.parent
|
144
|
+
assert_equal third_item, third_item.parent
|
145
|
+
assert_equal first_item, subrec.group_owned_record
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|