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,140 @@
1
+ require "spec_helper"
2
+
3
+ module CF
4
+ module Domain
5
+ describe Map do
6
+ before do
7
+ stub_client_and_precondition
8
+ end
9
+
10
+ let(:client) do
11
+ build(:client).tap do |client|
12
+ client.stub(
13
+ :current_organization => organization,
14
+ :current_space => space,
15
+ :spaces => [space],
16
+ :organizations => [organization],
17
+ :domains => domains)
18
+ end
19
+ end
20
+ let(:organization) { build(:organization) }
21
+ let(:space) { build(:space, :organization => organization) }
22
+ let(:domain) { build(:domain, :name => domain_name) }
23
+ let(:domain_name) { "some.domain.com" }
24
+ let(:domains) { [domain] }
25
+
26
+ shared_examples_for "binding a domain to a space" do
27
+ it "adds the domain to the space's organization" do
28
+ space.organization.should_receive(:add_domain).with(domain)
29
+ space.stub(:add_domain)
30
+ subject
31
+ end
32
+
33
+ it "adds the domain to the space" do
34
+ space.organization.stub(:add_domain)
35
+ space.should_receive(:add_domain).with(domain)
36
+ subject
37
+ end
38
+ end
39
+
40
+ shared_examples_for "binding a domain to an organization" do
41
+ it "does NOT add the domain to a space" do
42
+ space.class.any_instance.should_not_receive(:add_domain).with(domain)
43
+ end
44
+
45
+ it "adds the domain to the organization" do
46
+ organization.should_receive(:add_domain).with(domain)
47
+ subject
48
+ end
49
+ end
50
+
51
+ shared_examples_for "mapping a domain to a space" do
52
+ context "when the domain does NOT exist" do
53
+ let(:domains) { [] }
54
+
55
+ before do
56
+ client.stub(:domain) { domain }
57
+ domain.stub(:create!)
58
+ end
59
+
60
+ it "creates the domain" do
61
+ space.organization.stub(:add_domain)
62
+ space.should_receive(:add_domain).with(domain)
63
+
64
+ domain.should_receive(:create!)
65
+ subject
66
+ expect(domain.name).to eq domain_name
67
+ expect(domain.owning_organization).to eq organization
68
+ end
69
+
70
+ include_examples "binding a domain to a space"
71
+ end
72
+
73
+ context "when the domain already exists" do
74
+ include_examples "binding a domain to a space"
75
+ end
76
+ end
77
+
78
+ context "when a domain and a space are passed" do
79
+ subject { cf %W[map-domain #{domain.name} --space #{space.name}] }
80
+ before { organization.stub(:spaces).and_return([space]) }
81
+
82
+ include_examples "mapping a domain to a space"
83
+ end
84
+
85
+ context "when a domain and an organization are passed" do
86
+ subject { cf %W[map-domain #{domain.name} --organization #{organization.name}] }
87
+
88
+ context "and the domain does NOT exist" do
89
+ let(:domains) { [] }
90
+
91
+ before do
92
+ client.stub(:domain) { domain }
93
+ domain.stub(:create!)
94
+ organization.stub(:add_domain)
95
+ end
96
+
97
+ include_examples "binding a domain to an organization"
98
+
99
+ it "creates the domain" do
100
+ domain.should_receive(:create!)
101
+ subject
102
+ expect(domain.name).to eq domain_name
103
+ end
104
+
105
+ context "and the --shared option is passed" do
106
+ subject { cf %W[map-domain #{domain.name} --organization #{organization.name} --shared] }
107
+
108
+ it "adds the domain to the organization" do
109
+ organization.should_receive(:add_domain).with(domain)
110
+ subject
111
+ end
112
+
113
+ it "does not add the domain to a specific organization" do
114
+ domain.stub(:create!)
115
+ subject
116
+ expect(domain.owning_organization).to be_nil
117
+ end
118
+ end
119
+ end
120
+
121
+ context "and the domain already exists" do
122
+ include_examples "binding a domain to an organization"
123
+ end
124
+ end
125
+
126
+ context "when a domain, organization, and space is passed" do
127
+ subject { cf %W[map-domain #{domain.name} --space #{space.name} --organization #{organization.name}] }
128
+ before { organization.stub(:spaces).and_return([space]) }
129
+
130
+ include_examples "mapping a domain to a space"
131
+ end
132
+
133
+ context "when only a domain is passed" do
134
+ subject { cf %W[map-domain #{domain.name}] }
135
+
136
+ include_examples "mapping a domain to a space"
137
+ end
138
+ end
139
+ end
140
+ end
@@ -0,0 +1,77 @@
1
+ require "spec_helper"
2
+
3
+ module CF
4
+ module Domain
5
+ describe Unmap do
6
+ before do
7
+ stub_client_and_precondition
8
+ end
9
+
10
+ let(:client) do
11
+ build(:client).tap do |client|
12
+ client.stub(
13
+ :current_space => space,
14
+ :spaces => [space],
15
+ :organizations => [organization],
16
+ :domains => [domain])
17
+ end
18
+ end
19
+ let(:organization) { build(:organization) }
20
+ let(:space) { build(:space, :organization => organization) }
21
+ let(:domain) { build(:domain, :name => "some.domain.com") }
22
+
23
+ context "when the --delete flag is given" do
24
+ subject { cf %W[unmap-domain #{domain.name} --delete] }
25
+
26
+ it "asks for a confirmation" do
27
+ should_ask("Really delete #{domain.name}?", :default => false) { false }
28
+ domain.stub(:delete!)
29
+ subject
30
+ end
31
+
32
+ context "and the user answers 'no' to the confirmation" do
33
+ it "does NOT delete the domain" do
34
+ stub_ask("Really delete #{domain.name}?", anything) { false }
35
+ domain.should_not_receive(:delete!)
36
+ subject
37
+ end
38
+ end
39
+
40
+ context "and the user answers 'yes' to the confirmation" do
41
+ it "deletes the domain" do
42
+ stub_ask("Really delete #{domain.name}?", anything) { true }
43
+ domain.should_receive(:delete!)
44
+ subject
45
+ end
46
+ end
47
+ end
48
+
49
+ context "when a space is given" do
50
+ subject { cf %W[unmap-domain #{domain.name} --space #{space.name}] }
51
+
52
+ it "unmaps the domain from the space" do
53
+ space.should_receive(:remove_domain).with(domain)
54
+ subject
55
+ end
56
+ end
57
+
58
+ context "when an organization is given" do
59
+ subject { cf %W[unmap-domain #{domain.name} --organization #{organization.name}] }
60
+
61
+ it "unmaps the domain from the organization" do
62
+ organization.should_receive(:remove_domain).with(domain)
63
+ subject
64
+ end
65
+ end
66
+
67
+ context "when only the domain is given" do
68
+ subject { cf %W[unmap-domain #{domain.name}] }
69
+
70
+ it "unmaps the domain from the current space" do
71
+ client.current_space.should_receive(:remove_domain).with(domain)
72
+ subject
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,21 @@
1
+ require "spec_helper"
2
+
3
+ module CF
4
+ describe "Help" do
5
+ let(:global) { {} }
6
+ let(:given) { {} }
7
+ let(:inputs) { {:app => apps[0]} }
8
+ let(:apps) { [build(:app)] }
9
+
10
+
11
+ subject do
12
+ capture_output { Mothership.new.invoke(:help) }
13
+ end
14
+
15
+ it "prints the cf version in the first line" do
16
+ subject
17
+ stdout.rewind
18
+ expect(stdout.readlines.first).to match /Cloud Foundry Command Line Interface, version \[#{CF::VERSION}\]\n/
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,121 @@
1
+ require "spec_helper"
2
+
3
+ module CF
4
+ module Organization
5
+ describe Create do
6
+ let(:client) { build(:client) }
7
+ before { stub_client_and_precondition }
8
+
9
+ describe "metadata" do
10
+ subject(:command) { Mothership.commands[:create_org] }
11
+
12
+ its(:description) { should == "Create an organization" }
13
+ it { expect(Mothership::Help.group(:organizations)).to include(command) }
14
+ its(:arguments) { should == [{type: :optional, value: nil, name: :name}] }
15
+
16
+ include_examples "inputs must have descriptions"
17
+ end
18
+
19
+ describe "running the command" do
20
+ let(:new_org) { build(:organization) }
21
+ let(:current_user) { build(:user) }
22
+
23
+ before do
24
+ client.stub(organization: new_org)
25
+ client.stub(current_user: current_user)
26
+
27
+ @command_args = ["create-org", new_org.name]
28
+ end
29
+
30
+ context "when the organization already exists" do
31
+ let(:existing_org) { build(:organization, name: new_org.name) }
32
+
33
+ before do
34
+ new_org.stub(:create!).and_raise(CFoundry::OrganizationNameTaken)
35
+ end
36
+
37
+ context "when --find-if-exists is given" do
38
+ before { @command_args << "--find-if-exists" }
39
+ before { client.stub(:organization_by_name).with(new_org.name).and_return(existing_org) }
40
+
41
+ context "when --target is given" do
42
+ before { @command_args << "--target" }
43
+
44
+ it "switches them to the existing organization" do
45
+ mock_invoke :target, organization: existing_org
46
+ cf @command_args
47
+ end
48
+ end
49
+
50
+ context "when --target is NOT given" do
51
+ it "does not actively switch to the existing organization" do
52
+ dont_allow_invoke :target
53
+ cf @command_args
54
+ end
55
+ end
56
+ end
57
+
58
+ context "when --find-if-exists is NOT given" do
59
+ before { @command_args << "--target" }
60
+
61
+ context "when --target is given" do
62
+ it "raises an exception" do
63
+ expect { cf @command_args }.to raise_error(CFoundry::OrganizationNameTaken)
64
+ end
65
+ end
66
+
67
+ context "when --target is NOT given" do
68
+ it "raises an exception" do
69
+ expect { cf @command_args }.to raise_error(CFoundry::OrganizationNameTaken)
70
+ end
71
+ end
72
+ end
73
+ end
74
+
75
+ context "when the organization DOES NOT already exist" do
76
+ before do
77
+ new_org.stub(:create!)
78
+ end
79
+
80
+ context "when --find-if-exists is given" do
81
+ before { @command_args << "--find-if-exists" }
82
+
83
+ context "when --target is given" do
84
+ before { @command_args << "--target" }
85
+
86
+ it "switches them to the new organization" do
87
+ mock_invoke :target, organization: new_org
88
+ cf @command_args
89
+ end
90
+ end
91
+
92
+ context "when --target is NOT given" do
93
+ it "does not actively switch to the existing organization" do
94
+ dont_allow_invoke :target
95
+ cf @command_args
96
+ end
97
+ end
98
+ end
99
+
100
+ context "when --find-if-exists is NOT given" do
101
+ context "when --target is given" do
102
+ before { @command_args << "--target" }
103
+
104
+ it "switches them to the new organization" do
105
+ mock_invoke :target, organization: new_org
106
+ cf @command_args
107
+ end
108
+ end
109
+
110
+ context "when --target is NOT given" do
111
+ it "does not actively switch to the existing organization" do
112
+ dont_allow_invoke :target
113
+ cf @command_args
114
+ end
115
+ end
116
+ end
117
+ end
118
+ end
119
+ end
120
+ end
121
+ end
@@ -0,0 +1,105 @@
1
+ require "spec_helper"
2
+
3
+ module CF
4
+ module Organization
5
+ describe Delete do
6
+ describe "metadata" do
7
+ let(:command) { Mothership.commands[:delete_org] }
8
+
9
+ describe "command" do
10
+ subject { command }
11
+ it { expect(Mothership::Help.group(:organizations)).to include(subject) }
12
+ end
13
+
14
+ include_examples "inputs must have descriptions"
15
+ end
16
+
17
+ describe "running the command" do
18
+ let(:organization) { build(:organization, :name => "MyOrg") }
19
+ let(:organizations) { [organization] }
20
+
21
+ let(:client) { build(:client) }
22
+
23
+ subject { capture_output { cf %W[delete-org MyOrg --quiet --force] } }
24
+
25
+ before do
26
+ described_class.any_instance.stub(:client) { client }
27
+ described_class.any_instance.stub(:check_logged_in)
28
+ described_class.any_instance.stub(:check_target)
29
+ CF::Populators::Organization.any_instance.stub(:populate_and_save!).and_return(organization)
30
+ organization.stub(:delete!).and_return(true)
31
+ client.stub(:organizations).and_return(organizations)
32
+ client.stub(:organizations_first_page).and_return(organizations)
33
+ end
34
+
35
+ context "without the force parameter" do
36
+ subject { cf %W[delete-org MyOrg --quiet] }
37
+
38
+ it "confirms deletion of the organization and deletes it" do
39
+ organization.should_receive(:delete!).with(:recursive => false) { true }
40
+ should_ask("Really delete #{organization.name}?", {:default => false}) { true }
41
+
42
+ subject
43
+ end
44
+ end
45
+
46
+ context "when deleting the last organization" do
47
+ before do
48
+ client.stub(:organizations_first_page).and_return([])
49
+ end
50
+
51
+ it "warns the user what they've done" do
52
+ subject
53
+ expect(output).to say("There are no longer any organizations.")
54
+ end
55
+ end
56
+
57
+ context "when deleting the current organization" do
58
+ let(:organizations) { [organization, build(:organization)] }
59
+
60
+ before do
61
+ client.stub(:current_organization).and_return(organization)
62
+ end
63
+
64
+ it "invalidates the old target / client" do
65
+ described_class.any_instance.should_receive(:invalidate_client)
66
+ subject
67
+ end
68
+
69
+ it "invokes the target command" do
70
+ mock_invoke :target
71
+ subject
72
+ end
73
+ end
74
+
75
+ context "when an org fails to delete" do
76
+ before do
77
+ organization.stub(:delete!) { raise CFoundry::AssociationNotEmpty.new("We don't delete children.", 10006) }
78
+ subject
79
+ end
80
+
81
+ it "shows the error message" do
82
+ expect(output).to say "We don't delete children."
83
+ end
84
+
85
+ it "informs the user of how to recursively delete" do
86
+ expect(output).to say "If you want to delete the organization along with all dependent objects, rerun the command with the '--recursive' flag."
87
+ end
88
+
89
+ it "returns a non-zero exit code" do
90
+ @status.should_not == 0
91
+ end
92
+ end
93
+
94
+ context "when deleting with --recursive" do
95
+ subject { cf %W[delete-org MyOrg --recursive --force] }
96
+
97
+ it "sends recursive true in its delete request" do
98
+ organization.should_receive(:delete!).with(:recursive => true)
99
+ subject
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end