wagons 0.0.1 → 0.0.9
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/MIT-LICENSE +1 -1
- data/README.rdoc +135 -9
- data/Rakefile +13 -5
- data/lib/generators/wagon/templates/%singular_name%.gemspec.tt +0 -2
- data/lib/generators/wagon/templates/.gitignore +5 -0
- data/lib/generators/wagon/templates/Gemfile.tt +5 -9
- data/lib/generators/wagon/templates/app/assets/images/.empty_directory +0 -0
- data/lib/generators/wagon/templates/app/controllers/.empty_directory +0 -0
- data/lib/generators/wagon/templates/app/models/.empty_directory +0 -0
- data/lib/generators/wagon/templates/app/views/.empty_directory +0 -0
- data/lib/generators/wagon/templates/db/fixtures/development/.empty_directory +0 -0
- data/lib/generators/wagon/templates/db/migrate/.empty_directory +0 -0
- data/lib/generators/wagon/templates/lib/%singular_name%/wagon.rb.tt +7 -4
- data/lib/generators/wagon/templates/test/fixtures/.empty_directory +0 -0
- data/lib/generators/wagon/wagon_generator.rb +23 -4
- data/lib/tasks/wagons.rake +119 -20
- data/lib/wagons/extensions/application.rb +14 -0
- data/lib/wagons/extensions/require_optional.rb +9 -0
- data/lib/wagons/{test_case.rb → extensions/test_case.rb} +4 -1
- data/lib/wagons/installer.rb +313 -0
- data/lib/wagons/railtie.rb +1 -1
- data/lib/wagons/version.rb +1 -1
- data/lib/wagons/view_helper.rb +58 -0
- data/lib/wagons/wagon.rb +125 -109
- data/lib/wagons/wagon_tasks.rake +9 -7
- data/lib/wagons.rb +44 -7
- data/test/dummy/Gemfile +8 -2
- data/test/dummy/Gemfile.lock +51 -48
- data/test/dummy/app/assets/javascripts/application.js +0 -2
- data/test/dummy/app/controllers/people_controller.rb +6 -0
- data/test/dummy/app/views/people/index.html.erb +6 -0
- data/test/dummy/app/views/shared/_sidebar.html.erb +3 -0
- data/test/dummy/config/initializers/wagon_app_version.rb +7 -0
- data/test/dummy/config/routes.rb +3 -0
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/schema.rb +1 -1
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/log/development.log +1230 -1586
- data/test/dummy/log/test.log +6458 -1772
- data/test/dummy/test/unit/person_test.rb +6 -0
- data/test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
- data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/test/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/test/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
- data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/test/dummy/tmp/pids/server.pid +1 -0
- data/test/dummy/vendor/wagons/superliner/Gemfile +1 -5
- data/test/dummy/vendor/wagons/superliner/Gemfile.lock +46 -48
- data/test/dummy/vendor/wagons/superliner/app/controllers/cities_controller.rb +6 -0
- data/test/dummy/vendor/wagons/superliner/app/views/cities/index.html.erb +7 -0
- data/test/dummy/vendor/wagons/superliner/app/views/people/_list_superliner.html.erb +3 -0
- data/test/dummy/vendor/wagons/superliner/app/views/shared/_sidebar_superliner.html.erb +1 -0
- data/test/dummy/vendor/wagons/superliner/config/routes.rb +1 -1
- data/test/dummy/vendor/wagons/superliner/db/migrate/{20120606125258_create_cities.rb → 20120606125058_create_cities.rb} +0 -0
- data/test/dummy/vendor/wagons/superliner/dummy_superliner.gemspec +0 -2
- data/test/dummy/vendor/wagons/superliner/lib/dummy_superliner/wagon.rb +3 -1
- data/test/dummy/vendor/wagons/superliner/test/functionals/cities_controller_test.rb +12 -0
- data/test/dummy/vendor/wagons/superliner/test/functionals/people_controller_test.rb +14 -0
- data/test/dummy/vendor/wagons/superliner/test/unit/city_test.rb +4 -1
- data/test/dummy/vendor/wagons/superliner/test/wagon_test.rb +7 -5
- data/test/wagons_installer_test.rb +225 -0
- metadata +241 -169
- data/test/dummy/dummy.gemspec +0 -17
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
1988
|
@@ -7,8 +7,4 @@ source "http://rubygems.org"
|
|
7
7
|
# development dependencies will be added by default to the :development group.
|
8
8
|
gemspec
|
9
9
|
|
10
|
-
|
11
|
-
gem 'wagons', :path => "#{ENV["APP_ROOT"]}/../.."
|
12
|
-
gem 'dummy', :path => ENV["APP_ROOT"]
|
13
|
-
end
|
14
|
-
|
10
|
+
eval File.read(File.expand_path('Gemfile', ENV['APP_ROOT']))
|
@@ -2,84 +2,81 @@ PATH
|
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
4
|
dummy_superliner (0.0.1)
|
5
|
-
dummy
|
6
5
|
|
7
6
|
PATH
|
8
|
-
remote: /
|
7
|
+
remote: /Users/pascal/Code/ruby/wagons
|
9
8
|
specs:
|
10
|
-
wagons (0.0.
|
9
|
+
wagons (0.0.9)
|
10
|
+
bundler (>= 1.1)
|
11
11
|
rails (>= 3.2)
|
12
|
-
seed-fu-ndo
|
13
|
-
|
14
|
-
PATH
|
15
|
-
remote: /home/tgdzupa7/workspace/wagons/test/dummy
|
16
|
-
specs:
|
17
|
-
dummy (0.0.0)
|
18
|
-
sqlite3
|
19
|
-
wagons
|
12
|
+
seed-fu-ndo (>= 0.0.2)
|
20
13
|
|
21
14
|
GEM
|
15
|
+
remote: http://rubygems.org/
|
22
16
|
remote: http://rubygems.org/
|
23
17
|
specs:
|
24
|
-
actionmailer (3.2.
|
25
|
-
actionpack (= 3.2.
|
18
|
+
actionmailer (3.2.8)
|
19
|
+
actionpack (= 3.2.8)
|
26
20
|
mail (~> 2.4.4)
|
27
|
-
actionpack (3.2.
|
28
|
-
activemodel (= 3.2.
|
29
|
-
activesupport (= 3.2.
|
21
|
+
actionpack (3.2.8)
|
22
|
+
activemodel (= 3.2.8)
|
23
|
+
activesupport (= 3.2.8)
|
30
24
|
builder (~> 3.0.0)
|
31
25
|
erubis (~> 2.7.0)
|
32
|
-
journey (~> 1.0.
|
26
|
+
journey (~> 1.0.4)
|
33
27
|
rack (~> 1.4.0)
|
34
28
|
rack-cache (~> 1.2)
|
35
29
|
rack-test (~> 0.6.1)
|
36
30
|
sprockets (~> 2.1.3)
|
37
|
-
activemodel (3.2.
|
38
|
-
activesupport (= 3.2.
|
31
|
+
activemodel (3.2.8)
|
32
|
+
activesupport (= 3.2.8)
|
39
33
|
builder (~> 3.0.0)
|
40
|
-
activerecord (3.2.
|
41
|
-
activemodel (= 3.2.
|
42
|
-
activesupport (= 3.2.
|
34
|
+
activerecord (3.2.8)
|
35
|
+
activemodel (= 3.2.8)
|
36
|
+
activesupport (= 3.2.8)
|
43
37
|
arel (~> 3.0.2)
|
44
38
|
tzinfo (~> 0.3.29)
|
45
|
-
activeresource (3.2.
|
46
|
-
activemodel (= 3.2.
|
47
|
-
activesupport (= 3.2.
|
48
|
-
activesupport (3.2.
|
39
|
+
activeresource (3.2.8)
|
40
|
+
activemodel (= 3.2.8)
|
41
|
+
activesupport (= 3.2.8)
|
42
|
+
activesupport (3.2.8)
|
49
43
|
i18n (~> 0.6)
|
50
44
|
multi_json (~> 1.0)
|
51
45
|
arel (3.0.2)
|
52
|
-
builder (3.0.
|
46
|
+
builder (3.0.4)
|
53
47
|
erubis (2.7.0)
|
54
48
|
hike (1.2.1)
|
55
|
-
i18n (0.6.
|
56
|
-
journey (1.0.
|
57
|
-
json (1.7.
|
49
|
+
i18n (0.6.1)
|
50
|
+
journey (1.0.4)
|
51
|
+
json (1.7.5)
|
58
52
|
mail (2.4.4)
|
59
53
|
i18n (>= 0.4.0)
|
60
54
|
mime-types (~> 1.16)
|
61
55
|
treetop (~> 1.4.8)
|
62
|
-
|
63
|
-
|
56
|
+
metaclass (0.0.1)
|
57
|
+
mime-types (1.19)
|
58
|
+
mocha (0.12.3)
|
59
|
+
metaclass (~> 0.0.1)
|
60
|
+
multi_json (1.3.7)
|
64
61
|
polyglot (0.3.3)
|
65
62
|
rack (1.4.1)
|
66
63
|
rack-cache (1.2)
|
67
64
|
rack (>= 0.4)
|
68
65
|
rack-ssl (1.3.2)
|
69
66
|
rack
|
70
|
-
rack-test (0.6.
|
67
|
+
rack-test (0.6.2)
|
71
68
|
rack (>= 1.0)
|
72
|
-
rails (3.2.
|
73
|
-
actionmailer (= 3.2.
|
74
|
-
actionpack (= 3.2.
|
75
|
-
activerecord (= 3.2.
|
76
|
-
activeresource (= 3.2.
|
77
|
-
activesupport (= 3.2.
|
69
|
+
rails (3.2.8)
|
70
|
+
actionmailer (= 3.2.8)
|
71
|
+
actionpack (= 3.2.8)
|
72
|
+
activerecord (= 3.2.8)
|
73
|
+
activeresource (= 3.2.8)
|
74
|
+
activesupport (= 3.2.8)
|
78
75
|
bundler (~> 1.0)
|
79
|
-
railties (= 3.2.
|
80
|
-
railties (3.2.
|
81
|
-
actionpack (= 3.2.
|
82
|
-
activesupport (= 3.2.
|
76
|
+
railties (= 3.2.8)
|
77
|
+
railties (3.2.8)
|
78
|
+
actionpack (= 3.2.8)
|
79
|
+
activesupport (= 3.2.8)
|
83
80
|
rack-ssl (~> 1.3.2)
|
84
81
|
rake (>= 0.8.7)
|
85
82
|
rdoc (~> 3.4)
|
@@ -90,24 +87,25 @@ GEM
|
|
90
87
|
seed-fu (2.2.0)
|
91
88
|
activerecord (~> 3.1)
|
92
89
|
activesupport (~> 3.1)
|
93
|
-
seed-fu-ndo (0.0.
|
90
|
+
seed-fu-ndo (0.0.2)
|
94
91
|
seed-fu (>= 2.2.0)
|
95
92
|
sprockets (2.1.3)
|
96
93
|
hike (~> 1.2)
|
97
94
|
rack (~> 1.0)
|
98
95
|
tilt (~> 1.1, != 1.3.0)
|
99
96
|
sqlite3 (1.3.6)
|
100
|
-
thor (0.
|
97
|
+
thor (0.16.0)
|
101
98
|
tilt (1.3.3)
|
102
|
-
treetop (1.4.
|
99
|
+
treetop (1.4.12)
|
103
100
|
polyglot
|
104
101
|
polyglot (>= 0.3.1)
|
105
|
-
tzinfo (0.3.
|
102
|
+
tzinfo (0.3.34)
|
106
103
|
|
107
104
|
PLATFORMS
|
108
105
|
ruby
|
109
106
|
|
110
107
|
DEPENDENCIES
|
111
|
-
dummy!
|
112
108
|
dummy_superliner!
|
109
|
+
mocha
|
110
|
+
sqlite3
|
113
111
|
wagons!
|
@@ -0,0 +1 @@
|
|
1
|
+
<h3>Superliner</h3>
|
File without changes
|
@@ -1,10 +1,12 @@
|
|
1
1
|
module DummySuperliner
|
2
2
|
class Wagon < Rails::Engine
|
3
|
-
include ::Wagon
|
3
|
+
include Wagons::Wagon
|
4
4
|
|
5
5
|
# Add a load path for this specific Wagon
|
6
6
|
#config.autoload_paths += %W( #{config.root}/lib )
|
7
7
|
|
8
|
+
app_requirement '>= 1.0.0'
|
9
|
+
|
8
10
|
config.to_prepare do
|
9
11
|
# extend application classes here
|
10
12
|
Person.belongs_to :city
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class CitiesControllerTest < ActionController::TestCase
|
4
|
+
|
5
|
+
test "wagon view paths preceed application view paths" do
|
6
|
+
paths = @controller.view_paths.collect {|p| p }
|
7
|
+
i_app = paths.index {|p| p.to_s.ends_with?('/dummy/app/views') }
|
8
|
+
i_wagon = paths.index {|p| p.to_s.ends_with?('/superliner/app/views') }
|
9
|
+
assert i_wagon < i_app
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class PeopleControllerTest < ActionController::TestCase
|
4
|
+
|
5
|
+
test "extensions are rendered with locals" do
|
6
|
+
get :index
|
7
|
+
assert_template 'index'
|
8
|
+
assert_template 'list_superliner'
|
9
|
+
assert_template 'sidebar'
|
10
|
+
assert_template 'sidebar_superliner'
|
11
|
+
assert_match /42/, @response.body
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -3,19 +3,19 @@ require 'test_helper'
|
|
3
3
|
class WagonTest < ActiveSupport::TestCase
|
4
4
|
attr_reader :wagon
|
5
5
|
def setup
|
6
|
-
@wagon =
|
6
|
+
@wagon = Wagons.find(:superliner)
|
7
7
|
end
|
8
8
|
|
9
9
|
test "all includes current wagon" do
|
10
|
-
assert
|
10
|
+
assert Wagons.all.include?(wagon)
|
11
11
|
end
|
12
12
|
|
13
13
|
test "app name is correct" do
|
14
|
-
assert_equal 'dummy',
|
14
|
+
assert_equal 'dummy', Wagons.app_name
|
15
15
|
end
|
16
16
|
|
17
17
|
test "find for inexisting return nil" do
|
18
|
-
assert_nil
|
18
|
+
assert_nil Wagons.find(:not_existing)
|
19
19
|
end
|
20
20
|
|
21
21
|
test "version can be read from gemspec" do
|
@@ -46,6 +46,8 @@ class WagonTest < ActiveSupport::TestCase
|
|
46
46
|
assert_equal [], wagon.all_dependencies
|
47
47
|
end
|
48
48
|
|
49
|
-
|
49
|
+
test "existing seeds" do
|
50
|
+
assert_equal({City => City.where(:name => 'Paris')}, wagon.existing_seeds)
|
51
|
+
end
|
50
52
|
|
51
53
|
end
|
@@ -0,0 +1,225 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class Wagons::InstallerTest < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
WAGONFILE = 'Wagonfile.test'
|
6
|
+
|
7
|
+
attr_reader :installer
|
8
|
+
|
9
|
+
setup :setup_gems, :stub_installer, :stub_wagons, :create_wagonfile
|
10
|
+
teardown :remove_wagonfile
|
11
|
+
|
12
|
+
test "available only returns latest versions" do
|
13
|
+
assert_equal [@master2, @slave1, @superliner2], installer.available
|
14
|
+
end
|
15
|
+
|
16
|
+
test "not_installed does not return updates" do
|
17
|
+
assert_equal [@superliner2], installer.not_installed
|
18
|
+
end
|
19
|
+
|
20
|
+
test "updates returns higher versions" do
|
21
|
+
assert_equal [@master2], installer.updates
|
22
|
+
end
|
23
|
+
|
24
|
+
test "find installed" do
|
25
|
+
assert_equal @master1, installer.installed_spec("#{app_name}_master")
|
26
|
+
assert_nil installer.installed_spec("#{app_name}_superliner")
|
27
|
+
end
|
28
|
+
|
29
|
+
test "find available" do
|
30
|
+
assert_equal @master2, installer.available_spec("#{app_name}_master")
|
31
|
+
assert_equal @superliner2, installer.available_spec("#{app_name}_superliner")
|
32
|
+
assert_nil installer.available_spec("#{app_name}_fantasy")
|
33
|
+
end
|
34
|
+
|
35
|
+
test "check app dependency is fine if app is sufficient" do
|
36
|
+
installer.stubs(:wagon_class).with(@slave1).returns(stub(:app_requirement => Gem::Requirement.new('1.0')))
|
37
|
+
assert_equal [], installer.check_app_requirement([@master2, @slave1])
|
38
|
+
end
|
39
|
+
|
40
|
+
test "check app dependency fails if app is too old" do
|
41
|
+
installer.stubs(:wagon_class).with(@superliner2).returns(stub(:app_requirement => Gem::Requirement.new('>= 2.0')))
|
42
|
+
msg = installer.check_app_requirement([@master2, @superliner2])
|
43
|
+
assert_equal 1, msg.size
|
44
|
+
assert_match /requires/, msg.first
|
45
|
+
end
|
46
|
+
|
47
|
+
test "check dependencies is fine if all depts are installed at the same time" do
|
48
|
+
installer.stubs(:installed).returns([])
|
49
|
+
assert_nil installer.check_dependencies([@master2, @superliner1])
|
50
|
+
assert_nil installer.check_dependencies([@slave1, @master2])
|
51
|
+
end
|
52
|
+
|
53
|
+
test "check dependencies fails if dependency is missing" do
|
54
|
+
installer.stubs(:installed).returns([])
|
55
|
+
assert_match /requires/, installer.check_dependencies([@slave1])
|
56
|
+
end
|
57
|
+
|
58
|
+
test "check uninstalled dependencies is fine if all depts are uninstalled at the same time" do
|
59
|
+
assert_nil installer.check_uninstalled_dependencies([@slave1, @master1])
|
60
|
+
end
|
61
|
+
|
62
|
+
test "check uninstalled dependencies fails if dependency remains" do
|
63
|
+
assert_match /requires/, installer.check_uninstalled_dependencies([@master1])
|
64
|
+
end
|
65
|
+
|
66
|
+
test "exclude specs does not modify original collection" do
|
67
|
+
original = [@master2, @slave1, @superliner1]
|
68
|
+
assert_equal [@master2], installer.exclude_specs(original, [@slave1, @superliner2])
|
69
|
+
assert_equal [@master2, @slave1, @superliner1], original
|
70
|
+
end
|
71
|
+
|
72
|
+
test "specs from name" do
|
73
|
+
assert_equal [@master2, @slave1], installer.specs_from_names(["#{app_name}_master", "#{app_name}_slave"])
|
74
|
+
end
|
75
|
+
|
76
|
+
test "specs_from_names raises exception if spec is not found" do
|
77
|
+
assert_raise(RuntimeError) do
|
78
|
+
installer.specs_from_names(["#{app_name}_master", "#{app_name}_fantasy", "#{app_name}_superliner"])
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
test "wagonfile update updates version and add new entries" do
|
83
|
+
installer.wagonfile_update([@master2, @slave1, @superliner2])
|
84
|
+
content = File.read(WAGONFILE)
|
85
|
+
assert_match /^gem '#{app_name}_master', '2.0.0'$/, content
|
86
|
+
assert_match /^gem '#{app_name}_slave', '1.0.0'$/, content
|
87
|
+
assert_match /^gem '#{app_name}_superliner', '2.0.0'$/, content
|
88
|
+
assert_equal 3, content.each_line.count, content
|
89
|
+
end
|
90
|
+
|
91
|
+
test "wagonfile update keeps existing and add new entries if version should not be included in wagonfile" do
|
92
|
+
installer.include_version_in_wagonfile = false
|
93
|
+
installer.wagonfile_update([@master2, @slave1, @superliner2])
|
94
|
+
content = File.read(WAGONFILE)
|
95
|
+
assert_match /^gem '#{app_name}_master'$/, content
|
96
|
+
assert_match /^gem '#{app_name}_slave'$/, content
|
97
|
+
assert_match /^gem '#{app_name}_superliner'$/, content
|
98
|
+
assert_equal 3, content.each_line.count, content
|
99
|
+
end
|
100
|
+
|
101
|
+
test "wagonfile update updates commented gems" do
|
102
|
+
File.open(WAGONFILE, 'w') do |f|
|
103
|
+
f.puts "gem '#{app_name}_master', '1.0.0'"
|
104
|
+
f.puts "# gem '#{app_name}_slave', '1.0.0'"
|
105
|
+
end
|
106
|
+
installer.wagonfile_update([@master2, @slave1])
|
107
|
+
content = File.read(WAGONFILE)
|
108
|
+
assert_match /^gem '#{app_name}_master', '2.0.0'$/, content
|
109
|
+
assert_match /^gem '#{app_name}_slave', '1.0.0'$/, content
|
110
|
+
assert_equal 2, content.each_line.count, content
|
111
|
+
end
|
112
|
+
|
113
|
+
test "wagonfile remove" do
|
114
|
+
installer.wagonfile_remove([@slave1])
|
115
|
+
content = File.read(WAGONFILE)
|
116
|
+
assert_match /^gem '#{app_name}_master', '1.0.0'$/, content
|
117
|
+
assert_equal 1, content.each_line.count
|
118
|
+
end
|
119
|
+
|
120
|
+
test "install runs when checks are fine" do
|
121
|
+
installer.stubs(:setup_command).returns("echo $RAILS_ENV > env.tmp")
|
122
|
+
assert_nil installer.install(["#{app_name}_master"])
|
123
|
+
content = File.read(WAGONFILE)
|
124
|
+
assert_match /^gem '#{app_name}_master', '2.0.0'$/, content
|
125
|
+
assert_equal 'test', File.read('env.tmp').strip
|
126
|
+
File.delete('env.tmp')
|
127
|
+
end
|
128
|
+
|
129
|
+
test "install fails when setup command fails" do
|
130
|
+
installer.stubs(:setup_command).returns("echo $RAILS_ENV; echo 'its a bug' >&2; exit 1")
|
131
|
+
assert_equal 'its a bug', installer.install(["#{app_name}_master"]).strip
|
132
|
+
content = File.read(WAGONFILE)
|
133
|
+
assert_match /^gem '#{app_name}_master', '1.0.0'$/, content
|
134
|
+
end
|
135
|
+
|
136
|
+
test "install fails when checks go wrong" do
|
137
|
+
installer.stubs(:wagon_class).with(@superliner2).returns(stub(:app_requirement => Gem::Requirement.new('>= 2.0')))
|
138
|
+
installer.expects(:wagonfile_edit).never
|
139
|
+
assert_match /requires/, installer.install(["#{app_name}_superliner"])
|
140
|
+
end
|
141
|
+
|
142
|
+
test "install fails when name is invalid" do
|
143
|
+
installer.expects(:wagonfile_edit).never
|
144
|
+
assert_match /not found/, installer.install(["#{app_name}_fantasy"])
|
145
|
+
end
|
146
|
+
|
147
|
+
test "uninstall runs when checks are fine" do
|
148
|
+
installer.expects(:remove_wagons).once
|
149
|
+
assert_nil installer.uninstall(["#{app_name}_master", "#{app_name}_slave"])
|
150
|
+
content = File.read(WAGONFILE)
|
151
|
+
assert_blank content
|
152
|
+
end
|
153
|
+
|
154
|
+
test "uninstall fails when checks go wrong" do
|
155
|
+
installer.expects(:wagonfile_edit).never
|
156
|
+
assert_match /requires/, installer.uninstall(["#{app_name}_master"])
|
157
|
+
end
|
158
|
+
|
159
|
+
test "uninstall fails when name is invalid" do
|
160
|
+
installer.expects(:wagonfile_edit).never
|
161
|
+
assert_match /not found/, installer.uninstall(["#{app_name}_fantasy"])
|
162
|
+
end
|
163
|
+
|
164
|
+
test "wagon class can load class from anywhere" do
|
165
|
+
installer.unstub(:wagon_class)
|
166
|
+
dir = File.expand_path('../dummy/vendor/wagons/superliner', __FILE__)
|
167
|
+
spec = Gem::Specification.load(File.join(dir, 'dummy_superliner.gemspec'))
|
168
|
+
spec.stubs(:gem_dir).returns(dir)
|
169
|
+
assert_equal 'DummySuperliner::Wagon', installer.wagon_class(spec).name
|
170
|
+
assert installer.wagon_class(spec).app_requirement.satisfied_by?(Gem::Version.new('1.0'))
|
171
|
+
end
|
172
|
+
|
173
|
+
private
|
174
|
+
|
175
|
+
def setup_gems
|
176
|
+
@master1 = gemspec('master', '1.0.0')
|
177
|
+
@master2 = gemspec('master', '2.0.0')
|
178
|
+
@slave1 = gemspec('slave', '1.0.0', 'master')
|
179
|
+
@superliner1 = gemspec('superliner', '1.0.0')
|
180
|
+
@superliner2 = gemspec('superliner', '2.0.0')
|
181
|
+
|
182
|
+
Wagons.app_version = '1.0.0'
|
183
|
+
end
|
184
|
+
|
185
|
+
def stub_installer
|
186
|
+
@installer = Wagons::Installer.new
|
187
|
+
@installer.stubs(:load_available_specs).returns([@master1, @master2, @slave1, @superliner1, @superliner2])
|
188
|
+
@installer.stubs(:installed).returns([@master1, @slave1])
|
189
|
+
@installer.stubs(:wagonfile).returns(WAGONFILE)
|
190
|
+
@installer.stubs(:remove_wagons).returns(nil)
|
191
|
+
@installer.stubs(:wagon_class).returns(stub(:app_requirement => Gem::Requirement.new))
|
192
|
+
end
|
193
|
+
|
194
|
+
def stub_wagons
|
195
|
+
Wagons.stubs(:find).returns(stub(:protect? => false))
|
196
|
+
end
|
197
|
+
|
198
|
+
def create_wagonfile
|
199
|
+
File.open(WAGONFILE, 'w') do |f|
|
200
|
+
installer.installed.each do |spec|
|
201
|
+
f.puts "gem '#{spec.name}', '#{spec.version}'"
|
202
|
+
end
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
def remove_wagonfile
|
207
|
+
File.delete(WAGONFILE) if File.exists?(WAGONFILE)
|
208
|
+
end
|
209
|
+
|
210
|
+
def app_name
|
211
|
+
@app_name ||= Wagons.app_name
|
212
|
+
end
|
213
|
+
|
214
|
+
def gemspec(name, version, dependency = nil)
|
215
|
+
Gem::Specification.new do |s|
|
216
|
+
s.name = "#{app_name}_#{name}"
|
217
|
+
s.version = version
|
218
|
+
s.summary = 'blabla'
|
219
|
+
|
220
|
+
s.add_dependency "#{app_name}_#{dependency}" if dependency
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
|
225
|
+
end
|