barkest_core 1.5.3.0

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 (308) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +13 -0
  3. data/Gemfile +22 -0
  4. data/Gemfile.lock +254 -0
  5. data/MIT-LICENSE +20 -0
  6. data/README.md +364 -0
  7. data/Rakefile +37 -0
  8. data/app/assets/fonts/barkest_core/ArchivoNarrow-Bold.ttf +0 -0
  9. data/app/assets/fonts/barkest_core/ArchivoNarrow-BoldItalic.ttf +0 -0
  10. data/app/assets/fonts/barkest_core/ArchivoNarrow-Italic.ttf +0 -0
  11. data/app/assets/fonts/barkest_core/ArchivoNarrow-Regular.ttf +0 -0
  12. data/app/assets/images/barkest_core/.keep +0 -0
  13. data/app/assets/images/barkest_core/barcode-B.svg +181 -0
  14. data/app/assets/javascripts/barkest_core/.keep +0 -0
  15. data/app/assets/javascripts/barkest_core/application.js +22 -0
  16. data/app/assets/javascripts/barkest_core/bootstrap-datepicker.js +1800 -0
  17. data/app/assets/javascripts/barkest_core/field_init.js +7 -0
  18. data/app/assets/javascripts/barkest_core/jquery.doubleScroll.js +112 -0
  19. data/app/assets/javascripts/barkest_core/masked_edit.js +25 -0
  20. data/app/assets/javascripts/barkest_core/system_status.js.erb +201 -0
  21. data/app/assets/stylesheets/barkest_core/.keep +0 -0
  22. data/app/assets/stylesheets/barkest_core/application.css +17 -0
  23. data/app/assets/stylesheets/barkest_core/custom.css.scss +264 -0
  24. data/app/assets/stylesheets/barkest_core/datepicker3.css +790 -0
  25. data/app/controllers/.keep +0 -0
  26. data/app/controllers/access_groups_controller.rb +74 -0
  27. data/app/controllers/account_activations_controller.rb +29 -0
  28. data/app/controllers/application_controller.rb +5 -0
  29. data/app/controllers/barkest_core/application_controller_base.rb +113 -0
  30. data/app/controllers/barkest_core/engine_controller_base.rb +15 -0
  31. data/app/controllers/barkest_core/testsub_controller.rb +21 -0
  32. data/app/controllers/contact_controller.rb +32 -0
  33. data/app/controllers/log_view_controller.rb +31 -0
  34. data/app/controllers/password_resets_controller.rb +126 -0
  35. data/app/controllers/sessions_controller.rb +64 -0
  36. data/app/controllers/status_controller.rb +150 -0
  37. data/app/controllers/system_config_controller.rb +238 -0
  38. data/app/controllers/system_update_controller.rb +164 -0
  39. data/app/controllers/test_access_controller.rb +44 -0
  40. data/app/controllers/test_report_controller.rb +75 -0
  41. data/app/controllers/users_controller.rb +218 -0
  42. data/app/helpers/.keep +0 -0
  43. data/app/helpers/barkest_core/application_helper.rb +134 -0
  44. data/app/helpers/barkest_core/form_helper.rb +469 -0
  45. data/app/helpers/barkest_core/html_helper.rb +70 -0
  46. data/app/helpers/barkest_core/misc_helper.rb +68 -0
  47. data/app/helpers/barkest_core/pdf_helper.rb +180 -0
  48. data/app/helpers/barkest_core/recaptcha_helper.rb +115 -0
  49. data/app/helpers/barkest_core/sessions_helper.rb +94 -0
  50. data/app/helpers/barkest_core/status_helper.rb +118 -0
  51. data/app/helpers/barkest_core/users_helper.rb +32 -0
  52. data/app/mailers/.keep +0 -0
  53. data/app/mailers/application_mailer.rb +5 -0
  54. data/app/mailers/barkest_core/application_mailer_base.rb +30 -0
  55. data/app/mailers/barkest_core/contact_form.rb +20 -0
  56. data/app/mailers/barkest_core/user_mailer.rb +44 -0
  57. data/app/models/.keep +0 -0
  58. data/app/models/access_group.rb +121 -0
  59. data/app/models/access_group_group_member.rb +13 -0
  60. data/app/models/access_group_user_member.rb +11 -0
  61. data/app/models/barkest_core/auth_config.rb +95 -0
  62. data/app/models/barkest_core/authorize_failure.rb +7 -0
  63. data/app/models/barkest_core/contact_message.rb +37 -0
  64. data/app/models/barkest_core/database_config.rb +223 -0
  65. data/app/models/barkest_core/db_table.rb +21 -0
  66. data/app/models/barkest_core/email_config.rb +132 -0
  67. data/app/models/barkest_core/global_status.rb +267 -0
  68. data/app/models/barkest_core/log_entry.rb +101 -0
  69. data/app/models/barkest_core/log_view_options.rb +51 -0
  70. data/app/models/barkest_core/ms_sql_db_definition.rb +441 -0
  71. data/app/models/barkest_core/ms_sql_definition.rb +221 -0
  72. data/app/models/barkest_core/ms_sql_function.rb +423 -0
  73. data/app/models/barkest_core/not_logged_in.rb +7 -0
  74. data/app/models/barkest_core/pdf_table_builder.rb +407 -0
  75. data/app/models/barkest_core/self_update_config.rb +37 -0
  76. data/app/models/barkest_core/user_alert.rb +29 -0
  77. data/app/models/barkest_core/user_alert_generators.rb +58 -0
  78. data/app/models/barkest_core/user_manager.rb +404 -0
  79. data/app/models/barkest_core/work_path.rb +74 -0
  80. data/app/models/disable_user.rb +18 -0
  81. data/app/models/ldap_access_group.rb +15 -0
  82. data/app/models/system_config.rb +99 -0
  83. data/app/models/user.rb +405 -0
  84. data/app/models/user_login_history.rb +11 -0
  85. data/app/views/.keep +0 -0
  86. data/app/views/access_groups/_form.html.erb +19 -0
  87. data/app/views/access_groups/edit.html.erb +2 -0
  88. data/app/views/access_groups/index.html.erb +32 -0
  89. data/app/views/access_groups/new.html.erb +2 -0
  90. data/app/views/access_groups/show.html.erb +4 -0
  91. data/app/views/barkest_core/contact_form/contact.html.erb +16 -0
  92. data/app/views/barkest_core/contact_form/contact.text.erb +13 -0
  93. data/app/views/barkest_core/testsub/_links.html.erb +5 -0
  94. data/app/views/barkest_core/testsub/page1.html.erb +3 -0
  95. data/app/views/barkest_core/testsub/page2.html.erb +2 -0
  96. data/app/views/barkest_core/testsub/page3.html.erb +2 -0
  97. data/app/views/barkest_core/user_mailer/account_activation.html.erb +7 -0
  98. data/app/views/barkest_core/user_mailer/account_activation.text.erb +6 -0
  99. data/app/views/barkest_core/user_mailer/invalid_password_reset.html.erb +3 -0
  100. data/app/views/barkest_core/user_mailer/invalid_password_reset.text.erb +5 -0
  101. data/app/views/barkest_core/user_mailer/password_reset.html.erb +8 -0
  102. data/app/views/barkest_core/user_mailer/password_reset.text.erb +7 -0
  103. data/app/views/contact/index.html.erb +24 -0
  104. data/app/views/layouts/_footer_copyright.html.erb +1 -0
  105. data/app/views/layouts/_menu_admin.html.erb +5 -0
  106. data/app/views/layouts/_menu_anon.html.erb +0 -0
  107. data/app/views/layouts/_menu_auth.html.erb +3 -0
  108. data/app/views/layouts/_menu_footer.html.erb +1 -0
  109. data/app/views/layouts/_nav_logo.html.erb +1 -0
  110. data/app/views/layouts/application.html.erb +2 -0
  111. data/app/views/layouts/barkest_core/_application.html.erb +24 -0
  112. data/app/views/layouts/barkest_core/_footer.html.erb +18 -0
  113. data/app/views/layouts/barkest_core/_header.html.erb +38 -0
  114. data/app/views/layouts/barkest_core/_html_mailer.html.erb +11 -0
  115. data/app/views/layouts/barkest_core/_menu_account.html.erb +14 -0
  116. data/app/views/layouts/barkest_core/_menu_sample.html.erb +1 -0
  117. data/app/views/layouts/barkest_core/_messages.html.erb +4 -0
  118. data/app/views/layouts/barkest_core/_shim.html.erb +4 -0
  119. data/app/views/layouts/barkest_core/_subheader.html.erb +1 -0
  120. data/app/views/layouts/barkest_core/_text_mailer.text.erb +4 -0
  121. data/app/views/layouts/mailer.html.erb +1 -0
  122. data/app/views/layouts/mailer.text.erb +1 -0
  123. data/app/views/log_view/index.html.erb +100 -0
  124. data/app/views/password_resets/edit.html.erb +20 -0
  125. data/app/views/password_resets/new.html.erb +14 -0
  126. data/app/views/sessions/new.html.erb +27 -0
  127. data/app/views/shared/_error_messages.html.erb +29 -0
  128. data/app/views/shared/_generic_user_alert.html.erb +4 -0
  129. data/app/views/status/current.html.erb +34 -0
  130. data/app/views/status/test.html.erb +50 -0
  131. data/app/views/system_config/index.html.erb +25 -0
  132. data/app/views/system_config/show_auth.html.erb +28 -0
  133. data/app/views/system_config/show_database.html.erb +36 -0
  134. data/app/views/system_config/show_email.html.erb +21 -0
  135. data/app/views/system_config/show_self_update.html.erb +13 -0
  136. data/app/views/system_update/index.html.erb +31 -0
  137. data/app/views/system_update/new.html.erb +2 -0
  138. data/app/views/test_access/allow_anon.html.erb +2 -0
  139. data/app/views/test_access/require_admin.html.erb +2 -0
  140. data/app/views/test_access/require_group_x.html.erb +2 -0
  141. data/app/views/test_access/require_user.html.erb +2 -0
  142. data/app/views/test_report/index.csv.csvrb +23 -0
  143. data/app/views/test_report/index.html.erb +6 -0
  144. data/app/views/test_report/index.pdf.prawn +50 -0
  145. data/app/views/test_report/index.xlsx.axlsx +28 -0
  146. data/app/views/users/_user.html.erb +57 -0
  147. data/app/views/users/_user_details.html.erb +15 -0
  148. data/app/views/users/_user_details_for_list.html.erb +1 -0
  149. data/app/views/users/_user_form.html.erb +13 -0
  150. data/app/views/users/disable_confirm.html.erb +19 -0
  151. data/app/views/users/edit.html.erb +15 -0
  152. data/app/views/users/index.html.erb +9 -0
  153. data/app/views/users/new.html.erb +10 -0
  154. data/app/views/users/show.html.erb +46 -0
  155. data/bin/rails +12 -0
  156. data/config/routes.rb +3 -0
  157. data/db/migrate/20160617172539_create_access_groups.rb +10 -0
  158. data/db/migrate/20160617172725_create_users.rb +26 -0
  159. data/db/migrate/20160617172833_create_user_login_histories.rb +12 -0
  160. data/db/migrate/20160622151720_create_access_group_user_members.rb +9 -0
  161. data/db/migrate/20160622151925_create_access_group_group_members.rb +9 -0
  162. data/db/migrate/20160701005706_create_ldap_access_groups.rb +11 -0
  163. data/db/migrate/20161108155029_create_system_configs.rb +11 -0
  164. data/db/seeds/barkest_core_01_create_users.rb +42 -0
  165. data/db/seeds.rb +53 -0
  166. data/lib/barkest_core/concerns/association_with_defaults.rb +55 -0
  167. data/lib/barkest_core/concerns/boolean_parser.rb +88 -0
  168. data/lib/barkest_core/concerns/date_parser.rb +181 -0
  169. data/lib/barkest_core/concerns/email_tester.rb +55 -0
  170. data/lib/barkest_core/concerns/encrypted_fields.rb +156 -0
  171. data/lib/barkest_core/concerns/named_model.rb +73 -0
  172. data/lib/barkest_core/concerns/number_parser.rb +145 -0
  173. data/lib/barkest_core/concerns/utc_conversion.rb +60 -0
  174. data/lib/barkest_core/engine.rb +105 -0
  175. data/lib/barkest_core/extensions/active_record_extensions.rb +120 -0
  176. data/lib/barkest_core/extensions/application_configuration_extensions.rb +38 -0
  177. data/lib/barkest_core/extensions/application_extensions.rb +50 -0
  178. data/lib/barkest_core/extensions/axlsx_extenstions.rb +157 -0
  179. data/lib/barkest_core/extensions/fixture_set_extensions.rb +107 -0
  180. data/lib/barkest_core/extensions/generator_extensions.rb +271 -0
  181. data/lib/barkest_core/extensions/main_app_extensions.rb +35 -0
  182. data/lib/barkest_core/extensions/prawn_document_extensions.rb +367 -0
  183. data/lib/barkest_core/extensions/prawn_table_extensions.rb +131 -0
  184. data/lib/barkest_core/extensions/router_extensions.rb +106 -0
  185. data/lib/barkest_core/extensions/simple_formatter_extensions.rb +66 -0
  186. data/lib/barkest_core/extensions/test_case_extensions.rb +348 -0
  187. data/lib/barkest_core/extensions/time_extensions.rb +164 -0
  188. data/lib/barkest_core/handlers/csv_handler.rb +30 -0
  189. data/lib/barkest_core/version.rb +3 -0
  190. data/lib/barkest_core.rb +324 -0
  191. data/lib/generators/barkest/install_generator.rb +102 -0
  192. data/lib/generators/barkest_core/actions/01_patch_application_controller.rb +55 -0
  193. data/lib/generators/barkest_core/actions/02_patch_application_mailer.rb +56 -0
  194. data/lib/generators/barkest_core/actions/03_patch_assets.rb +62 -0
  195. data/lib/generators/barkest_core/actions/04_patch_layouts.rb +36 -0
  196. data/lib/generators/barkest_core/actions/05_patch_routes.rb +93 -0
  197. data/lib/generators/barkest_core/actions/06_patch_seeds.rb +60 -0
  198. data/lib/generators/barkest_core/actions/07_copy_migrations.rb +51 -0
  199. data/lib/generators/barkest_core/actions/08_configure_database.rb +52 -0
  200. data/lib/generators/barkest_core/actions/09_configure_secrets.rb +29 -0
  201. data/lib/generators/barkest_core/actions/99_patch_gitignore.rb +57 -0
  202. data/lib/generators/barkest_core/install_generator.rb +17 -0
  203. data/test/barkest_core_test.rb +83 -0
  204. data/test/controllers/access_groups_controller_test.rb +53 -0
  205. data/test/controllers/contact_controller_test.rb +10 -0
  206. data/test/controllers/sessions_controller_test.rb +10 -0
  207. data/test/controllers/users_controller_test.rb +10 -0
  208. data/test/dummy/.gitignore +10 -0
  209. data/test/dummy/README.rdoc +28 -0
  210. data/test/dummy/Rakefile +6 -0
  211. data/test/dummy/app/assets/images/.keep +0 -0
  212. data/test/dummy/app/assets/javascripts/application.js +14 -0
  213. data/test/dummy/app/assets/stylesheets/application.css +16 -0
  214. data/test/dummy/app/controllers/application_controller.rb +5 -0
  215. data/test/dummy/app/controllers/concerns/.keep +0 -0
  216. data/test/dummy/app/helpers/application_helper.rb +2 -0
  217. data/test/dummy/app/mailers/.keep +0 -0
  218. data/test/dummy/app/mailers/application_mailer.rb +3 -0
  219. data/test/dummy/app/models/.keep +0 -0
  220. data/test/dummy/app/models/concerns/.keep +0 -0
  221. data/test/dummy/app/views/layouts/application.html.erb +1 -0
  222. data/test/dummy/app/views/layouts/mailer.html.erb +1 -0
  223. data/test/dummy/app/views/layouts/mailer.text.erb +1 -0
  224. data/test/dummy/app/views/system_config/show_fake.html.erb +3 -0
  225. data/test/dummy/bin/bundle +3 -0
  226. data/test/dummy/bin/rails +4 -0
  227. data/test/dummy/bin/rake +4 -0
  228. data/test/dummy/bin/setup +29 -0
  229. data/test/dummy/config/application.rb +27 -0
  230. data/test/dummy/config/boot.rb +5 -0
  231. data/test/dummy/config/environment.rb +5 -0
  232. data/test/dummy/config/environments/development.rb +47 -0
  233. data/test/dummy/config/environments/production.rb +79 -0
  234. data/test/dummy/config/environments/test.rb +44 -0
  235. data/test/dummy/config/initializers/assets.rb +11 -0
  236. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  237. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  238. data/test/dummy/config/initializers/db_updater_ext.rb +33 -0
  239. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  240. data/test/dummy/config/initializers/inflections.rb +16 -0
  241. data/test/dummy/config/initializers/mime_types.rb +4 -0
  242. data/test/dummy/config/initializers/session_store.rb +3 -0
  243. data/test/dummy/config/initializers/sys_config_ext.rb +12 -0
  244. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  245. data/test/dummy/config/locales/en.yml +23 -0
  246. data/test/dummy/config/routes.rb +60 -0
  247. data/test/dummy/config.ru +4 -0
  248. data/test/dummy/db/schema.rb +95 -0
  249. data/test/dummy/db/seeds/barkest_core_01_create_users.rb +42 -0
  250. data/test/dummy/db/seeds.rb +51 -0
  251. data/test/dummy/lib/assets/.keep +0 -0
  252. data/test/dummy/log/.keep +0 -0
  253. data/test/dummy/public/404.html +67 -0
  254. data/test/dummy/public/422.html +67 -0
  255. data/test/dummy/public/500.html +66 -0
  256. data/test/dummy/public/favicon.ico +0 -0
  257. data/test/dummy/sql/my_test_view.sql +3 -0
  258. data/test/fixtures/access_groups.yml +21 -0
  259. data/test/fixtures/users.yml +71 -0
  260. data/test/helpers/barkest_core/sessions_helper_test.rb +22 -0
  261. data/test/integration/access_group_mgmt_test.rb +33 -0
  262. data/test/integration/access_test.rb +24 -0
  263. data/test/integration/account_activations_access_test.rb +12 -0
  264. data/test/integration/contact_test.rb +98 -0
  265. data/test/integration/extra_partial_test.rb +41 -0
  266. data/test/integration/log_view_access_test.rb +12 -0
  267. data/test/integration/password_resets_test.rb +101 -0
  268. data/test/integration/reports_test.rb +53 -0
  269. data/test/integration/status_access_test.rb +27 -0
  270. data/test/integration/system_config_access_test.rb +24 -0
  271. data/test/integration/system_update_access_test.rb +19 -0
  272. data/test/integration/users_access_test.rb +34 -0
  273. data/test/integration/users_edit_test.rb +178 -0
  274. data/test/integration/users_index_test.rb +62 -0
  275. data/test/integration/users_login_test.rb +67 -0
  276. data/test/integration/users_signup_test.rb +54 -0
  277. data/test/mailers/.keep +0 -0
  278. data/test/mailers/barkest_core/contact_form_test.rb +28 -0
  279. data/test/mailers/barkest_core/user_mailer_test.rb +43 -0
  280. data/test/mailers/previews/barkest_core/contact_form_preview.rb +17 -0
  281. data/test/mailers/previews/barkest_core/user_mailer_preview.rb +26 -0
  282. data/test/models/access_group_group_member_test.rb +28 -0
  283. data/test/models/access_group_test.rb +114 -0
  284. data/test/models/access_group_user_member_test.rb +28 -0
  285. data/test/models/barkest_core/auth_config_test.rb +57 -0
  286. data/test/models/barkest_core/bool_parser_test.rb +28 -0
  287. data/test/models/barkest_core/contact_message_test.rb +61 -0
  288. data/test/models/barkest_core/database_config_test.rb +33 -0
  289. data/test/models/barkest_core/date_parser_test.rb +110 -0
  290. data/test/models/barkest_core/email_config_test.rb +57 -0
  291. data/test/models/barkest_core/global_status_test.rb +50 -0
  292. data/test/models/barkest_core/ms_sql_db_updater_test.rb +115 -0
  293. data/test/models/barkest_core/ms_sql_definition_test.rb +102 -0
  294. data/test/models/barkest_core/ms_sql_function_test.rb +131 -0
  295. data/test/models/barkest_core/number_parser_test.rb +29 -0
  296. data/test/models/barkest_core/self_update_config_test.rb +29 -0
  297. data/test/models/barkest_core/user_alert_test.rb +19 -0
  298. data/test/models/barkest_core/user_manager_test.rb +34 -0
  299. data/test/models/barkest_core/work_path_test.rb +26 -0
  300. data/test/models/disable_user_test.rb +27 -0
  301. data/test/models/generic_time_test.rb +66 -0
  302. data/test/models/ldap_access_group_test.rb +31 -0
  303. data/test/models/pdf_table_builder_test.rb +6 -0
  304. data/test/models/system_config_test.rb +78 -0
  305. data/test/models/user_login_history_test.rb +37 -0
  306. data/test/models/user_test.rb +130 -0
  307. data/test/test_helper.rb +63 -0
  308. metadata +798 -0
@@ -0,0 +1,53 @@
1
+ require 'test_helper'
2
+ require 'digest/sha1'
3
+
4
+ class ReportsTest < ActionDispatch::IntegrationTest
5
+
6
+ access_tests_for :index,
7
+ url_helper: 'barkest_core_test_report_path',
8
+ allow_anon: false,
9
+ allow_any_user: false,
10
+ allow_admin: true
11
+
12
+ def setup
13
+ @admin = users(:admin)
14
+ end
15
+
16
+ # CSV is easy, it's content won't change.
17
+ test 'should get csv' do
18
+ log_in_as @admin
19
+ get barkest_core_test_report_path(format: :csv)
20
+
21
+ assert_equal 'text/csv', response.content_type.to_s
22
+
23
+ valid_csv = "Code,Name,Email,Date of Birth,Hire Date,Pay Rate,Hours\nSMIJOH,John Smith,j.smith@example.com,01/01/1980,05/01/2010,15.5,2260\n"
24
+ assert_equal valid_csv, response.body
25
+ end
26
+
27
+ # PDF is a bit more complex, but we try our damnedest to make it consistent, even going so far as forging the creation_date.
28
+ # The SHA1 should match up.
29
+ test 'should get pdf' do
30
+ log_in_as @admin
31
+ get barkest_core_test_report_path(format: :pdf)
32
+
33
+ assert_equal 'application/pdf', response.content_type.to_s
34
+
35
+ valid_sha1 = '5aba48603c5e93674e67022b38524dd5d1a953c4'
36
+ computed_sha1 = Digest::SHA1.hexdigest(response.body)
37
+ assert_equal valid_sha1, computed_sha1
38
+ end
39
+
40
+ # XLSX is the same as PDF as far as testing goes.
41
+ test 'should get xlsx' do
42
+ log_in_as @admin
43
+ get barkest_core_test_report_path(format: :xlsx)
44
+
45
+ assert_equal 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', response.content_type.to_s
46
+
47
+ valid_sha1 = 'e6292ab2ea16a209ccd985a00d823d15c6c6a947'
48
+ computed_sha1 = Digest::SHA1.hexdigest(response.body)
49
+ assert_equal valid_sha1, computed_sha1
50
+ end
51
+
52
+
53
+ end
@@ -0,0 +1,27 @@
1
+ require 'test_helper'
2
+
3
+ class StatusAccessTest < ActionDispatch::IntegrationTest
4
+
5
+ access_tests_for :first,
6
+ controller: 'status',
7
+ url_helper: 'status_first_path',
8
+ allow_anon: false,
9
+ allow_any_user: false,
10
+ allow_admin: true
11
+
12
+ access_tests_for :more,
13
+ controller: 'status',
14
+ url_helper: 'status_more_path',
15
+ allow_anon: false,
16
+ allow_any_user: false,
17
+ allow_admin: true
18
+
19
+ access_tests_for :current,
20
+ controller: 'status',
21
+ url_helper: 'status_current_path',
22
+ allow_anon: false,
23
+ allow_any_user: false,
24
+ allow_admin: true
25
+
26
+
27
+ end
@@ -0,0 +1,24 @@
1
+ require 'test_helper'
2
+
3
+ class SystemConfigAccessTest < ActionDispatch::IntegrationTest
4
+
5
+ COMMON_ACCESS = {
6
+ controller: 'system_config',
7
+ allow_anon: false,
8
+ allow_any_user: false,
9
+ allow_admin: true
10
+ }
11
+
12
+ access_tests_for :index, COMMON_ACCESS.merge(url_helper: 'system_config_path')
13
+
14
+ access_tests_for :restart, COMMON_ACCESS.merge(url_helper: 'system_config_restart_path', success: 'system_config_url', method: :post)
15
+
16
+ access_tests_for :show_auth, COMMON_ACCESS.merge(url_helper: 'system_config_auth_path')
17
+
18
+ access_tests_for :show_database, COMMON_ACCESS.merge(url_helper: 'system_config_database_path(\'test-123\')')
19
+
20
+ access_tests_for :show_email, COMMON_ACCESS.merge(url_helper: 'system_config_email_path')
21
+
22
+ access_tests_for :show_self_update, COMMON_ACCESS.merge(url_helper: 'system_config_self_update_path')
23
+
24
+ end
@@ -0,0 +1,19 @@
1
+ require 'test_helper'
2
+
3
+ class SystemUpdateAccessTest < ActionDispatch::IntegrationTest
4
+
5
+ access_tests_for :index,
6
+ url_helper: 'system_update_path',
7
+ allow_anon: false,
8
+ allow_any_user: false,
9
+ allow_admin: true
10
+
11
+ access_tests_for :new,
12
+ url_helper: 'system_update_new_path',
13
+ allow_anon: false,
14
+ allow_any_user: false,
15
+ allow_admin: true,
16
+ success: 'status_current_url'
17
+
18
+
19
+ end
@@ -0,0 +1,34 @@
1
+ require 'test_helper'
2
+
3
+ class UsersAccessTest < ActionDispatch::IntegrationTest
4
+ access_tests_for [ :index, :show ],
5
+ controller: 'users',
6
+ allow_anon: false,
7
+ allow_any_user: !BarkestCore.lock_down_users,
8
+ allow_admin: true
9
+
10
+ access_tests_for :new,
11
+ controller: 'users',
12
+ allow_anon: true,
13
+ allow_any_user: false,
14
+ allow_admin: false
15
+
16
+ # the user can edit themselves, however the test should try to get the standard user to edit another user.
17
+ # that should fail. the other integration tests should truly test out the editing of one's self.
18
+ access_tests_for :edit,
19
+ controller: 'users',
20
+ allow_anon: false,
21
+ allow_any_user: false,
22
+ allow_admin: true
23
+
24
+ access_tests_for :disable,
25
+ controller: 'users',
26
+ url_helper: 'disable_user_path(users(:one))',
27
+ allow_anon: false,
28
+ allow_any_user: false,
29
+ allow_admin: true
30
+
31
+
32
+
33
+
34
+ end
@@ -0,0 +1,178 @@
1
+ require 'test_helper'
2
+
3
+ class UsersEditTest < ActionDispatch::IntegrationTest
4
+
5
+ def setup
6
+ @user = users(:standard)
7
+ @other_user = users(:user_3)
8
+ @admin = users(:admin)
9
+ @disabled_user = users(:disabled)
10
+ @recent_user = users(:recently_disabled)
11
+ end
12
+
13
+ test 'should redirect edit when not logged in' do
14
+ get edit_user_path(@user)
15
+ assert_not flash.empty?
16
+ assert_redirected_to login_url
17
+ end
18
+
19
+ test 'should redirect update when not logged in' do
20
+ patch user_path(@user), user: { name: @user.name, email: @user.email }
21
+ assert_not flash.empty?
22
+ assert_redirected_to login_url
23
+ end
24
+
25
+ test 'should redirect edit when logged in as wrong user' do
26
+ log_in_as @other_user
27
+ get edit_user_path(@user)
28
+ assert flash.empty?
29
+ assert_redirected_to root_url
30
+ end
31
+
32
+ test 'should redirect update when logged in as wrong user' do
33
+ log_in_as @other_user
34
+ patch user_path(@user), user: { name: @user.name, email: @user.email }
35
+ assert flash.empty?
36
+ assert_redirected_to root_url
37
+ end
38
+
39
+ test 'should redirect destroy when not logged in' do
40
+ assert_no_difference 'User.count' do
41
+ delete user_path(@disabled_user)
42
+ end
43
+ assert_redirected_to login_url
44
+ end
45
+
46
+ test 'should redirect destroy when logged in as non-admin' do
47
+ log_in_as @other_user
48
+ assert_no_difference 'User.count' do
49
+ delete user_path(@disabled_user)
50
+ end
51
+ assert_redirected_to root_url
52
+ end
53
+
54
+ test 'should allow destroy when logged in as admin' do
55
+ log_in_as @admin
56
+ assert_difference 'User.count', -1 do
57
+ delete user_path(@disabled_user)
58
+ end
59
+ assert_redirected_to users_url
60
+ end
61
+
62
+ test 'should not destroy recently disabled users' do
63
+ log_in_as @admin
64
+ assert_no_difference 'User.count' do
65
+ delete user_path(@recent_user)
66
+ end
67
+ assert_redirected_to users_url
68
+ end
69
+
70
+ test 'should not destroy active users' do
71
+ log_in_as @admin
72
+ assert_no_difference 'User.count' do
73
+ delete user_path(@user)
74
+ end
75
+ assert_redirected_to users_url
76
+ end
77
+
78
+ test 'should not allow the admin attribute to be edited via web' do
79
+ log_in_as @other_user
80
+ assert_not @other_user.system_admin?
81
+ patch user_path(@other_user), user: { password: 'password', password_confirmation: 'password', system_admin: '1' }
82
+ assert_not @other_user.reload.system_admin?
83
+ end
84
+
85
+ test 'should redirect disable when not logged in' do
86
+ assert_no_difference 'User.enabled.count' do
87
+ get disable_user_path(@user)
88
+ end
89
+ assert_redirected_to login_url
90
+ assert_no_difference 'User.enabled.count' do
91
+ patch disable_user_path(@user)
92
+ end
93
+ assert_redirected_to login_url
94
+ end
95
+
96
+ test 'should redirect disable when logged in as non-admin' do
97
+ log_in_as @other_user
98
+ assert_no_difference 'User.enabled.count' do
99
+ get disable_user_path(@user)
100
+ end
101
+ assert_redirected_to root_url
102
+ assert_no_difference 'User.enabled.count' do
103
+ patch disable_user_path(@user)
104
+ end
105
+ assert_redirected_to root_url
106
+ end
107
+
108
+ test 'should redirect enable when not logged in' do
109
+ assert_no_difference 'User.enabled.count' do
110
+ patch enable_user_path(@disabled_user)
111
+ end
112
+ assert_redirected_to login_url
113
+ end
114
+
115
+ test 'should redirect enable when logged in as non-admin' do
116
+ log_in_as @other_user
117
+ assert_no_difference 'User.enabled.count' do
118
+ patch enable_user_path(@disabled_user)
119
+ end
120
+ assert_redirected_to root_url
121
+ end
122
+
123
+ test 'should disable user for admins' do
124
+ log_in_as @admin
125
+ assert_no_difference 'User.enabled.count' do
126
+ get disable_user_path(@other_user)
127
+ end
128
+ assert_template 'users/disable_confirm'
129
+ assert_difference 'User.enabled.count', -1 do
130
+ patch disable_user_path(@other_user), disable_user: { reason: 'As a test' }
131
+ end
132
+ assert_redirected_to users_url
133
+ end
134
+
135
+ test 'should enable user for admins' do
136
+ log_in_as @admin
137
+ assert_difference 'User.enabled.count', 1 do
138
+ patch enable_user_path(@disabled_user)
139
+ end
140
+ assert_redirected_to users_url
141
+ end
142
+
143
+ test 'unsuccessful edit' do
144
+ get edit_user_path(@user)
145
+ assert_redirected_to login_url
146
+ log_in_as(@user)
147
+ get edit_user_path(@user)
148
+ assert_template 'users/edit'
149
+ patch user_path(@user), user: { name: '', email: 'foo@invalid', password: 'foo', password_confirmation: 'baz' }
150
+ assert_template 'users/edit'
151
+ assert_select 'div#error_explanation'
152
+ end
153
+
154
+ test 'successful edit with friendly forwarding' do
155
+ get edit_user_path(@user)
156
+ assert_redirected_to login_url
157
+ log_in_as(@user)
158
+ assert_redirected_to edit_user_path(@user)
159
+ name = 'Foo Bar'
160
+ email = 'foo@bar.com'
161
+ pwd = ''
162
+ patch user_path(@user), user: { name: name, email: email, password: pwd, password_confirmation: pwd }
163
+ assert_not flash.empty?
164
+ assert_redirected_to @user
165
+ @user.reload
166
+ assert_equal name, @user.name
167
+ assert_equal email, @user.email
168
+ pwd = 'new-password'
169
+ patch user_path(@user), user: { name: name, email: email, password: pwd, password_confirmation: pwd }
170
+ assert_not flash.empty?
171
+ assert_redirected_to @user
172
+ @user.reload
173
+ assert @user.authenticate(pwd)
174
+ end
175
+
176
+
177
+ end
178
+
@@ -0,0 +1,62 @@
1
+ require 'test_helper'
2
+
3
+ class UsersIndexTest < ActionDispatch::IntegrationTest
4
+
5
+ def setup
6
+ @user = users(:standard)
7
+ @other_user = users(:basic)
8
+ @admin = users(:admin)
9
+ @can_delete = users(:disabled)
10
+ @cannot_delete = users(:recently_disabled)
11
+ end
12
+
13
+ test 'should redirect index when not logged in' do
14
+ get users_path
15
+ assert_redirected_to login_url
16
+ end
17
+
18
+ test 'index including pagination' do
19
+ log_in_as @user
20
+ get users_path
21
+ assert_template 'users/index'
22
+ assert_select 'div.pagination'
23
+ User.enabled.sorted.paginate(page: 1).each do |user|
24
+ assert_select 'a[href=?] i', disable_user_path(user), count: 0
25
+ assert_select 'a[href=?]', user_path(user), text: user.name
26
+ end
27
+ get user_path(@other_user)
28
+ assert_template 'users/show'
29
+ end
30
+
31
+ test 'index disabled for non-admin' do
32
+ original = BarkestCore.lock_down_users
33
+ begin
34
+ BarkestCore.lock_down_users = true
35
+ log_in_as @user
36
+ get users_path
37
+ assert_redirected_to root_url
38
+ get user_path(@other_user)
39
+ assert_redirected_to root_url
40
+ ensure
41
+ BarkestCore.lock_down_users = original
42
+ end
43
+ end
44
+
45
+ test 'index for admin' do
46
+ log_in_as @admin
47
+ get users_path
48
+ User.all.sorted.paginate(page: 1).each do |user|
49
+ # disabled users should have a delete link
50
+ assert_select 'a[href=?]>i', user_path(user), count: (user.enabled? ? 0 : 1)
51
+
52
+ # enabled users (except the current one) should have a disable link
53
+ assert_select 'a[href=?]>i', disable_user_path(user), count: ((user.enabled? && !current_user?(user)) ? 1 : 0)
54
+
55
+ # all users should have a link to their profile page.
56
+ assert_select 'a[href=?]', user_path(user), text: user.name
57
+ end
58
+ end
59
+
60
+
61
+ end
62
+
@@ -0,0 +1,67 @@
1
+ require 'test_helper'
2
+
3
+ class UsersLoginTest < ActionDispatch::IntegrationTest
4
+
5
+ def setup
6
+ @user = users(:admin)
7
+ end
8
+
9
+ access_tests_for :new,
10
+ controller: 'sessions',
11
+ url_helper: 'login_path',
12
+ allow_anon: true,
13
+ allow_any_user: false,
14
+ allow_admin: false
15
+
16
+ test 'login with invalid information' do
17
+ get login_path
18
+ assert_template 'sessions/new'
19
+ post login_path, session: { email: '', password: '' }
20
+ assert_template 'sessions/new'
21
+ assert_not flash.empty?
22
+ get root_path
23
+ assert flash.empty?
24
+ assert_select 'a[href=?]', login_path
25
+ assert_select 'a[href=?]', logout_path, count: 0
26
+ end
27
+
28
+ test 'login with valid information followed by logout' do
29
+ get login_path
30
+ post login_path, session: { email: @user.email, password: 'password' }
31
+ assert is_logged_in?
32
+ assert_redirected_to @user
33
+ follow_redirect!
34
+ assert_template 'users/show'
35
+ assert_select 'a[href=?]', login_path, count: 0
36
+ assert_select 'a[href=?]', logout_path
37
+ assert_select 'a[href=?]', user_path(@user)
38
+ delete logout_path
39
+ assert_not is_logged_in?
40
+ assert_redirected_to root_url
41
+ # simulate clicking 'log out' a second time.
42
+ delete logout_path
43
+ follow_redirect!
44
+ assert_select 'a[href=?]', login_path
45
+ assert_select 'a[href=?]', logout_path, count: 0
46
+ assert_select 'a[href=?]', user_path(@user), count: 0
47
+ end
48
+
49
+ test 'login with disabled account' do
50
+ @user = users(:disabled)
51
+ get login_path
52
+ post login_path, session: { email: @user.email, password: 'password' }
53
+ assert_template 'sessions/new'
54
+ assert_not flash.empty?
55
+ end
56
+
57
+ test 'login with remembering' do
58
+ log_in_as @user, remember_me: '1'
59
+ assert_not_nil cookies['remember_token']
60
+ assert_equal assigns(:user).remember_token, cookies['remember_token']
61
+ end
62
+
63
+ test 'login without remembering' do
64
+ log_in_as @user, remember_me: '0'
65
+ assert_nil cookies['remember_token']
66
+ end
67
+ end