openshift-origin-console 1.3.2

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 (291) hide show
  1. data/COPYRIGHT +1 -0
  2. data/Gemfile +21 -0
  3. data/LICENSE +203 -0
  4. data/README.md +123 -0
  5. data/Rakefile +44 -0
  6. data/app/assets/images/cartridge-edge.gif +0 -0
  7. data/app/assets/images/console/arrow-down.png +0 -0
  8. data/app/assets/images/console/console-sprite.png +0 -0
  9. data/app/assets/images/favicon-32.png +0 -0
  10. data/app/assets/images/loader-dark.gif +0 -0
  11. data/app/assets/images/loader.gif +0 -0
  12. data/app/assets/images/sprite-vert.png +0 -0
  13. data/app/assets/javascripts/console.js +10 -0
  14. data/app/assets/javascripts/console/form.js.coffee +51 -0
  15. data/app/assets/stylesheets/_alerts.scss +84 -0
  16. data/app/assets/stylesheets/_breadcrumbs.scss +31 -0
  17. data/app/assets/stylesheets/_buttons.scss +229 -0
  18. data/app/assets/stylesheets/_code.scss +86 -0
  19. data/app/assets/stylesheets/_custom.scss +207 -0
  20. data/app/assets/stylesheets/_footer.scss +54 -0
  21. data/app/assets/stylesheets/_forms.scss +710 -0
  22. data/app/assets/stylesheets/_grid.scss +28 -0
  23. data/app/assets/stylesheets/_input-prepend-append.scss +138 -0
  24. data/app/assets/stylesheets/_labels.scss +40 -0
  25. data/app/assets/stylesheets/_mixins.scss +76 -0
  26. data/app/assets/stylesheets/_override-variables.scss +1 -0
  27. data/app/assets/stylesheets/_responsive.scss +438 -0
  28. data/app/assets/stylesheets/_ribbon.scss +57 -0
  29. data/app/assets/stylesheets/_type.scss +306 -0
  30. data/app/assets/stylesheets/_utilities.scss +10 -0
  31. data/app/assets/stylesheets/_variables.scss +131 -0
  32. data/app/assets/stylesheets/common.css.scss +82 -0
  33. data/app/assets/stylesheets/console/_application.scss +194 -0
  34. data/app/assets/stylesheets/console/_base.scss +26 -0
  35. data/app/assets/stylesheets/console/_breadcrumbs.scss +32 -0
  36. data/app/assets/stylesheets/console/_buttons.scss +214 -0
  37. data/app/assets/stylesheets/console/_core.scss +1002 -0
  38. data/app/assets/stylesheets/console/_dropdowns.scss +63 -0
  39. data/app/assets/stylesheets/console/_help.scss +54 -0
  40. data/app/assets/stylesheets/console/_mixins.scss +11 -0
  41. data/app/assets/stylesheets/console/_navbar.scss +415 -0
  42. data/app/assets/stylesheets/console/_ribbon.scss +82 -0
  43. data/app/assets/stylesheets/console/_tile.scss +122 -0
  44. data/app/assets/stylesheets/origin.css.scss +37 -0
  45. data/app/controllers/account/dashboard.rb +13 -0
  46. data/app/controllers/account_controller.rb +3 -0
  47. data/app/controllers/application_types_controller.rb +80 -0
  48. data/app/controllers/applications_controller.rb +183 -0
  49. data/app/controllers/building_controller.rb +81 -0
  50. data/app/controllers/capability_aware.rb +18 -0
  51. data/app/controllers/cartridge_types_controller.rb +53 -0
  52. data/app/controllers/cartridges_controller.rb +43 -0
  53. data/app/controllers/console/auth/basic.rb +65 -0
  54. data/app/controllers/console/auth/none.rb +5 -0
  55. data/app/controllers/console/auth/remote_user.rb +69 -0
  56. data/app/controllers/console/rescue.rb +48 -0
  57. data/app/controllers/console_controller.rb +19 -0
  58. data/app/controllers/console_index_controller.rb +14 -0
  59. data/app/controllers/domain_aware.rb +26 -0
  60. data/app/controllers/domain_session_sweeper.rb +29 -0
  61. data/app/controllers/domains_controller.rb +30 -0
  62. data/app/controllers/keys_controller.rb +43 -0
  63. data/app/controllers/scaling_controller.rb +46 -0
  64. data/app/controllers/sshkey_aware.rb +23 -0
  65. data/app/controllers/sshkey_session_sweeper.rb +29 -0
  66. data/app/controllers/user_session_sweeper.rb +29 -0
  67. data/app/helpers/console/community_helper.rb +78 -0
  68. data/app/helpers/console/console_helper.rb +26 -0
  69. data/app/helpers/console/help_helper.rb +270 -0
  70. data/app/helpers/console/html5_boilerplate_helper.rb +63 -0
  71. data/app/helpers/console/layout_helper.rb +277 -0
  72. data/app/helpers/console/model_helper.rb +106 -0
  73. data/app/helpers/console/secured_helper.rb +5 -0
  74. data/app/models/alias.rb +10 -0
  75. data/app/models/application.rb +148 -0
  76. data/app/models/application_associations.rb +36 -0
  77. data/app/models/application_template.rb +90 -0
  78. data/app/models/application_type.rb +258 -0
  79. data/app/models/async_aware.rb +60 -0
  80. data/app/models/capabilities.rb +62 -0
  81. data/app/models/cartridge.rb +122 -0
  82. data/app/models/cartridge_type.rb +140 -0
  83. data/app/models/domain.rb +44 -0
  84. data/app/models/domain_associations.rb +33 -0
  85. data/app/models/embedded.rb +11 -0
  86. data/app/models/gear.rb +13 -0
  87. data/app/models/gear_group.rb +104 -0
  88. data/app/models/key.rb +87 -0
  89. data/app/models/quickstart.rb +135 -0
  90. data/app/models/rest_api.rb +130 -0
  91. data/app/models/rest_api/base.rb +781 -0
  92. data/app/models/rest_api/cacheable.rb +91 -0
  93. data/app/models/rest_api/environment.rb +13 -0
  94. data/app/models/rest_api/info.rb +34 -0
  95. data/app/models/rest_api/log_subscriber.rb +29 -0
  96. data/app/models/rest_api/railties/controller_runtime.rb +37 -0
  97. data/app/models/user.rb +27 -0
  98. data/app/models/user_associations.rb +6 -0
  99. data/app/views/account/_domain.html.haml +14 -0
  100. data/app/views/account/_keys.html.haml +20 -0
  101. data/app/views/account/_user.html.haml +5 -0
  102. data/app/views/account/show.html.haml +15 -0
  103. data/app/views/application_templates/_application_template.html.haml +5 -0
  104. data/app/views/application_types/_application_type.html.haml +19 -0
  105. data/app/views/application_types/_custom.html.haml +19 -0
  106. data/app/views/application_types/_persisted.html.haml +26 -0
  107. data/app/views/application_types/_tile.html.haml +9 -0
  108. data/app/views/application_types/index.html.haml +87 -0
  109. data/app/views/application_types/search.html.haml +67 -0
  110. data/app/views/application_types/show.html.haml +219 -0
  111. data/app/views/applications/_application.html.haml +34 -0
  112. data/app/views/applications/_applications_filter.html.haml +8 -0
  113. data/app/views/applications/_footer.html.haml +0 -0
  114. data/app/views/applications/_name.html.haml +28 -0
  115. data/app/views/applications/delete.html.haml +19 -0
  116. data/app/views/applications/get_started.html.haml +145 -0
  117. data/app/views/applications/index.html.haml +55 -0
  118. data/app/views/applications/show.html.haml +193 -0
  119. data/app/views/building/delete.html.haml +22 -0
  120. data/app/views/building/new.html.haml +57 -0
  121. data/app/views/building/show.html.haml +12 -0
  122. data/app/views/cartridge_types/_cartridge_type.html.haml +61 -0
  123. data/app/views/cartridge_types/index.html.haml +37 -0
  124. data/app/views/cartridge_types/show.html.haml +21 -0
  125. data/app/views/cartridges/next_steps.html.haml +58 -0
  126. data/app/views/cartridges/show.html.haml +1 -0
  127. data/app/views/console/error.html.haml +58 -0
  128. data/app/views/console/help.html.haml +90 -0
  129. data/app/views/console/not_found.html.haml +69 -0
  130. data/app/views/console/unauthorized.html.haml +7 -0
  131. data/app/views/domains/_domain.html.haml +14 -0
  132. data/app/views/domains/_form.html.haml +13 -0
  133. data/app/views/domains/edit.html.haml +5 -0
  134. data/app/views/domains/new.html.haml +6 -0
  135. data/app/views/keys/_form.html.haml +14 -0
  136. data/app/views/keys/_simple_form.html.haml +14 -0
  137. data/app/views/keys/new.html.haml +2 -0
  138. data/app/views/layouts/_footer.html.haml +38 -0
  139. data/app/views/layouts/_head.html.haml +35 -0
  140. data/app/views/layouts/console.html.haml +60 -0
  141. data/app/views/layouts/console/_header.html.haml +44 -0
  142. data/app/views/layouts/console/_identity.html.haml +7 -0
  143. data/app/views/layouts/console/_javascripts.html.haml +5 -0
  144. data/app/views/layouts/console/_stylesheets.html.haml +6 -0
  145. data/app/views/scaling/delete.html.haml +17 -0
  146. data/app/views/scaling/new.html.haml +24 -0
  147. data/app/views/scaling/show.html.haml +81 -0
  148. data/app/views/shared/_tracking.html.haml +0 -0
  149. data/conf/console.conf.example +108 -0
  150. data/conf/openshift_console.conf +10 -0
  151. data/config/cartridge_types.yml +54 -0
  152. data/config/initializers/barista_config.rb +86 -0
  153. data/config/initializers/cartridge_types.rb +5 -0
  154. data/config/initializers/console_security.rb +1 -0
  155. data/config/initializers/date_helper.rb +5 -0
  156. data/config/initializers/extended_logger.rb +51 -0
  157. data/config/initializers/formtastic.rb +100 -0
  158. data/config/initializers/inflections.rb +38 -0
  159. data/config/initializers/rdiscount.rb +8 -0
  160. data/config/initializers/rest_api.rb +22 -0
  161. data/config/initializers/sass.rb +30 -0
  162. data/config/initializers/session_trace.rb +32 -0
  163. data/config/initializers/x_frame_options.rb +53 -0
  164. data/config/locales/en.yml +12 -0
  165. data/lib/active_resource/associations.rb +107 -0
  166. data/lib/active_resource/associations/builder/association.rb +35 -0
  167. data/lib/active_resource/associations/builder/belongs_to.rb +5 -0
  168. data/lib/active_resource/associations/builder/has_many.rb +5 -0
  169. data/lib/active_resource/associations/builder/has_one.rb +5 -0
  170. data/lib/active_resource/persistent_connection.rb +341 -0
  171. data/lib/active_resource/persistent_http_mock.rb +68 -0
  172. data/lib/active_resource/reflection.rb +78 -0
  173. data/lib/console.rb +8 -0
  174. data/lib/console/config_file.rb +13 -0
  175. data/lib/console/configuration.rb +163 -0
  176. data/lib/console/engine.rb +28 -0
  177. data/lib/console/formtastic/bootstrap_form_builder.rb +369 -0
  178. data/lib/console/rails/app_redirector.rb +40 -0
  179. data/lib/console/rails/filter_hash.rb +15 -0
  180. data/lib/console/rails/routes.rb +51 -0
  181. data/lib/console/version.rb +5 -0
  182. data/lib/tasks/assets.rake +79 -0
  183. data/lib/tasks/stats.rake +18 -0
  184. data/lib/tasks/test_suites.rake +73 -0
  185. data/test/coverage_helper.rb +27 -0
  186. data/test/fixtures/cartridges.json +1 -0
  187. data/test/fixtures/quickstarts.csv +3 -0
  188. data/test/functional/account_controller_test.rb +14 -0
  189. data/test/functional/application_types_controller_test.rb +251 -0
  190. data/test/functional/applications_controller_sanity_test.rb +26 -0
  191. data/test/functional/applications_controller_test.rb +365 -0
  192. data/test/functional/building_controller_test.rb +203 -0
  193. data/test/functional/cartridge_types_controller_isolation_test.rb +68 -0
  194. data/test/functional/cartridge_types_controller_test.rb +48 -0
  195. data/test/functional/cartridges_controller_test.rb +83 -0
  196. data/test/functional/console_auth_basic_controller_test.rb +82 -0
  197. data/test/functional/console_auth_remote_user_controller_test.rb +90 -0
  198. data/test/functional/console_index_controller_test.rb +22 -0
  199. data/test/functional/domains_controller_test.rb +194 -0
  200. data/test/functional/keys_controller_test.rb +163 -0
  201. data/test/functional/quickstarts.json +18 -0
  202. data/test/functional/scaling_controller_test.rb +153 -0
  203. data/test/integration/assets_test.rb +34 -0
  204. data/test/integration/help_link_test.rb +43 -0
  205. data/test/integration/quickstarts_test.rb +24 -0
  206. data/test/integration/rescue_from_test.rb +25 -0
  207. data/test/integration/rest_api/application_test.rb +115 -0
  208. data/test/integration/rest_api/cartridge_test.rb +44 -0
  209. data/test/integration/rest_api/cartridge_type_test.rb +143 -0
  210. data/test/integration/rest_api/domain_test.rb +91 -0
  211. data/test/integration/rest_api/info_test.rb +9 -0
  212. data/test/integration/rest_api/key_test.rb +85 -0
  213. data/test/integration/static_pages_test.rb +44 -0
  214. data/test/rails_app/Rakefile +7 -0
  215. data/test/rails_app/app/controllers/application_controller.rb +5 -0
  216. data/test/rails_app/config.ru +4 -0
  217. data/test/rails_app/config/application.rb +48 -0
  218. data/test/rails_app/config/boot.rb +10 -0
  219. data/test/rails_app/config/database.yml +25 -0
  220. data/test/rails_app/config/environment.rb +5 -0
  221. data/test/rails_app/config/environments/development.rb +38 -0
  222. data/test/rails_app/config/environments/production.rb +70 -0
  223. data/test/rails_app/config/environments/test.rb +43 -0
  224. data/test/rails_app/config/initializers/auth.rb +0 -0
  225. data/test/rails_app/config/initializers/backtrace_silencers.rb +7 -0
  226. data/test/rails_app/config/initializers/inflections.rb +10 -0
  227. data/test/rails_app/config/initializers/mime_types.rb +5 -0
  228. data/test/rails_app/config/initializers/secret_token.rb +7 -0
  229. data/test/rails_app/config/initializers/session_store.rb +8 -0
  230. data/test/rails_app/config/locales/en.yml +5 -0
  231. data/test/rails_app/config/routes.rb +4 -0
  232. data/test/rails_app/script/rails +6 -0
  233. data/test/support/auth.rb +111 -0
  234. data/test/support/base.rb +142 -0
  235. data/test/support/errors.rb +28 -0
  236. data/test/support/rest_api.rb +189 -0
  237. data/test/test_helper.rb +14 -0
  238. data/test/unit/active_model_compliance_test.rb +23 -0
  239. data/test/unit/async_aware_test.rb +55 -0
  240. data/test/unit/configuration_test.rb +158 -0
  241. data/test/unit/filter_hash_test.rb +64 -0
  242. data/test/unit/helpers/model_helper_test.rb +61 -0
  243. data/test/unit/overrides_test.rb +9 -0
  244. data/test/unit/rest_api_test.rb +1590 -0
  245. data/vendor/assets/javascripts/MIT-LICENSE.txt +20 -0
  246. data/vendor/assets/javascripts/bootstrap-collapse.js +157 -0
  247. data/vendor/assets/javascripts/bootstrap-dropdown.js +100 -0
  248. data/vendor/assets/javascripts/bootstrap-tab.js +135 -0
  249. data/vendor/assets/javascripts/bootstrap-transition.js +61 -0
  250. data/vendor/assets/javascripts/jquery.spin.js +47 -0
  251. data/vendor/assets/javascripts/jquery.ui.widget.js +16 -0
  252. data/vendor/assets/javascripts/jquery_cookie.js +41 -0
  253. data/vendor/assets/javascripts/jquery_validate_min.js +51 -0
  254. data/vendor/assets/javascripts/modernizr.min.js +2 -0
  255. data/vendor/assets/javascripts/plugins.js +16 -0
  256. data/vendor/assets/stylesheets/bootstrap/_accordion.scss +28 -0
  257. data/vendor/assets/stylesheets/bootstrap/_alerts.scss +70 -0
  258. data/vendor/assets/stylesheets/bootstrap/_breadcrumbs.scss +22 -0
  259. data/vendor/assets/stylesheets/bootstrap/_button-groups.scss +147 -0
  260. data/vendor/assets/stylesheets/bootstrap/_buttons.scss +183 -0
  261. data/vendor/assets/stylesheets/bootstrap/_carousel.scss +121 -0
  262. data/vendor/assets/stylesheets/bootstrap/_close.scss +18 -0
  263. data/vendor/assets/stylesheets/bootstrap/_code.scss +57 -0
  264. data/vendor/assets/stylesheets/bootstrap/_component-animations.scss +18 -0
  265. data/vendor/assets/stylesheets/bootstrap/_dropdowns.scss +130 -0
  266. data/vendor/assets/stylesheets/bootstrap/_forms.scss +522 -0
  267. data/vendor/assets/stylesheets/bootstrap/_grid.scss +8 -0
  268. data/vendor/assets/stylesheets/bootstrap/_hero-unit.scss +20 -0
  269. data/vendor/assets/stylesheets/bootstrap/_labels.scss +32 -0
  270. data/vendor/assets/stylesheets/bootstrap/_layouts.scss +17 -0
  271. data/vendor/assets/stylesheets/bootstrap/_mixins.scss +602 -0
  272. data/vendor/assets/stylesheets/bootstrap/_modals.scss +84 -0
  273. data/vendor/assets/stylesheets/bootstrap/_navbar.scss +299 -0
  274. data/vendor/assets/stylesheets/bootstrap/_navs.scss +353 -0
  275. data/vendor/assets/stylesheets/bootstrap/_pager.scss +30 -0
  276. data/vendor/assets/stylesheets/bootstrap/_pagination.scss +55 -0
  277. data/vendor/assets/stylesheets/bootstrap/_popovers.scss +49 -0
  278. data/vendor/assets/stylesheets/bootstrap/_progress-bars.scss +95 -0
  279. data/vendor/assets/stylesheets/bootstrap/_reset.scss +126 -0
  280. data/vendor/assets/stylesheets/bootstrap/_scaffolding.scss +33 -0
  281. data/vendor/assets/stylesheets/bootstrap/_sprites.scss +158 -0
  282. data/vendor/assets/stylesheets/bootstrap/_tables.scss +150 -0
  283. data/vendor/assets/stylesheets/bootstrap/_thumbnails.scss +35 -0
  284. data/vendor/assets/stylesheets/bootstrap/_tooltip.scss +35 -0
  285. data/vendor/assets/stylesheets/bootstrap/_type.scss +218 -0
  286. data/vendor/assets/stylesheets/bootstrap/_utilities.scss +23 -0
  287. data/vendor/assets/stylesheets/bootstrap/_variables.scss +107 -0
  288. data/vendor/assets/stylesheets/bootstrap/_wells.scss +17 -0
  289. data/vendor/assets/stylesheets/bootstrap/bootstrap.scss +66 -0
  290. data/vendor/assets/stylesheets/bootstrap/responsive.scss +334 -0
  291. metadata +506 -0
@@ -0,0 +1,68 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ class CartridgeTypesIsolationControllerTest < ActionController::TestCase
4
+ tests CartridgeTypesController
5
+
6
+ uses_http_mock :sometimes
7
+
8
+ setup :with_unique_user
9
+
10
+ def domain
11
+ {:id => 'test'}
12
+ end
13
+ def app
14
+ {:name => 'test', :framework => 'php-5.3'}
15
+ end
16
+
17
+ def mock_app
18
+ Rails.cache.clear # cart metadata is mocked
19
+ allow_http_mock
20
+ ActiveResource::HttpMock.respond_to({},true) do |mock|
21
+ mock.get '/broker/rest/domains.json', json_header, [domain].to_json
22
+ mock.get '/broker/rest/domains/test/applications/test.json', json_header, app.to_json
23
+ mock.get '/broker/rest/domains/test/applications/test/cartridges.json', json_header, [].to_json
24
+ mock.get '/broker/rest/cartridges.json', anonymous_json_header, [{:name => 'fake-cart-1', :type => :embedded}].to_json
25
+ end
26
+ app
27
+ end
28
+
29
+ test "should list a new server cart with no metadata" do
30
+ mock_app
31
+ get :index, :application_id => 'test'
32
+ assert_response :success
33
+
34
+ assert a = assigns(:application)
35
+ assert_equal app[:name], a.name
36
+ assert d = assigns(:domain)
37
+ assert_equal domain[:id], d.id
38
+
39
+ assert types = assigns(:installed)
40
+ assert_equal 0, types.length
41
+ assert types = assigns(:conflicts)
42
+ assert_equal 0, types.length
43
+ assert types = assigns(:requires)
44
+ assert types.length == 0
45
+ assert types = assigns(:blacklist)
46
+ assert types.length == 0
47
+ assert types = assigns(:carts)
48
+ assert types.length > 0
49
+
50
+ cached = CartridgeType.cached.all
51
+ assert cached.all? {|t| (t.tags & [:installed, :inactive, 'inactive']).empty? }, cached.pretty_inspect
52
+ end
53
+
54
+ test "should show a new server cart with no metadata" do
55
+ mock_app
56
+ get :show, :application_id => 'test', :id => 'fake_cart_1'
57
+ assert_response :success
58
+
59
+ assert a = assigns(:application)
60
+ assert_equal app[:name], a.name
61
+ assert d = assigns(:domain)
62
+ assert_equal domain[:id], d.id
63
+
64
+ assert type = assigns(:cartridge_type)
65
+ assert_equal 'fake_cart_1', type.name
66
+ assert assigns(:cartridge)
67
+ end
68
+ end
@@ -0,0 +1,48 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ class CartridgeTypesControllerTest < ActionController::TestCase
4
+
5
+ test "should show index" do
6
+ get :index, :application_id => with_app.name
7
+ assert_response :success
8
+
9
+ assert app = assigns(:application)
10
+ assert_equal with_app.name, app.name
11
+ assert domain = assigns(:domain)
12
+ assert_equal with_app.domain_id, domain.id
13
+
14
+ assert types = assigns(:installed)
15
+ assert_equal 0, types.length
16
+ assert types = assigns(:conflicts)
17
+ assert_equal 0, types.length
18
+ assert types = assigns(:requires)
19
+ assert types.length > 0
20
+ assert types = assigns(:blacklist)
21
+ assert types.length > 0
22
+ assert types = assigns(:carts)
23
+ assert types.length > 0
24
+
25
+ cached = CartridgeType.cached.all
26
+ assert cached.all? {|t| (t.tags & [:installed, :inactive, 'inactive']).empty? }, cached.pretty_inspect
27
+ end
28
+
29
+ test "should show type page" do
30
+ t = CartridgeType.embedded.first
31
+ get :show, :application_id => with_app.name, :id => t.name
32
+ assert_response :success
33
+ assert type = assigns(:cartridge_type)
34
+ assert_equal t.name, type.name
35
+ assert assigns(:cartridge)
36
+ assert assigns(:application)
37
+ assert assigns(:domain)
38
+ end
39
+
40
+ test "should not raise on missing type" do
41
+ # We allow arbitrary cartridges, but we may want to change that
42
+ #assert_raise(StandardError) do
43
+ get :show, :application_id => with_app.name, :id => 'missing_cartridge_type'
44
+ assert_response :success
45
+ #end
46
+ end
47
+ end
48
+
@@ -0,0 +1,83 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ class CartridgesControllerTest < ActionController::TestCase
4
+
5
+ def with_testable_app(remove_carts=false)
6
+ use_app(:cart_testable_app) { Application.new({:name => "carttestable", :cartridge => 'ruby-1.9', :as => new_named_user('user_with_cartridge_testable_app')}) }.tap do |app|
7
+ if remove_carts
8
+ Cartridge.all(app.send(:child_options)).each do |cart|
9
+ next if cart.name == app.framework
10
+ #puts "Destroying cart #{cart.name}"
11
+ begin
12
+ cart.destroy
13
+ rescue => e
14
+ puts "Unable to delete cart #{cart.name}: #{e.message}, #{e.backtrace.join("\n")}"
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+
21
+ test "should create one cartridge" do
22
+ with_testable_app(true)
23
+
24
+ post(:create, get_post_form)
25
+ assert cart = assigns(:cartridge)
26
+ assert cart.errors.empty?, cart.errors.to_hash.inspect
27
+ assert_response :success
28
+ assert_template :next_steps
29
+ end
30
+
31
+ test "should create two cartridges" do
32
+ with_testable_app(true)
33
+
34
+ post(:create, get_post_form)
35
+ assert cart = assigns(:cartridge)
36
+ assert cart.errors.empty?, cart.errors.to_hash.inspect
37
+ assert_response :success
38
+ assert_template :next_steps
39
+
40
+ post_form = get_post_form
41
+ post_form[:cartridge][:name] = 'cron-1.4'
42
+ post(:create, post_form)
43
+ assert cart = assigns(:cartridge)
44
+ assert cart.errors.empty?, cart.errors.to_hash.inspect
45
+
46
+ assert_response :success
47
+ assert_template :next_steps
48
+ end
49
+
50
+ test "should error out if cartridge is installed" do
51
+ with_testable_app(true)
52
+
53
+ post(:create, get_post_form)
54
+ assert cart = assigns(:cartridge)
55
+ assert cart.errors.empty?, cart.errors.to_hash.inspect
56
+ assert_response :success
57
+ assert_template :next_steps
58
+
59
+ post(:create, get_post_form)
60
+ assert_response :success
61
+ assert cart = assigns(:cartridge)
62
+ assert !cart.errors.empty?, cart.errors.to_hash.inspect
63
+ assert cart.errors[:base].present?
64
+ assert_equal 1, cart.errors[:base].length
65
+
66
+ assert_response :success
67
+ assert_template 'cartridge_types/show'
68
+ end
69
+
70
+ #test "should be able to view next steps cartridge page" do
71
+ # with_testable_app(true)
72
+
73
+ # get :next_steps, get_post_form
74
+ # assert_response :success
75
+ # assert_template :next_steps
76
+ #end
77
+
78
+ def get_post_form
79
+ {:cartridge => {:name => 'mysql-5.1', :type => 'embedded'},
80
+ :application_id => with_testable_app.id,
81
+ :domain_id => @domain.id}
82
+ end
83
+ end
@@ -0,0 +1,82 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ class ConsoleAuthBasicControllerTest < ActionController::TestCase
4
+ uses_http_mock :sometimes
5
+
6
+ class ConsoleAuthBasicController < ActionController::Base
7
+ include Console::Rescue
8
+ include Console::Auth::Basic
9
+
10
+ before_filter :authenticate_user!, :except => :unprotected
11
+
12
+ def protected
13
+ render :status => 200, :nothing => true
14
+ end
15
+ def unprotected
16
+ render :status => 200, :nothing => true
17
+ end
18
+ def restapi
19
+ @user = User.find :one, :as => current_user
20
+ render :status => 200, :nothing => true
21
+ end
22
+ end
23
+
24
+ setup{ Rails.application.routes.draw{ match ':action' => ConsoleAuthBasicController } }
25
+ teardown{ Rails.application.reload_routes! }
26
+
27
+ tests ConsoleAuthBasicController
28
+
29
+ test 'should challenge when protected' do
30
+ get :protected
31
+ assert_response :unauthorized
32
+ end
33
+
34
+ test 'should challenge when username empty' do
35
+ @request.env['HTTP_AUTHORIZATION'] = ActionController::HttpAuthentication::Basic.encode_credentials(nil, 'password')
36
+
37
+ get :protected
38
+ assert_response :unauthorized
39
+ end
40
+
41
+ test 'should render when protected' do
42
+ @request.env['HTTP_AUTHORIZATION'] = ActionController::HttpAuthentication::Basic.encode_credentials('bob', 'password')
43
+
44
+ get :protected
45
+
46
+ assert_response :success
47
+ assert assigns(:authenticated_user)
48
+ assert_equal 'bob', @controller.current_user.login
49
+ assert_equal 'bob', assigns(:authenticated_user).login
50
+
51
+ assert !@controller.current_user.persisted?
52
+ assert @controller.current_user.email_address.nil?
53
+ assert @controller.user_signed_in?
54
+ assert !@controller.previously_signed_in?
55
+ end
56
+
57
+ test 'should pass headers to REST API' do
58
+ @request.env['HTTP_AUTHORIZATION'] = ActionController::HttpAuthentication::Basic.encode_credentials('bob', 'password')
59
+
60
+ allow_http_mock
61
+ ActiveResource::HttpMock.respond_to do |mock|
62
+ mock.get '/broker/rest/user.json', anonymous_json_header.merge('Authorization' => @request.env['HTTP_AUTHORIZATION']), {:login => 'foo'}.to_json
63
+ end
64
+
65
+ get :restapi
66
+ assert_response :success
67
+ assert user = assigns(:user)
68
+ assert_equal 'foo', user.login
69
+ end
70
+
71
+ test 'should challenge when broker rejects password' do
72
+ @request.env['HTTP_AUTHORIZATION'] = ActionController::HttpAuthentication::Basic.encode_credentials('bob', 'password')
73
+
74
+ allow_http_mock
75
+ ActiveResource::HttpMock.respond_to do |mock|
76
+ mock.get '/broker/rest/user.json', anonymous_json_header.merge('Authorization' => @request.env['HTTP_AUTHORIZATION']), nil, 401
77
+ end
78
+
79
+ get :restapi
80
+ assert_response :unauthorized
81
+ end
82
+ end
@@ -0,0 +1,90 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ class ConsoleAuthRemoteUserControllerTest < ActionController::TestCase
4
+ uses_http_mock :sometimes
5
+
6
+ class ConsoleAuthRemoteUserController < ActionController::Base
7
+ include Console::Rescue
8
+ include Console::Auth::RemoteUser
9
+
10
+ before_filter :authenticate_user!, :except => :unprotected
11
+
12
+ def protected
13
+ render :status => 200, :nothing => true
14
+ end
15
+ def unprotected
16
+ render :status => 200, :nothing => true
17
+ end
18
+ def restapi
19
+ @user = User.find :one, :as => current_user
20
+ render :status => 200, :nothing => true
21
+ end
22
+ end
23
+
24
+ setup{ Rails.application.routes.draw{ match ':action' => ConsoleAuthRemoteUserController } }
25
+ teardown{ Rails.application.reload_routes! }
26
+
27
+ setup{ Console.config.expects(:remote_user_header).at_least_once.returns('HTTP_X_REMOTE_USER') }
28
+ setup{ Console.config.stubs(:remote_user_copy_headers).returns(['X-Remote-User','X-Other-Header']) }
29
+
30
+ tests ConsoleAuthRemoteUserController
31
+
32
+ test 'should redirect when protected' do
33
+ get :protected
34
+ assert_redirected_to @controller.unauthorized_path
35
+ end
36
+
37
+ test 'should render when protected' do
38
+ @request.env['HTTP_X_REMOTE_USER'] = 'bob'
39
+
40
+ get :protected
41
+
42
+ assert_response :success
43
+ assert assigns(:authenticated_user)
44
+ assert_equal 'bob', @controller.current_user.login
45
+ assert_equal 'bob', assigns(:authenticated_user).login
46
+
47
+ assert !@controller.current_user.persisted?
48
+ assert @controller.user_signed_in?
49
+ assert !@controller.previously_signed_in?
50
+ end
51
+
52
+ test 'should override name configured' do
53
+ Console.config.expects(:remote_user_name_header).at_least_once.returns('HTTP_X_REMOTE_USER_NAME')
54
+ @request.env['HTTP_X_REMOTE_USER'] = 'bob'
55
+ @request.env['HTTP_X_REMOTE_USER_NAME'] = 'alice'
56
+
57
+ get :protected
58
+
59
+ assert_response :success
60
+ assert assigns(:authenticated_user)
61
+ assert_equal 'alice', @controller.current_user.login
62
+ assert_equal 'alice', assigns(:authenticated_user).login
63
+ end
64
+
65
+ test 'should pass headers to REST API' do
66
+ @request.env['HTTP_X_REMOTE_USER'] = 'bob'
67
+
68
+ allow_http_mock
69
+ ActiveResource::HttpMock.respond_to do |mock|
70
+ mock.get '/broker/rest/user.json', anonymous_json_header.merge('X-Remote-User' => 'bob'), {:login => 'foo'}.to_json
71
+ end
72
+
73
+ get :restapi
74
+ assert_response :success
75
+ assert user = assigns(:user)
76
+ assert_equal 'foo', user.login
77
+ end
78
+
79
+ test 'should redirect when misconfigured' do
80
+ @request.env['HTTP_X_REMOTE_USER'] = 'bob'
81
+
82
+ allow_http_mock
83
+ ActiveResource::HttpMock.respond_to do |mock|
84
+ mock.get '/broker/rest/user.json', anonymous_json_header.merge('X-Remote-User' => 'bob'), nil, 401
85
+ end
86
+
87
+ get :restapi
88
+ assert_redirected_to @controller.unauthorized_path
89
+ end
90
+ end
@@ -0,0 +1,22 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ class ConsoleIndexControllerTest < ActionController::TestCase
4
+ test 'redirect to applications path' do
5
+ with_configured_user
6
+ get :index
7
+ assert_redirected_to applications_path
8
+ end
9
+
10
+ test 'render unauthorized' do
11
+ get :unauthorized
12
+ assert_response :success
13
+ assert_template 'console/unauthorized'
14
+ end
15
+
16
+ test 'render help' do
17
+ with_configured_user
18
+ get :help
19
+ assert_response :success
20
+ assert_template 'console/help'
21
+ end
22
+ end
@@ -0,0 +1,194 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ class DomainsControllerTest < ActionController::TestCase
4
+
5
+ @@user = nil
6
+
7
+ def setup
8
+ with_unique_user
9
+ end
10
+
11
+ def with_particular_user
12
+ if @@user
13
+ set_user(@@user)
14
+ else
15
+ @@user = @user
16
+ end
17
+ with_domain
18
+ end
19
+
20
+ def with_domain
21
+ @domain = Domain.first :as => @user
22
+ unless @domain
23
+ @domain = Domain.new(get_post_form.merge(:as => @user))
24
+ flunk @domain.errors.inspect unless @domain.save
25
+ end
26
+ end
27
+
28
+ def unique_name_format
29
+ "d#{uuid[0..10]}%i"
30
+ end
31
+
32
+ test "should display domain creation form" do
33
+ get :new
34
+
35
+ assert domain = assigns(:domain)
36
+ assert_response :success
37
+ assert_template :new
38
+ end
39
+
40
+ test "should create domain" do
41
+ post :create, {:domain => get_post_form}
42
+
43
+ assert domain = assigns(:domain)
44
+ assert domain.errors.empty?, domain.errors.inspect
45
+ assert_redirected_to account_path
46
+ end
47
+
48
+ test "should clear domain session cache" do
49
+ session[:domain] = 'foo'
50
+ post :create, {:domain => get_post_form}
51
+
52
+ assert domain = assigns(:domain)
53
+ assert domain.errors.empty?, domain.errors.inspect
54
+ assert_redirected_to account_path
55
+ assert_nil session[:domain]
56
+ end
57
+
58
+ test "should assign errors on empty name" do
59
+ post :create, {:domain => get_post_form.merge(:name => '')}
60
+
61
+ assert domain = assigns(:domain)
62
+ assert !domain.errors.empty?
63
+ assert domain.errors[:name].present?, domain.errors.inspect
64
+ assert_equal 1, domain.errors[:name].length
65
+ assert_template :new
66
+ end
67
+
68
+ test "should assign errors on long name" do
69
+ post :create, {:domain => get_post_form.merge(:name => 'aoeu'*2000)}
70
+
71
+ assert domain = assigns(:domain)
72
+ assert !domain.errors.empty?
73
+ assert domain.errors[:name].present?, domain.errors.inspect
74
+ assert_equal 1, domain.errors[:name].length, domain.errors.inspect
75
+ assert_template :new
76
+ end
77
+
78
+ test "should assign errors on invalid name" do
79
+ post :create, {:domain => get_post_form.merge(:name => '@@@@')}
80
+
81
+ assert domain = assigns(:domain)
82
+ assert !domain.errors.empty?
83
+ assert domain.errors[:name].present?, domain.errors.inspect
84
+ assert_equal 1, domain.errors[:name].length, domain.errors.inspect
85
+ assert_template :new
86
+ end
87
+
88
+ test "should assign errors on duplicate name" do
89
+ assert (domain = Domain.new(get_post_form.merge(:as => unique_user))).save, domain.errors.inspect
90
+
91
+ post :create, {:domain => get_post_form.merge(:name => domain.name)}
92
+
93
+ assert domain = assigns(:domain)
94
+ assert !domain.errors.empty?
95
+ assert domain.errors[:name].present?, domain.errors.inspect
96
+ assert_equal 1, domain.errors[:name].length, domain.errors.inspect
97
+ assert_template :new
98
+ end
99
+
100
+ #test "should allow only one domain" do
101
+ # with_domain
102
+
103
+ # post :create, {:domain => {:name => unique_name}}
104
+
105
+ # assert domain = assigns(:domain)
106
+ # assert !domain.errors.empty?
107
+ # assert domain.errors[:name].present?, domain.errors.inspect
108
+ # assert_equal 1, domain.errors[:name].length, domain.errors.inspect
109
+ # assert_template :new
110
+ #end
111
+
112
+ test "should show edit domain page" do
113
+ with_domain
114
+
115
+ get :edit
116
+ assert_template :edit
117
+ assert_response :success
118
+ end
119
+
120
+ test "should update domain" do
121
+ with_particular_user
122
+
123
+ put :update, {:domain => {:name => unique_name}}
124
+
125
+ assert domain = assigns(:domain)
126
+ assert domain.errors.empty?, domain.errors.inspect
127
+ assert_redirected_to account_path
128
+ end
129
+
130
+ test "should update domain and clear session cache" do
131
+ with_particular_user
132
+ session[:domain] = 'foo'
133
+
134
+ put :update, {:domain => {:name => unique_name}}
135
+
136
+ assert domain = assigns(:domain)
137
+ assert domain.errors.empty?, domain.errors.inspect
138
+ assert_redirected_to account_path
139
+ assert_nil session[:domain]
140
+ end
141
+
142
+ test "update should assign errors on empty name" do
143
+ with_particular_user
144
+
145
+ put :update, {:domain => {:name => ''}}
146
+
147
+ assert domain = assigns(:domain)
148
+ assert !domain.errors.empty?
149
+ assert domain.errors[:name].present?, domain.errors.inspect
150
+ assert_equal 1, domain.errors[:name].length
151
+ assert_template :edit
152
+ end
153
+
154
+ test "update should assign errors on long name" do
155
+ with_particular_user
156
+
157
+ put :update, {:domain => {:name => 'aoeu'*2000}}
158
+
159
+ assert domain = assigns(:domain)
160
+ assert !domain.errors.empty?
161
+ assert domain.errors[:name].present?, domain.errors.inspect
162
+ assert_equal 1, domain.errors[:name].length
163
+ assert_template :edit
164
+ end
165
+
166
+ test "update should assign errors on invalid name" do
167
+ with_particular_user
168
+
169
+ put :update, {:domain => {:name => '@@@@'}}
170
+
171
+ assert domain = assigns(:domain)
172
+ assert !domain.errors.empty?, domain.inspect
173
+ assert domain.errors[:name].present?, domain.inspect
174
+ assert_equal 1, domain.errors[:name].length
175
+ assert_template :edit
176
+ end
177
+
178
+ test "update should assign errors on duplicate name" do
179
+ with_particular_user
180
+ assert (domain = Domain.new(get_post_form.merge(:name => "d#{new_uuid[0..12]}", :as => unique_user))).save, domain.errors.inspect
181
+
182
+ put :update, {:domain => {:name => domain.name}}
183
+
184
+ assert domain = assigns(:domain)
185
+ assert !domain.errors.empty?
186
+ assert domain.errors[:name].present?, domain.errors.inspect
187
+ assert_equal 1, domain.errors[:name].length
188
+ assert_template :edit
189
+ end
190
+
191
+ def get_post_form
192
+ {:name => "d#{uuid[0..12]}"}
193
+ end
194
+ end