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,163 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ class KeysControllerTest < ActionController::TestCase
4
+
5
+ setup :with_configured_user
6
+ setup :delete_keys
7
+
8
+ def unique_name_format
9
+ 'key%i'
10
+ end
11
+
12
+ test "should show key creation form" do
13
+ get :new
14
+ assert_response :success
15
+ assert_template :new
16
+ assert_nil assigns(:first)
17
+ assert key = assigns(:key)
18
+ assert !key.persisted?
19
+ end
20
+
21
+ test "should create key" do
22
+ post :create, {:key => get_post_form}
23
+
24
+ assert key = assigns(:key)
25
+ assert key.errors.empty?, key.errors.inspect
26
+ assert_redirected_to account_path
27
+ #since this is only key the user has then it cannot be deleted (because of the old client tools)
28
+ #assert key.destroy
29
+ end
30
+
31
+ test "should create key and redirect back" do
32
+ @request.env['HTTP_REFERER'] = 'http://arbitrary/back'
33
+
34
+ post :create, {:key => get_post_form, :first => true}
35
+
36
+ assert key = assigns(:key)
37
+ assert key.errors.empty?, key.errors.inspect
38
+ assert_redirected_to 'http://arbitrary/back'
39
+ assert flash[:success]
40
+
41
+ #since this is only key the user has then it cannot be deleted (because of the old client tools)
42
+ #assert key.destroy
43
+ end
44
+
45
+ test "should create key and redirect back without referrer" do
46
+ post :create, {:key => get_post_form, :first => true}
47
+
48
+ assert key = assigns(:key)
49
+ assert key.errors.empty?, key.errors.inspect
50
+ assert_redirected_to account_path
51
+ assert flash[:success]
52
+
53
+ #since this is only key the user has then it cannot be deleted (because of the old client tools)
54
+ #assert key.destroy
55
+ end
56
+
57
+ test "should overwrite default key" do
58
+ (key = Key.new(:name => 'default', :raw_content => 'ssh-rsa defaultkey1', :as => @user)).save!
59
+
60
+ post :create, {:key => {:name => 'default', :raw_content => 'ssh-rsa defaultkey2'}, :first => true}
61
+
62
+ assert_redirected_to account_path
63
+ assert key = assigns(:key)
64
+ assert_equal 'defaultkey2', key.content
65
+ assert key.errors.empty?, key.errors.inspect
66
+ assert flash[:success]
67
+
68
+ key.destroy
69
+ end
70
+
71
+ test "should give key new name" do
72
+ (key = Key.new(:name => 'test', :raw_content => 'ssh-rsa nameuniquekey1', :as => @user)).save!
73
+
74
+ post :create, {:key => {:name => 'test', :raw_content => 'ssh-rsa nameuniquekey2'}, :first => true}
75
+
76
+ assert_redirected_to account_path
77
+ assert assigns(:first)
78
+ assert key = assigns(:key)
79
+ assert_equal 'test2', key.name
80
+ assert_equal 'nameuniquekey2', key.content
81
+ assert key.errors.empty?, key.errors.inspect
82
+ assert flash[:success]
83
+
84
+ assert key.destroy
85
+ end
86
+
87
+ test "should destroy key" do
88
+ (key = Key.new(get_post_form.merge(:as => @user))).save!
89
+ delete :destroy, :id => key.id
90
+ assert_redirected_to account_path
91
+ end
92
+
93
+ test "should destroy default key" do
94
+ (key = Key.new(get_post_form.merge(:name => 'default', :as => @user))).save!
95
+ delete :destroy, :id => key.id
96
+ assert_redirected_to account_path
97
+ end
98
+
99
+ test "should assign errors on empty name" do
100
+ post :create, {:key => get_post_form.merge(:name => '')}
101
+
102
+ assert_response :success
103
+ assert_template :new
104
+
105
+ assert key = assigns(:key)
106
+ assert !key.errors.empty?
107
+ assert key.errors[:name].present?, key.errors.inspect
108
+ assert_equal 1, key.errors[:name].length
109
+ end
110
+
111
+ test "should assign errors on long name" do
112
+ post :create, {:key => get_post_form.merge(:name => 'aoeu'*2000)}
113
+
114
+ assert_response :success
115
+ assert_template :new
116
+
117
+ assert key = assigns(:key)
118
+ assert !key.errors.empty?
119
+ assert key.errors[:name].present?, key.errors.inspect
120
+ assert_equal 1, key.errors[:name].length
121
+ end
122
+
123
+ test "should assign errors on invalid name" do
124
+ post :create, {:key => get_post_form.merge(:name => '@@@@')}
125
+
126
+ assert_response :success
127
+ assert_template :new
128
+
129
+ assert key = assigns(:key)
130
+ assert !key.errors.empty?
131
+ assert key.errors[:name].present?, key.errors.inspect
132
+ assert_equal 1, key.errors[:name].length
133
+ end
134
+
135
+ test "should assign errors on duplicate name" do
136
+ (key = Key.new(get_post_form.merge(:as => @user))).save!
137
+
138
+ post :create, {:key => get_post_form.merge(:name => key.name, :raw_content => 'ssh-rsa XYZ')}
139
+
140
+ assert_response :success
141
+ assert_template :new
142
+
143
+ assert key = assigns(:key)
144
+ assert !key.errors.empty?
145
+ assert key.errors[:name].present?, key.errors.inspect
146
+ assert_equal 1, key.errors[:name].length
147
+ end
148
+
149
+ test "should clear session cache" do
150
+ session[:has_sshkey] = 'true'
151
+ post :create, {:key => get_post_form}
152
+
153
+ assert key = assigns(:key)
154
+ assert key.errors.empty?, key.errors.inspect
155
+ assert_redirected_to account_path
156
+ assert_nil session[:key]
157
+ end
158
+
159
+ def get_post_form
160
+ name = unique_name
161
+ {:name => name, :raw_content => "ssh-rsa value#{name}"}
162
+ end
163
+ end
@@ -0,0 +1,18 @@
1
+ {
2
+ "data": [
3
+ {
4
+ "quickstart": {
5
+ "body": "<p>A rich blogging platform with a comprehensive ecosystem of plugins and tools.</p>",
6
+ "id": "12069",
7
+ "href": "/community/content/wordpress-34",
8
+ "name": "Wordpress 3.4",
9
+ "updated": "1351452778",
10
+ "cartridges": "php-5.3, mysql-5.1",
11
+ "initial_git_url": "https://github.com/openshift/wordpress-example",
12
+ "language": "PHP",
13
+ "tags": "blog, example, php, wordpress"
14
+ }
15
+ }
16
+ ]
17
+ }
18
+
@@ -0,0 +1,153 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+
4
+ class ScalingControllerTest < ActionController::TestCase
5
+
6
+ uses_http_mock :sometimes
7
+
8
+ def mock_domain
9
+ {:id => 'test'}
10
+ end
11
+ def app_without_scaling
12
+ {:name => 'test', :framework => 'php-5.3', :git_url => 'ssh://foo@bar-domain.rhcloud.com/~/something/repo.git'}
13
+ end
14
+ def app_with_scaling
15
+ {:name => 'test', :framework => 'php-5.3', :git_url => 'ssh://foo@bar-domain.rhcloud.com/~/something/repo.git', :scale => true}
16
+ end
17
+
18
+ def cartridges_without_scaling
19
+ [
20
+ {:name => 'php-5.3', :current_scale => 1, :scales_from => 1, :scales_to => 1},
21
+ ]
22
+ end
23
+ def cartridges_with_scaling(multiplier)
24
+ [
25
+ {:name => 'php-5.3', :collocated_with => ['extra-1.0', 'haproxy-1.4'], :scales_from => 1, :scales_to => multiplier*2, :current_scale => multiplier},
26
+ {:name => 'extra-1.0', :collocated_with => ['php-5.3', 'haproxy-1.4'], :scales_from => 1, :scales_to => 1, :current_scale => 1},
27
+ {:name => 'haproxy-1.4', :collocated_with => ['php-5.3', 'extra-1.0'], :scales_from => 1, :scales_to => 1, :current_scale => 1},
28
+ {:name => 'mysql-5.0', :scales_from => 1, :scales_to => 1, :current_scale => 1},
29
+ ]
30
+ end
31
+
32
+ def with_mock_app(app=app_without_scaling, cartridges=cartridges_without_scaling)
33
+ with_unique_user
34
+
35
+ allow_http_mock
36
+ ActiveResource::HttpMock.respond_to(false) do |mock|
37
+ mock.get '/broker/rest/cartridges.json', anonymous_json_header, [].to_json
38
+ mock.get '/broker/rest/user.json', json_header, {:max_gears => 16}.to_json
39
+ mock.get '/broker/rest/domains.json', json_header, [mock_domain].to_json
40
+ mock.get '/broker/rest/domains/test/applications/test.json', json_header, app.to_json
41
+ mock.get '/broker/rest/domains/test/applications.json', json_header, [app].compact.to_json
42
+ mock.get '/broker/rest/domains/test/applications/test/cartridges.json', json_header, cartridges.to_json
43
+ end
44
+ {:application_id => 'test'}
45
+ end
46
+
47
+ def without_scaling
48
+ with_unique_user
49
+ with_mock_app
50
+ end
51
+ def with_scaling(multiplier=1)
52
+ with_unique_user
53
+ with_mock_app(app_with_scaling, cartridges_with_scaling(multiplier))
54
+ end
55
+
56
+ test 'displays form and title for scaling' do
57
+ get :show, with_scaling(2)
58
+ assert_select 'h2', "php-5.3"
59
+ assert_select 'h2', "extra-1.0"
60
+ assert_select 'h2', "mysql-5.0"
61
+ end
62
+
63
+ def scalable_app_params
64
+ {
65
+ :application_id => with_scalable_app.to_param,
66
+ :id => scalable_cartridge.name
67
+ }
68
+ end
69
+ def scalable_cartridge
70
+ with_scalable_app.cartridges.find(&:scales?)
71
+ end
72
+ def assert_cart_scales(from, to, message='Cartridge scaling not set correctly')
73
+ scalable_cartridge.reload.tap{ |c| assert_equal [from,to], [c.scales_from, c.scales_to], message }
74
+ end
75
+
76
+ test 'updates scale range' do
77
+ put :update, {:cartridge => {:scales_from => 2, :scales_to => 3}}.merge(scalable_app_params)
78
+ assert_redirected_to application_scaling_path
79
+ assert_cart_scales 2, 3
80
+ end
81
+
82
+ test 'allows fixed scale range' do
83
+ put :update, {:cartridge => {:scales_from => 3, :scales_to => 3}}.merge(scalable_app_params)
84
+ assert_redirected_to application_scaling_path, assigns(:cartridge).errors.inspect
85
+ assert_cart_scales 3, 3
86
+ end
87
+
88
+ test 'allows unlimited scale range' do
89
+ put :update, {:cartridge => {:scales_from => 3, :scales_to => -1}}.merge(scalable_app_params)
90
+ assert_redirected_to application_scaling_path, assigns(:cartridge).errors.inspect
91
+ assert_cart_scales 3, -1
92
+ end
93
+
94
+ test 'flips scale range if necessary' do
95
+ put :update, {:cartridge => {:scales_from => 3, :scales_to => 2}}.merge(scalable_app_params)
96
+ assert_redirected_to application_scaling_path
97
+ assert_equal [2, 3], [assigns(:cartridge).scales_from, assigns(:cartridge).scales_to]
98
+ assert_cart_scales 2, 3
99
+ end
100
+
101
+ test 'rejects unlimited scales_from' do
102
+ put :update, {:cartridge => {:scales_from => -1, :scales_to => 2}}.merge(scalable_app_params)
103
+ assert_response :success
104
+ assert_select 'ul.alert-error > li', /Invalid scales_(from|to) factor -?\d+ provided/
105
+ end
106
+
107
+ test 'rejects out of range scales_from' do
108
+ if scalable_cartridge.supported_scales_from > 0
109
+ put :update, {:cartridge => {:scales_from => 0, :scales_to => 2}}.merge(scalable_app_params)
110
+ assert_response :success
111
+ assert_select 'ul.alert-error > li', /Invalid scales_(from|to) factor -?\d+ provided/
112
+ else
113
+ fail 'Test case needs to be updated, a cart can be scaled to 0 now'
114
+ end
115
+ end
116
+
117
+ test 'rejects impossible scales_to' do
118
+ put :update, {:cartridge => {:scales_from => 2, :scales_to => -2}}.merge(scalable_app_params)
119
+ assert_response :success
120
+ assert_select 'ul.alert-error > li', /Invalid scales_(from|to) factor -?\d+ provided/
121
+ end
122
+
123
+ [true, false].each do |mock|
124
+ test "should get redirected from show without scaling #{'(mock)' if mock}" do
125
+ get :show, mock ? without_scaling : {:application_id => with_app.to_param}
126
+ assert app = assigns(:application)
127
+ assert assigns(:domain)
128
+ assert_redirected_to new_application_scaling_path(app)
129
+ end
130
+
131
+ test "should get redirected from delete without scaling #{'(mock)' if mock}" do
132
+ get :delete, mock ? without_scaling : {:application_id => with_app.to_param}
133
+ assert app = assigns(:application)
134
+ assert assigns(:domain)
135
+ assert_redirected_to new_application_scaling_path(app)
136
+ end
137
+
138
+ test "should see new page without scaling #{'(mock)' if mock}" do
139
+ get :new, mock ? without_scaling : {:application_id => with_app.to_param}
140
+ assert app = assigns(:application)
141
+ assert assigns(:domain)
142
+ assert_response :success
143
+ end
144
+
145
+ test "should show if all components exist #{'(mock)' if mock}" do
146
+ get :show, mock ? with_scaling : {:application_id => with_scalable_app.to_param}
147
+ assert app = assigns(:application), @response.pretty_inspect
148
+ assert app.ssh_string
149
+ assert assigns(:domain)
150
+ assert_response :success
151
+ end
152
+ end
153
+ end
@@ -0,0 +1,34 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ class AssetsTest < ActionDispatch::IntegrationTest
4
+ setup { open_session }
5
+
6
+ test 'retrieve the main javascript resource' do
7
+ get '/assets/console.js'
8
+ assert_response :success
9
+ assert_equal 'application/javascript', @response.content_type
10
+ assert @response.body.length > 10*1024
11
+ assert @response.body.include?("jQuery")
12
+ end
13
+
14
+ test 'retrieve an image' do
15
+ get '/assets/sprite-vert.png'
16
+ assert_response :success
17
+ assert_equal 'image/png', @response.content_type
18
+ assert @response.body.length > 1*1024
19
+ end
20
+
21
+ test 'retrieve common.css' do
22
+ get '/assets/common.css'
23
+ assert_response :success
24
+ assert_equal 'text/css', @response.content_type
25
+ assert @response.body.length > 20*1024
26
+ end
27
+
28
+ test 'retrieve origin.css' do
29
+ get '/assets/origin.css'
30
+ assert_response :success
31
+ assert_equal 'text/css', @response.content_type
32
+ assert @response.body.length > 20*1024
33
+ end
34
+ end
@@ -0,0 +1,43 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ class HelpLinkTest < ActionDispatch::IntegrationTest
4
+ class << self
5
+ def urls_from_module(mod)
6
+ obj = Class.new { include mod }.new
7
+
8
+ mod.public_instance_methods.collect do |name|
9
+ mod.instance_method(name)
10
+ end.select do |m|
11
+ m.name =~ /_url$/ && m.arity == 0
12
+ end.inject({}) do |hash, m|
13
+ uri = URI.parse(obj.send(m.name))
14
+ hash["#{mod.name}##{m.name}"] = uri if uri.is_a?(URI::HTTPS) || uri.is_a?(URI::HTTP)
15
+ hash
16
+ end
17
+ end
18
+ def create_test(name, uri)
19
+ test "can access #{name}(#{uri})" do
20
+ check_url(name, uri)
21
+ end
22
+ end
23
+ end
24
+
25
+ def check_url(name, uri)
26
+ begin
27
+ req = Net::HTTP.new(uri.host, uri.port)
28
+ if uri.is_a?(URI::HTTPS)
29
+ req.use_ssl = true
30
+ req.verify_mode = OpenSSL::SSL::VERIFY_NONE
31
+ end
32
+ res = req.start do |http|
33
+ http.get(uri.request_uri)
34
+ end
35
+ assert 200, res.code
36
+ rescue Exception => e
37
+ raise e, "Could not retrieve #{name}(#{uri}): #{e.message}"
38
+ end
39
+ end
40
+
41
+ urls_from_module(Console::HelpHelper).each_pair{ |name,uri| self.create_test(name,uri) }
42
+ urls_from_module(Console::CommunityHelper).each_pair{ |name,uri| self.create_test(name,uri) }
43
+ end
@@ -0,0 +1,24 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ class QuickstartsTest < ActiveSupport::TestCase
4
+
5
+ test 'retrieve quickstarts' do
6
+ quickstart = Quickstart.promoted.first
7
+ omit('Quickstarts are not present on the server') if quickstart.nil?
8
+ assert quickstart.tags.is_a? Array
9
+ assert quickstart.tags.present?
10
+ assert quickstart.tags.all?{ |t| t.is_a? Symbol }
11
+ assert quickstart.name.present?
12
+ assert quickstart.summary.present?
13
+ if quickstart.body.present?
14
+ assert quickstart.href.present?
15
+ assert quickstart.updated > 1.year.ago
16
+ end
17
+ end
18
+
19
+ test 'search quickstarts' do
20
+ quickstarts = Quickstart.search('blog')
21
+ omit('Quickstarts do not have a result matching "blog"') unless quickstarts.present?
22
+ assert quickstarts.first.tags.include?(:blog)
23
+ end
24
+ end
@@ -0,0 +1,25 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ class RescueFromTest < ActionDispatch::IntegrationTest
4
+ setup { open_session }
5
+
6
+ def with_user
7
+ end
8
+
9
+ def controller_raises(exception)
10
+ with_configured_user
11
+ ConsoleIndexController.any_instance.expects(:index).raises(exception)
12
+ with_rescue_from do
13
+ get '/', nil, {'HTTP_AUTHORIZATION' => ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, @user.password)}
14
+ end
15
+ end
16
+
17
+ def default_error_message
18
+ /An error has occurred/i
19
+ end
20
+
21
+ test 'render unexpected error page' do
22
+ controller_raises(ActiveResource::ConnectionError.new(nil))
23
+ assert_error_page
24
+ end
25
+ end