trucker-cli 0.0.1

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 (294) hide show
  1. checksums.yaml +15 -0
  2. data/LICENSE +1277 -0
  3. data/Rakefile +13 -0
  4. data/bin/truck +18 -0
  5. data/lib/admin/README.md +30 -0
  6. data/lib/admin/curl.rb +59 -0
  7. data/lib/admin/guid.rb +89 -0
  8. data/lib/admin/plugin.rb +8 -0
  9. data/lib/admin/service_auth_token.rb +93 -0
  10. data/lib/admin/service_broker/add.rb +54 -0
  11. data/lib/admin/service_broker/remove.rb +33 -0
  12. data/lib/admin/service_broker/service_brokers.rb +29 -0
  13. data/lib/admin/service_broker/update.rb +60 -0
  14. data/lib/admin/set_quota.rb +44 -0
  15. data/lib/cf.rb +14 -0
  16. data/lib/cf/cli.rb +495 -0
  17. data/lib/cf/cli/app/app.rb +43 -0
  18. data/lib/cf/cli/app/apps.rb +87 -0
  19. data/lib/cf/cli/app/base.rb +72 -0
  20. data/lib/cf/cli/app/delete.rb +95 -0
  21. data/lib/cf/cli/app/deprecated.rb +11 -0
  22. data/lib/cf/cli/app/env.rb +99 -0
  23. data/lib/cf/cli/app/events.rb +45 -0
  24. data/lib/cf/cli/app/files.rb +137 -0
  25. data/lib/cf/cli/app/health.rb +26 -0
  26. data/lib/cf/cli/app/instances.rb +53 -0
  27. data/lib/cf/cli/app/logs.rb +76 -0
  28. data/lib/cf/cli/app/push.rb +104 -0
  29. data/lib/cf/cli/app/push/create.rb +108 -0
  30. data/lib/cf/cli/app/push/interactions.rb +90 -0
  31. data/lib/cf/cli/app/push/sync.rb +57 -0
  32. data/lib/cf/cli/app/rename.rb +35 -0
  33. data/lib/cf/cli/app/restart.rb +31 -0
  34. data/lib/cf/cli/app/scale.rb +63 -0
  35. data/lib/cf/cli/app/start.rb +175 -0
  36. data/lib/cf/cli/app/stats.rb +66 -0
  37. data/lib/cf/cli/app/stop.rb +27 -0
  38. data/lib/cf/cli/domain/base.rb +9 -0
  39. data/lib/cf/cli/domain/domains.rb +40 -0
  40. data/lib/cf/cli/domain/map.rb +55 -0
  41. data/lib/cf/cli/domain/unmap.rb +56 -0
  42. data/lib/cf/cli/help.rb +15 -0
  43. data/lib/cf/cli/interactive.rb +104 -0
  44. data/lib/cf/cli/login_requirements.rb +13 -0
  45. data/lib/cf/cli/organization/base.rb +12 -0
  46. data/lib/cf/cli/organization/create.rb +36 -0
  47. data/lib/cf/cli/organization/delete.rb +61 -0
  48. data/lib/cf/cli/organization/org.rb +45 -0
  49. data/lib/cf/cli/organization/orgs.rb +30 -0
  50. data/lib/cf/cli/organization/rename.rb +36 -0
  51. data/lib/cf/cli/populators/base.rb +16 -0
  52. data/lib/cf/cli/populators/organization.rb +32 -0
  53. data/lib/cf/cli/populators/populator_methods.rb +64 -0
  54. data/lib/cf/cli/populators/space.rb +33 -0
  55. data/lib/cf/cli/populators/target.rb +14 -0
  56. data/lib/cf/cli/route/base.rb +9 -0
  57. data/lib/cf/cli/route/delete.rb +28 -0
  58. data/lib/cf/cli/route/map.rb +68 -0
  59. data/lib/cf/cli/route/routes.rb +26 -0
  60. data/lib/cf/cli/route/unmap.rb +56 -0
  61. data/lib/cf/cli/service/base.rb +9 -0
  62. data/lib/cf/cli/service/bind.rb +43 -0
  63. data/lib/cf/cli/service/create.rb +158 -0
  64. data/lib/cf/cli/service/delete.rb +82 -0
  65. data/lib/cf/cli/service/rename.rb +35 -0
  66. data/lib/cf/cli/service/service.rb +40 -0
  67. data/lib/cf/cli/service/service_helper.rb +25 -0
  68. data/lib/cf/cli/service/service_instance_helper.rb +100 -0
  69. data/lib/cf/cli/service/services.rb +110 -0
  70. data/lib/cf/cli/service/unbind.rb +36 -0
  71. data/lib/cf/cli/space/base.rb +27 -0
  72. data/lib/cf/cli/space/create.rb +66 -0
  73. data/lib/cf/cli/space/delete.rb +55 -0
  74. data/lib/cf/cli/space/rename.rb +38 -0
  75. data/lib/cf/cli/space/space.rb +66 -0
  76. data/lib/cf/cli/space/spaces.rb +57 -0
  77. data/lib/cf/cli/space/switch.rb +18 -0
  78. data/lib/cf/cli/start/base.rb +35 -0
  79. data/lib/cf/cli/start/colors.rb +13 -0
  80. data/lib/cf/cli/start/login.rb +104 -0
  81. data/lib/cf/cli/start/logout.rb +17 -0
  82. data/lib/cf/cli/start/target.rb +50 -0
  83. data/lib/cf/cli/start/target_prettifier.rb +35 -0
  84. data/lib/cf/cli/start/targets.rb +16 -0
  85. data/lib/cf/cli/user/base.rb +29 -0
  86. data/lib/cf/cli/user/create.rb +51 -0
  87. data/lib/cf/cli/user/passwd.rb +36 -0
  88. data/lib/cf/cli/user/register.rb +42 -0
  89. data/lib/cf/cli/user/users.rb +32 -0
  90. data/lib/cf/constants.rb +10 -0
  91. data/lib/cf/errors.rb +19 -0
  92. data/lib/cf/plugin.rb +56 -0
  93. data/lib/cf/spacing.rb +89 -0
  94. data/lib/cf/spec_helper.rb +1 -0
  95. data/lib/cf/test_support.rb +6 -0
  96. data/lib/cf/version.rb +3 -0
  97. data/lib/console/README.md +16 -0
  98. data/lib/console/console.rb +187 -0
  99. data/lib/console/plugin.rb +32 -0
  100. data/lib/manifests/errors.rb +35 -0
  101. data/lib/manifests/loader.rb +31 -0
  102. data/lib/manifests/loader/builder.rb +39 -0
  103. data/lib/manifests/loader/normalizer.rb +145 -0
  104. data/lib/manifests/loader/resolver.rb +79 -0
  105. data/lib/manifests/manifests.rb +343 -0
  106. data/lib/manifests/plugin.rb +140 -0
  107. data/lib/micro/README.md +25 -0
  108. data/lib/micro/errors.rb +4 -0
  109. data/lib/micro/micro.rb +56 -0
  110. data/lib/micro/plugin.rb +197 -0
  111. data/lib/micro/switcher/base.rb +79 -0
  112. data/lib/micro/switcher/darwin.rb +21 -0
  113. data/lib/micro/switcher/dummy.rb +15 -0
  114. data/lib/micro/switcher/linux.rb +16 -0
  115. data/lib/micro/switcher/windows.rb +31 -0
  116. data/lib/micro/vmrun.rb +175 -0
  117. data/lib/tasks/gem_release.rake +56 -0
  118. data/lib/tasks/windows_build.rake +14 -0
  119. data/lib/tunnel/README.md +29 -0
  120. data/lib/tunnel/config/clients.yml +17 -0
  121. data/lib/tunnel/helper-app/Gemfile +10 -0
  122. data/lib/tunnel/helper-app/Gemfile.lock +48 -0
  123. data/lib/tunnel/helper-app/server.rb +43 -0
  124. data/lib/tunnel/plugin.rb +183 -0
  125. data/lib/tunnel/tunnel.rb +295 -0
  126. data/spec/admin/curl_spec.rb +52 -0
  127. data/spec/admin/guid_spec.rb +85 -0
  128. data/spec/admin/service_broker/add_spec.rb +64 -0
  129. data/spec/admin/service_broker/remove_spec.rb +46 -0
  130. data/spec/admin/service_broker/service_brokers_spec.rb +34 -0
  131. data/spec/admin/service_broker/update_spec.rb +51 -0
  132. data/spec/admin/set_quota_spec.rb +89 -0
  133. data/spec/assets/env/Gemfile +4 -0
  134. data/spec/assets/env/Gemfile.lock +20 -0
  135. data/spec/assets/env/env_test.rb +58 -0
  136. data/spec/assets/hello-sinatra/Gemfile +3 -0
  137. data/spec/assets/hello-sinatra/Gemfile.lock +17 -0
  138. data/spec/assets/hello-sinatra/config.ru +3 -0
  139. data/spec/assets/hello-sinatra/fat-cat-makes-app-larger.png +0 -0
  140. data/spec/assets/hello-sinatra/main.rb +8 -0
  141. data/spec/assets/rails328_ruby187_app/Gemfile +39 -0
  142. data/spec/assets/rails328_ruby187_app/README.rdoc +261 -0
  143. data/spec/assets/rails328_ruby187_app/Rakefile +7 -0
  144. data/spec/assets/rails328_ruby187_app/app/assets/images/rails.png +0 -0
  145. data/spec/assets/rails328_ruby187_app/app/assets/javascripts/application.js +15 -0
  146. data/spec/assets/rails328_ruby187_app/app/assets/stylesheets/application.css +13 -0
  147. data/spec/assets/rails328_ruby187_app/app/controllers/application_controller.rb +3 -0
  148. data/spec/assets/rails328_ruby187_app/app/helpers/application_helper.rb +2 -0
  149. data/spec/assets/rails328_ruby187_app/app/views/layouts/application.html.erb +14 -0
  150. data/spec/assets/rails328_ruby187_app/config.ru +4 -0
  151. data/spec/assets/rails328_ruby187_app/config/application.rb +62 -0
  152. data/spec/assets/rails328_ruby187_app/config/boot.rb +6 -0
  153. data/spec/assets/rails328_ruby187_app/config/database.yml +25 -0
  154. data/spec/assets/rails328_ruby187_app/config/environment.rb +5 -0
  155. data/spec/assets/rails328_ruby187_app/config/environments/development.rb +37 -0
  156. data/spec/assets/rails328_ruby187_app/config/environments/production.rb +67 -0
  157. data/spec/assets/rails328_ruby187_app/config/environments/test.rb +37 -0
  158. data/spec/assets/rails328_ruby187_app/config/initializers/backtrace_silencers.rb +7 -0
  159. data/spec/assets/rails328_ruby187_app/config/initializers/inflections.rb +15 -0
  160. data/spec/assets/rails328_ruby187_app/config/initializers/mime_types.rb +5 -0
  161. data/spec/assets/rails328_ruby187_app/config/initializers/secret_token.rb +7 -0
  162. data/spec/assets/rails328_ruby187_app/config/initializers/session_store.rb +8 -0
  163. data/spec/assets/rails328_ruby187_app/config/initializers/wrap_parameters.rb +14 -0
  164. data/spec/assets/rails328_ruby187_app/config/locales/en.yml +5 -0
  165. data/spec/assets/rails328_ruby187_app/config/routes.rb +58 -0
  166. data/spec/assets/rails328_ruby187_app/db/seeds.rb +7 -0
  167. data/spec/assets/rails328_ruby187_app/doc/README_FOR_APP +2 -0
  168. data/spec/assets/rails328_ruby187_app/manifest.yml +7 -0
  169. data/spec/assets/rails328_ruby187_app/public/404.html +26 -0
  170. data/spec/assets/rails328_ruby187_app/public/422.html +26 -0
  171. data/spec/assets/rails328_ruby187_app/public/500.html +25 -0
  172. data/spec/assets/rails328_ruby187_app/public/assets/application-7270767b2a9e9fff880aa5de378ca791.css +0 -0
  173. data/spec/assets/rails328_ruby187_app/public/assets/application-7270767b2a9e9fff880aa5de378ca791.css.gz +0 -0
  174. data/spec/assets/rails328_ruby187_app/public/assets/application-ccab98dc1abdf097c0af693e20aed861.js +17 -0
  175. data/spec/assets/rails328_ruby187_app/public/assets/application-ccab98dc1abdf097c0af693e20aed861.js.gz +0 -0
  176. data/spec/assets/rails328_ruby187_app/public/assets/application.css +0 -0
  177. data/spec/assets/rails328_ruby187_app/public/assets/application.css.gz +0 -0
  178. data/spec/assets/rails328_ruby187_app/public/assets/application.js +17 -0
  179. data/spec/assets/rails328_ruby187_app/public/assets/application.js.gz +0 -0
  180. data/spec/assets/rails328_ruby187_app/public/assets/manifest.yml +4 -0
  181. data/spec/assets/rails328_ruby187_app/public/assets/rails-be8732dac73d845ac5b142c8fb5f9fb0.png +0 -0
  182. data/spec/assets/rails328_ruby187_app/public/assets/rails.png +0 -0
  183. data/spec/assets/rails328_ruby187_app/public/favicon.ico +0 -0
  184. data/spec/assets/rails328_ruby187_app/public/index.html +241 -0
  185. data/spec/assets/rails328_ruby187_app/public/robots.txt +5 -0
  186. data/spec/assets/rails328_ruby187_app/script/rails +6 -0
  187. data/spec/assets/rails328_ruby187_app/test/performance/browsing_test.rb +12 -0
  188. data/spec/assets/rails328_ruby187_app/test/test_helper.rb +13 -0
  189. data/spec/cf/cli/app/base_spec.rb +17 -0
  190. data/spec/cf/cli/app/delete_spec.rb +197 -0
  191. data/spec/cf/cli/app/env_spec.rb +261 -0
  192. data/spec/cf/cli/app/events_spec.rb +72 -0
  193. data/spec/cf/cli/app/help_spec.rb +39 -0
  194. data/spec/cf/cli/app/instances_spec.rb +69 -0
  195. data/spec/cf/cli/app/push/create_spec.rb +444 -0
  196. data/spec/cf/cli/app/push/interactions_spec.rb +32 -0
  197. data/spec/cf/cli/app/push_spec.rb +332 -0
  198. data/spec/cf/cli/app/rename_spec.rb +108 -0
  199. data/spec/cf/cli/app/restart_spec.rb +47 -0
  200. data/spec/cf/cli/app/scale_spec.rb +63 -0
  201. data/spec/cf/cli/app/start_spec.rb +255 -0
  202. data/spec/cf/cli/app/stats_spec.rb +66 -0
  203. data/spec/cf/cli/domain/help_spec.rb +39 -0
  204. data/spec/cf/cli/domain/map_spec.rb +140 -0
  205. data/spec/cf/cli/domain/unmap_spec.rb +77 -0
  206. data/spec/cf/cli/help_spec.rb +21 -0
  207. data/spec/cf/cli/organization/create_spec.rb +121 -0
  208. data/spec/cf/cli/organization/delete_spec.rb +105 -0
  209. data/spec/cf/cli/organization/help_spec.rb +39 -0
  210. data/spec/cf/cli/organization/orgs_spec.rb +116 -0
  211. data/spec/cf/cli/organization/rename_spec.rb +116 -0
  212. data/spec/cf/cli/populators/organization_spec.rb +179 -0
  213. data/spec/cf/cli/populators/space_spec.rb +156 -0
  214. data/spec/cf/cli/populators/target_spec.rb +39 -0
  215. data/spec/cf/cli/route/delete_spec.rb +92 -0
  216. data/spec/cf/cli/route/help_spec.rb +32 -0
  217. data/spec/cf/cli/route/map_spec.rb +148 -0
  218. data/spec/cf/cli/route/unmap_spec.rb +114 -0
  219. data/spec/cf/cli/service/bind_spec.rb +25 -0
  220. data/spec/cf/cli/service/create_spec.rb +147 -0
  221. data/spec/cf/cli/service/delete_spec.rb +22 -0
  222. data/spec/cf/cli/service/help_spec.rb +39 -0
  223. data/spec/cf/cli/service/rename_spec.rb +103 -0
  224. data/spec/cf/cli/service/service_helper_spec.rb +66 -0
  225. data/spec/cf/cli/service/service_instance_helper_spec.rb +155 -0
  226. data/spec/cf/cli/service/service_spec.rb +23 -0
  227. data/spec/cf/cli/service/services_spec.rb +156 -0
  228. data/spec/cf/cli/service/unbind_spec.rb +25 -0
  229. data/spec/cf/cli/space/base_spec.rb +49 -0
  230. data/spec/cf/cli/space/create_spec.rb +144 -0
  231. data/spec/cf/cli/space/delete_spec.rb +109 -0
  232. data/spec/cf/cli/space/help_spec.rb +39 -0
  233. data/spec/cf/cli/space/rename_spec.rb +110 -0
  234. data/spec/cf/cli/space/space_spec.rb +80 -0
  235. data/spec/cf/cli/space/spaces_spec.rb +107 -0
  236. data/spec/cf/cli/space/switch_space_spec.rb +57 -0
  237. data/spec/cf/cli/start/help_spec.rb +39 -0
  238. data/spec/cf/cli/start/login_spec.rb +142 -0
  239. data/spec/cf/cli/start/logout_spec.rb +49 -0
  240. data/spec/cf/cli/start/target_prettifier_spec.rb +78 -0
  241. data/spec/cf/cli/start/target_spec.rb +123 -0
  242. data/spec/cf/cli/user/create_spec.rb +98 -0
  243. data/spec/cf/cli/user/help_spec.rb +32 -0
  244. data/spec/cf/cli/user/passwd_spec.rb +94 -0
  245. data/spec/cf/cli/user/register_spec.rb +145 -0
  246. data/spec/cf/cli_spec.rb +474 -0
  247. data/spec/console/console_spec.rb +189 -0
  248. data/spec/factories/cfoundry/v2/apps_factory.rb +12 -0
  249. data/spec/factories/cfoundry/v2/clients_factory.rb +7 -0
  250. data/spec/factories/cfoundry/v2/domains_factory.rb +8 -0
  251. data/spec/factories/cfoundry/v2/managed_service_instances_factory.rb +13 -0
  252. data/spec/factories/cfoundry/v2/organizations_factory.rb +14 -0
  253. data/spec/factories/cfoundry/v2/quota_definitions.rb +13 -0
  254. data/spec/factories/cfoundry/v2/routes_factory.rb +8 -0
  255. data/spec/factories/cfoundry/v2/service_bindings_factory.rb +11 -0
  256. data/spec/factories/cfoundry/v2/service_brokers_factory.rb +11 -0
  257. data/spec/factories/cfoundry/v2/service_plans_factory.rb +17 -0
  258. data/spec/factories/cfoundry/v2/services_factory.rb +14 -0
  259. data/spec/factories/cfoundry/v2/spaces_factory.rb +13 -0
  260. data/spec/factories/cfoundry/v2/stacks_factory.rb +11 -0
  261. data/spec/factories/cfoundry/v2/user_provided_service_instances_factory.rb +12 -0
  262. data/spec/factories/cfoundry/v2/users_factory.rb +7 -0
  263. data/spec/features/backspace_spec.rb +46 -0
  264. data/spec/features/create_user_spec.rb +74 -0
  265. data/spec/features/delete_orphaned_service_spec.rb +64 -0
  266. data/spec/features/login_spec.rb +65 -0
  267. data/spec/features/manifests_spec.rb +86 -0
  268. data/spec/features/org_spec.rb +50 -0
  269. data/spec/features/push_flow_spec.rb +169 -0
  270. data/spec/features/service_brokers_spec.rb +173 -0
  271. data/spec/features/services_spec.rb +122 -0
  272. data/spec/features/space_spec.rb +107 -0
  273. data/spec/features/switching_targets_spec.rb +70 -0
  274. data/spec/manifests/errors_spec.rb +43 -0
  275. data/spec/manifests/loader/builder_spec.rb +80 -0
  276. data/spec/manifests/loader/normalizer_spec.rb +158 -0
  277. data/spec/manifests/manifests_spec.rb +335 -0
  278. data/spec/manifests/plugin_spec.rb +410 -0
  279. data/spec/micro/plugin_spec.rb +64 -0
  280. data/spec/spec_helper.rb +69 -0
  281. data/spec/support/cli_helper.rb +87 -0
  282. data/spec/support/config_helper.rb +15 -0
  283. data/spec/support/factory_girl.rb +6 -0
  284. data/spec/support/fake_home_dir.rb +55 -0
  285. data/spec/support/features_helper.rb +99 -0
  286. data/spec/support/interact_helper.rb +27 -0
  287. data/spec/support/matchers.rb +16 -0
  288. data/spec/support/mock_commands/mock_restart.rb +16 -0
  289. data/spec/support/mock_commands/mock_start.rb +17 -0
  290. data/spec/support/shared_examples/errors.rb +40 -0
  291. data/spec/support/shared_examples/input.rb +14 -0
  292. data/spec/tunnel/plugin_spec.rb +31 -0
  293. data/spec/tunnel/tunnel_spec.rb +54 -0
  294. metadata +814 -0
@@ -0,0 +1,156 @@
1
+ require "spec_helper"
2
+
3
+ module CF
4
+ module Populators
5
+ describe Space do
6
+ stub_home_dir_with { "#{SPEC_ROOT}/fixtures/fake_home_dirs/new" }
7
+
8
+ describe "#populate_and_save!" do
9
+ let(:spaces) do
10
+ [
11
+ build(:space, :name => "Development", :guid => "space-id-1", :developers => [user]),
12
+ build(:space, :name => "Staging", :guid => "space-id-2")
13
+ ]
14
+ end
15
+ let(:space) { spaces.first }
16
+ let(:user) { build(:user) }
17
+ let(:client) { build(:client) }
18
+ let(:organization) { build(:organization, :client => client, :name => "My Org", :guid => "organization-id-1", :users => [user], :spaces => spaces) }
19
+
20
+ let(:tokens_file_path) { "~/.truck/tokens.yml" }
21
+ let(:input_hash) { {:space => space} }
22
+ let(:inputs) { Mothership::Inputs.new(nil, nil, input_hash) }
23
+ let(:tokens_yaml) { YAML.load_file(File.expand_path(tokens_file_path)) }
24
+ let(:populator) { CF::Populators::Space.new(inputs, organization) }
25
+
26
+ before do
27
+ client.stub(:current_user).and_return(user)
28
+ described_class.any_instance.stub(:client).and_return(client)
29
+ end
30
+
31
+ def execute_populate_and_save
32
+ capture_output { populator.populate_and_save! }
33
+ end
34
+
35
+ it "updates the client with the new space" do
36
+ write_token_file({:space => "space-id-2"})
37
+ described_class.any_instance.unstub(:client)
38
+ populator.client.current_space.guid.should == "space-id-2"
39
+
40
+ execute_populate_and_save
41
+
42
+ populator.client.current_space.guid.should == "space-id-1"
43
+ end
44
+
45
+ it "returns the space" do
46
+ execute_populate_and_save.should == space
47
+ end
48
+
49
+ describe "mothership input arguments" do
50
+ let(:inputs) do
51
+ Mothership::Inputs.new(nil, nil, input_hash).tap do |input|
52
+ input.should_receive(:[]).with(:space, organization).and_return(space)
53
+ input.stub(:[]).and_return(space)
54
+ end
55
+ end
56
+
57
+ it "passes through extra arguments to the input call" do
58
+ execute_populate_and_save
59
+ end
60
+ end
61
+
62
+ context "with a space in the input" do
63
+ let(:input_hash) { {:space => space} }
64
+ before { write_token_file({:space => "space-id-2"}) }
65
+
66
+ it "uses that space" do
67
+ execute_populate_and_save.should == space
68
+ end
69
+
70
+ it "should not reprompt for space" do
71
+ dont_allow_ask("Space", anything)
72
+ execute_populate_and_save
73
+ end
74
+
75
+ it "sets the space in the token file" do
76
+ execute_populate_and_save
77
+ expect(tokens_yaml["https://api.some-domain.com"][:space]).to be == "space-id-1"
78
+ end
79
+
80
+ it "prints out that it is switching to that space" do
81
+ execute_populate_and_save
82
+ expect(output).to say("Switching to space #{space.name}")
83
+ end
84
+ end
85
+
86
+ context "without a space in the input" do
87
+ let(:input_hash) { {} }
88
+
89
+ context "with a space in the config file" do
90
+ before do
91
+ write_token_file({:space => space.guid, :organization => organization.guid})
92
+ client.stub(:space).and_return(space)
93
+ end
94
+
95
+ it "should not reprompt for space" do
96
+ dont_allow_ask("Space", anything)
97
+ execute_populate_and_save
98
+ end
99
+
100
+ it "sets the space in the token file" do
101
+ execute_populate_and_save
102
+ expect(tokens_yaml["https://api.some-domain.com"][:space]).to be == "space-id-1"
103
+ end
104
+
105
+ context "but that space doesn't exist anymore (not valid)" do
106
+ before do
107
+ space.stub(:developers).and_raise(CFoundry::APIError)
108
+ organization.stub(:spaces).and_return(spaces)
109
+ end
110
+
111
+ it "asks the user for an space" do
112
+ should_ask("Space", anything) { space }
113
+ execute_populate_and_save
114
+ end
115
+ end
116
+ end
117
+
118
+ context "without a space in the config file" do
119
+ context "when the user has spaces in that organization" do
120
+ before do
121
+ write_token_file({})
122
+ organization.stub(:spaces).and_return(spaces)
123
+ end
124
+
125
+ it "prompts for the space" do
126
+ should_ask("Space", anything) { space }
127
+ execute_populate_and_save
128
+
129
+ expect(output).to say("Switching to space #{space.name}")
130
+ end
131
+
132
+ it "sets the space in the token file" do
133
+ should_ask("Space", anything) { space }
134
+
135
+ execute_populate_and_save
136
+ expect(tokens_yaml["https://api.some-domain.com"][:space]).to be == "space-id-1"
137
+ end
138
+ end
139
+
140
+ context "when the user has no spaces in that organization" do
141
+ before do
142
+ write_token_file({})
143
+ organization.stub(:spaces).and_return([])
144
+ end
145
+
146
+ it "warns the user they should create one" do
147
+ execute_populate_and_save
148
+ expect(output).to say("There are no spaces. You may want to create one with create-space.")
149
+ end
150
+ end
151
+ end
152
+ end
153
+ end
154
+ end
155
+ end
156
+ end
@@ -0,0 +1,39 @@
1
+ require "spec_helper"
2
+
3
+ module CF
4
+ describe Populators::Target do
5
+ describe "#populate_and_save!" do
6
+ let(:input) { double(:input) }
7
+ let(:organization_populator) { double(Populators::Organization) }
8
+ let(:space_populator) { double(Populators::Space) }
9
+
10
+ def execute_populate_and_save
11
+ Populators::Target.new(input).populate_and_save!
12
+ end
13
+
14
+ context 'when there are no orgs' do
15
+ it 'does not try to populate the space' do
16
+ Populators::Organization.stub(:new).and_return(organization_populator)
17
+ organization_populator.stub(:populate_and_save!).and_return(nil)
18
+
19
+ Populators::Space.stub(:new).and_return(space_populator)
20
+ space_populator.should_not receive(:populate_and_save!)
21
+
22
+ execute_populate_and_save
23
+ end
24
+ end
25
+
26
+ it "uses a organization_populator then a space_populator populator" do
27
+ Populators::Organization.should_receive(:new).with(input).and_return(organization_populator)
28
+
29
+ cfoundry_organization = double(CFoundry::V2::Organization)
30
+ organization_populator.should_receive(:populate_and_save!).and_return(cfoundry_organization)
31
+
32
+ Populators::Space.should_receive(:new).with(input, cfoundry_organization).and_return(space_populator)
33
+ space_populator.should_receive(:populate_and_save!)
34
+
35
+ execute_populate_and_save
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,92 @@
1
+ require 'spec_helper'
2
+
3
+ describe CF::Route::Delete do
4
+ before do
5
+ stub_client_and_precondition
6
+ route.stub(:delete!)
7
+ end
8
+
9
+ let(:client) do
10
+ build(:client).tap { |client| client.stub(:routes => [route]) }
11
+ end
12
+ let(:route) { build(:route, :host => host_name, :domain => domain) }
13
+ let(:domain) { build(:domain, :name => domain_name) }
14
+ let(:domain_name) { "some-domain.com" }
15
+ let(:host_name) { "some-host" }
16
+ let(:url) { "#{host_name}.#{domain_name}" }
17
+
18
+ describe 'metadata' do
19
+ let(:command) { Mothership.commands[:delete_route] }
20
+
21
+ describe 'command' do
22
+ subject { command }
23
+ its(:description) { should eq "Delete a route" }
24
+ it { expect(Mothership::Help.group(:routes)).to include(subject) }
25
+ end
26
+
27
+ include_examples 'inputs must have descriptions'
28
+
29
+ describe 'arguments' do
30
+ subject { command.arguments }
31
+ it 'has the correct argument order' do
32
+ should eq([{:type => :normal, :value => nil, :name => :route}])
33
+ end
34
+ end
35
+ end
36
+
37
+ context "without the force parameter" do
38
+ let(:command) { cf %W[delete-route #{url}] }
39
+
40
+ it "prompts the user are they sure?" do
41
+ should_ask("Really delete #{url}?", {:default => false}) { true }
42
+
43
+ command
44
+ end
45
+
46
+ context "when the user responds 'y'" do
47
+ before do
48
+ stub_ask("Really delete #{url}?", {:default => false}) { true }
49
+ end
50
+
51
+ it "deletes the route" do
52
+ route.should_receive(:delete!)
53
+ command
54
+ end
55
+
56
+ it "exits cleanly" do
57
+ command
58
+ @status.should == 0
59
+ end
60
+ end
61
+
62
+ context "when the user responds 'n'" do
63
+ before do
64
+ stub_ask("Really delete #{url}?", {:default => false}) { false }
65
+ end
66
+
67
+ it "does not delete the route" do
68
+ route.should_not_receive(:delete!)
69
+ command
70
+ end
71
+
72
+ it "exits cleanly" do
73
+ command
74
+ @status.should == 0
75
+ end
76
+ end
77
+ end
78
+
79
+ context "with the force parameter" do
80
+ let(:command) { cf %W[delete-route #{url} --force] }
81
+
82
+ it "deletes the route" do
83
+ route.should_receive(:delete!)
84
+ command
85
+ end
86
+
87
+ it "exits cleanly" do
88
+ command
89
+ @status.should == 0
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,32 @@
1
+ require "spec_helper"
2
+
3
+ module CF
4
+ module Route
5
+ describe "Help" do
6
+ let(:global) { {} }
7
+ let(:given) { {} }
8
+
9
+ subject do
10
+ capture_output { Mothership.new.invoke(:help, :command => "routes") }
11
+ end
12
+
13
+ it "describes the command" do
14
+ subject
15
+ stdout.rewind
16
+ expect(stdout.readlines.first).to match /List routes in a space/
17
+ end
18
+
19
+ context "when the user is not logged in" do
20
+ before do
21
+ capture_output { Mothership.new.invoke(:logout) }
22
+ end
23
+
24
+ it "does not require login" do
25
+ subject
26
+ stdout.rewind
27
+ expect(stdout.readlines.first).to_not match /Please log in first to proceed/
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,148 @@
1
+ require "spec_helper"
2
+
3
+ module CF
4
+ module Route
5
+ describe Map do
6
+ before do
7
+ stub_client_and_precondition
8
+ end
9
+
10
+ let(:client) { build(:client) }
11
+
12
+ let(:app) { build(:app, :space => space, :name => "app-name") }
13
+ let(:space) { build(:space, :domains => space_domains) }
14
+ let(:domain) { build(:domain, :name => "domain-name-1") }
15
+
16
+ let(:apps) { [app] }
17
+ let(:routes) { [] }
18
+ let(:domains) { [domain] }
19
+
20
+ let(:space_domains) { domains }
21
+
22
+ let(:host_name) { "some-host" }
23
+
24
+ shared_examples "mapping the route to the app" do
25
+ context "and the domain is mapped to the space" do
26
+ let(:space_domains) { [domain] }
27
+
28
+ before do
29
+ space.stub(:domain_by_name).with(domain.name).and_return(domain)
30
+ end
31
+
32
+ context "and the route is mapped to the space" do
33
+ let(:routes) { [route] }
34
+ let(:route) { build(:route, :space => space, :host => host_name, :domain => domain) }
35
+
36
+ it "binds the route to the app" do
37
+ app.should_receive(:add_route).with(route)
38
+ subject
39
+ end
40
+ end
41
+
42
+ context "and the route is not mapped to the space" do
43
+ let(:new_route) { build(:route) }
44
+
45
+ before do
46
+ client.stub(:route).and_return(new_route)
47
+ app.stub(:add_route)
48
+ new_route.stub(:create!)
49
+ end
50
+
51
+ it "indicates that it is creating a route" do
52
+ subject
53
+ expect(output).to say("Creating route #{host_name}.#{domain.name}")
54
+ end
55
+
56
+ it "creates the route in the app's space" do
57
+ new_route.should_receive(:create!)
58
+ subject
59
+ expect(new_route.host).to eq host_name
60
+ expect(new_route.domain).to eq domain
61
+ expect(new_route.space).to eq space
62
+ end
63
+
64
+ it "indicates that it is binding the route" do
65
+ subject
66
+ expect(output).to say("Binding #{host_name}.#{domain.name} to #{app.name}")
67
+ end
68
+
69
+ it "binds the route to the app" do
70
+ app.should_receive(:add_route).with(new_route)
71
+ subject
72
+ end
73
+ end
74
+ end
75
+ end
76
+
77
+ context "when an app is specified" do
78
+ subject { cf(%W[map #{app.name} #{host_name} #{domain.name}]) }
79
+
80
+ before do
81
+ client.stub(:apps).and_return(apps)
82
+ client.stub(:routes).and_return(routes)
83
+ end
84
+
85
+ context "when a host is specified" do
86
+ context "and the domain is not already mapped to the space" do
87
+ before do
88
+ space.stub(:domain_by_name).with(domain.name).and_return(nil)
89
+ end
90
+
91
+ it "indicates that the domain is invalid" do
92
+ subject
93
+ expect(error_output).to say("Unknown domain")
94
+ end
95
+ end
96
+
97
+ include_examples "mapping the route to the app"
98
+ end
99
+
100
+ context "when a host is not specified" do
101
+ let(:new_route) { build(:route) }
102
+ let(:host_name) { "" }
103
+
104
+ before do
105
+ client.stub(:route).and_return(new_route)
106
+ client.stub(:app_by_name).with(app.name).and_return(app)
107
+ client.stub(:routes_by_host).with(host_name, {:depth => 0}).and_return([new_route])
108
+ app.stub(:add_route)
109
+ space.stub(:domain_by_name).with(domain.name).and_return(domain)
110
+ new_route.stub(:create!)
111
+ end
112
+
113
+ it "creates a route with an empty string as its host" do
114
+ new_route.should_receive(:create!)
115
+ subject
116
+ expect(new_route.host).to eq ""
117
+ end
118
+
119
+ include_examples "mapping the route to the app"
120
+ end
121
+ end
122
+
123
+ context "when an app is not specified" do
124
+ let(:space_domains) { [domain] }
125
+ let(:new_route) { double(:route).as_null_object }
126
+
127
+ subject { cf %W[map --host #{host_name} #{domain.name}] }
128
+
129
+ before do
130
+ client.stub(:apps).and_return(apps)
131
+ stub_ask("Which application?", anything) { app }
132
+ space.stub(:domain_by_name).with(domain.name).and_return(domain)
133
+ client.stub(:routes_by_host).with(host_name, {:depth => 0}).and_return(routes)
134
+ end
135
+
136
+ it "asks for an app" do
137
+ client.stub(:route).and_return(new_route)
138
+ app.stub(:add_route)
139
+ new_route.stub(:create!)
140
+ should_ask("Which application?", anything) { app }
141
+ subject
142
+ end
143
+
144
+ include_examples "mapping the route to the app"
145
+ end
146
+ end
147
+ end
148
+ end