qbrick 2.5.0.pre → 2.5.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 (341) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +69 -379
  3. data/Rakefile +4 -4
  4. data/app/assets/images/logo.png +0 -0
  5. data/app/assets/javascripts/{kuhsaft → qbrick}/application.js.coffee +1 -1
  6. data/app/assets/javascripts/{kuhsaft → qbrick}/cms/application.js.coffee.erb +40 -17
  7. data/app/assets/javascripts/{kuhsaft → qbrick}/views/read_more_view.js.coffee +0 -0
  8. data/app/assets/stylesheets/{kuhsaft → qbrick}/application.css.sass +0 -0
  9. data/app/assets/stylesheets/{kuhsaft → qbrick}/cms/application.css.sass +38 -1
  10. data/app/assets/stylesheets/{kuhsaft → qbrick}/modules/_text_brick.css.sass +1 -1
  11. data/app/controllers/{kuhsaft → qbrick}/api/pages_controller.rb +2 -2
  12. data/app/controllers/qbrick/cms/accounts_controller.rb +28 -0
  13. data/app/controllers/qbrick/cms/admins_controller.rb +79 -0
  14. data/app/controllers/{kuhsaft → qbrick}/cms/assets_controller.rb +9 -9
  15. data/app/controllers/qbrick/cms/backend_controller.rb +25 -0
  16. data/app/controllers/{kuhsaft → qbrick}/cms/bricks_controller.rb +16 -13
  17. data/app/controllers/{kuhsaft → qbrick}/cms/ckimages_controller.rb +6 -6
  18. data/app/controllers/qbrick/cms/pages_controller.rb +87 -0
  19. data/app/controllers/qbrick/cms/settings_collections_controller.rb +26 -0
  20. data/app/controllers/{kuhsaft → qbrick}/pages_controller.rb +10 -5
  21. data/app/controllers/{kuhsaft → qbrick}/sitemaps_controller.rb +3 -3
  22. data/app/helpers/cms_helper.rb +4 -4
  23. data/app/helpers/pages_helper.rb +18 -10
  24. data/app/helpers/{kuhsaft → qbrick}/admin_helper.rb +2 -2
  25. data/app/helpers/qbrick/cms/admin_helper.rb +73 -0
  26. data/app/helpers/{kuhsaft → qbrick}/cms/pages_helper.rb +2 -2
  27. data/app/models/{kuhsaft → qbrick}/accordion_brick.rb +2 -2
  28. data/app/models/{kuhsaft → qbrick}/accordion_item_brick.rb +1 -1
  29. data/app/models/qbrick/admin.rb +8 -0
  30. data/app/models/{kuhsaft → qbrick}/anchor_brick.rb +1 -1
  31. data/app/models/{kuhsaft → qbrick}/asset.rb +2 -2
  32. data/app/models/{kuhsaft → qbrick}/asset_brick.rb +2 -2
  33. data/app/models/{kuhsaft → qbrick}/brick.rb +11 -8
  34. data/app/models/{kuhsaft → qbrick}/brick_type.rb +1 -1
  35. data/app/models/{kuhsaft → qbrick}/brick_type_filter.rb +4 -4
  36. data/app/models/{kuhsaft → qbrick}/ckimage.rb +1 -1
  37. data/app/models/{kuhsaft → qbrick}/cms.rb +2 -2
  38. data/app/models/qbrick/cms_model.rb +25 -0
  39. data/app/models/{kuhsaft → qbrick}/column_brick.rb +2 -2
  40. data/app/models/{kuhsaft → qbrick}/image_brick.rb +2 -2
  41. data/app/models/{kuhsaft → qbrick}/image_size.rb +3 -3
  42. data/app/models/{kuhsaft → qbrick}/link_brick.rb +1 -1
  43. data/app/models/{kuhsaft → qbrick}/page.rb +78 -17
  44. data/app/models/{kuhsaft → qbrick}/page_type.rb +3 -2
  45. data/app/models/{kuhsaft → qbrick}/partition.rb +1 -1
  46. data/app/models/{kuhsaft → qbrick}/placeholder_brick.rb +4 -4
  47. data/app/models/{kuhsaft → qbrick}/publish_state.rb +1 -1
  48. data/app/models/qbrick/setting.rb +13 -0
  49. data/app/models/qbrick/settings_collection.rb +10 -0
  50. data/app/models/{kuhsaft → qbrick}/slider_brick.rb +3 -3
  51. data/app/models/{kuhsaft → qbrick}/text_brick.rb +1 -1
  52. data/app/models/{kuhsaft → qbrick}/two_column_brick.rb +2 -2
  53. data/app/models/{kuhsaft → qbrick}/video_brick.rb +1 -1
  54. data/app/uploaders/qbrick/asset_brick_asset_uploader.rb +26 -0
  55. data/app/uploaders/{kuhsaft → qbrick}/asset_uploader.rb +3 -2
  56. data/app/uploaders/{kuhsaft → qbrick}/ckimage_uploader.rb +1 -1
  57. data/app/uploaders/{kuhsaft → qbrick}/image_brick_image_uploader.rb +4 -4
  58. data/app/views/devise/confirmations/new.html.haml +10 -0
  59. data/app/views/devise/mailer/confirmation_instructions.html.haml +4 -0
  60. data/app/views/devise/mailer/reset_password_instructions.html.haml +6 -0
  61. data/app/views/devise/mailer/unlock_instructions.html.haml +5 -0
  62. data/app/views/devise/passwords/edit.html.haml +10 -0
  63. data/app/views/devise/passwords/new.html.haml +8 -0
  64. data/app/views/devise/registrations/edit.html.haml +9 -0
  65. data/app/views/devise/registrations/new.html.haml +21 -0
  66. data/app/views/devise/sessions/new.html.haml +12 -0
  67. data/app/views/devise/shared/_links.html.haml +19 -0
  68. data/app/views/devise/unlocks/new.html.haml +10 -0
  69. data/app/views/layouts/devise.html.haml +16 -0
  70. data/app/views/layouts/{kuhsaft → qbrick}/cms/application.html.haml +4 -5
  71. data/app/views/layouts/qbrick/cms/ckimages.html.haml +18 -0
  72. data/app/views/{kuhsaft → qbrick}/accordion_bricks/_accordion_brick.html.haml +0 -0
  73. data/app/views/{kuhsaft → qbrick}/accordion_bricks/accordion_brick/_edit.html.haml +0 -0
  74. data/app/views/{kuhsaft → qbrick}/accordion_item_bricks/_accordion_item_brick.html.haml +0 -0
  75. data/app/views/{kuhsaft → qbrick}/accordion_item_bricks/accordion_item_brick/_edit.html.haml +0 -0
  76. data/app/views/{kuhsaft → qbrick}/anchor_bricks/_anchor_brick.html.haml +0 -0
  77. data/app/views/{kuhsaft → qbrick}/anchor_bricks/anchor_brick/_edit.html.haml +0 -0
  78. data/app/views/{kuhsaft → qbrick}/asset_bricks/_asset_brick.html.haml +0 -0
  79. data/app/views/{kuhsaft → qbrick}/asset_bricks/asset_brick/_edit.html.haml +1 -1
  80. data/app/views/qbrick/cms/accounts/edit.html.haml +12 -0
  81. data/app/views/qbrick/cms/admins/_form.html.haml +10 -0
  82. data/app/views/qbrick/cms/admins/edit.html.haml +5 -0
  83. data/app/views/qbrick/cms/admins/index.html.haml +26 -0
  84. data/app/views/qbrick/cms/admins/new.html.haml +5 -0
  85. data/app/views/{kuhsaft → qbrick}/cms/assets/_form.html.haml +0 -0
  86. data/app/views/{kuhsaft → qbrick}/cms/assets/_list.html.haml +0 -0
  87. data/app/views/{kuhsaft → qbrick}/cms/assets/edit.html.haml +0 -0
  88. data/app/views/qbrick/cms/assets/index.html.haml +3 -0
  89. data/app/views/{kuhsaft → qbrick}/cms/assets/new.html.haml +0 -0
  90. data/app/views/qbrick/cms/backend/_brick_clone_menu.html.haml +16 -0
  91. data/app/views/qbrick/cms/backend/_brick_type_dropdown.html.haml +15 -0
  92. data/app/views/{kuhsaft/cms/admin → qbrick/cms/backend}/_empty_state.html.haml +0 -0
  93. data/app/views/{kuhsaft/cms/admin → qbrick/cms/backend}/_flash.html.haml +0 -0
  94. data/app/views/qbrick/cms/backend/_main_navigation.html.haml +20 -0
  95. data/app/views/{kuhsaft → qbrick}/cms/bricks/_brick_header.html.haml +4 -4
  96. data/app/views/{kuhsaft → qbrick}/cms/bricks/_brick_item.html.haml +6 -5
  97. data/app/views/{kuhsaft → qbrick}/cms/bricks/_brick_list.html.haml +1 -1
  98. data/app/views/{kuhsaft → qbrick}/cms/bricks/_new.html.haml +3 -3
  99. data/app/views/{kuhsaft → qbrick}/cms/bricks/_sort_form.html.haml +0 -0
  100. data/app/views/{kuhsaft → qbrick}/cms/bricks/create.js.erb +1 -1
  101. data/app/views/{kuhsaft → qbrick}/cms/bricks/destroy.js.erb +0 -0
  102. data/app/views/{kuhsaft → qbrick}/cms/bricks/new.js.erb +1 -1
  103. data/app/views/{kuhsaft → qbrick}/cms/bricks/update.js.erb +1 -1
  104. data/app/views/{kuhsaft → qbrick}/cms/ckimages/create.html.haml +0 -0
  105. data/app/views/{kuhsaft → qbrick}/cms/ckimages/destroy.js.erb +0 -0
  106. data/app/views/{kuhsaft → qbrick}/cms/ckimages/index.html.haml +1 -1
  107. data/app/views/{kuhsaft → qbrick}/cms/pages/_branch.html.haml +4 -4
  108. data/app/views/{kuhsaft → qbrick}/cms/pages/_form.html.haml +15 -6
  109. data/app/views/qbrick/cms/pages/_mirror_modal.html.haml +52 -0
  110. data/app/views/qbrick/cms/pages/edit.html.haml +16 -0
  111. data/app/views/{kuhsaft → qbrick}/cms/pages/index.html.haml +1 -1
  112. data/app/views/qbrick/cms/pages/mirror.js.haml +5 -0
  113. data/app/views/qbrick/cms/pages/new.html.haml +1 -0
  114. data/app/views/{kuhsaft → qbrick}/cms/pages/show.html.haml +0 -0
  115. data/app/views/{kuhsaft → qbrick}/cms/pages/sort.js.erb +0 -0
  116. data/app/views/qbrick/cms/settings_collections/_form.html.haml +8 -0
  117. data/app/views/qbrick/cms/settings_collections/index.html.haml +6 -0
  118. data/app/views/{kuhsaft → qbrick}/column_bricks/_column_brick.html.haml +0 -0
  119. data/app/views/{kuhsaft → qbrick}/column_bricks/column_brick/_edit.html.haml +0 -0
  120. data/app/views/{kuhsaft → qbrick}/image_bricks/_image_brick.html.haml +0 -0
  121. data/app/views/{kuhsaft → qbrick}/image_bricks/image_brick/_edit.html.haml +1 -1
  122. data/app/views/{kuhsaft → qbrick}/link_bricks/_link_brick.html.haml +0 -0
  123. data/app/views/{kuhsaft → qbrick}/link_bricks/link_brick/_edit.html.haml +1 -1
  124. data/app/views/{kuhsaft → qbrick}/pages/index.html.haml +2 -2
  125. data/app/views/{kuhsaft → qbrick}/pages/show.html.haml +2 -0
  126. data/app/views/{kuhsaft → qbrick}/placeholder_bricks/_placeholder_brick.html.haml +0 -0
  127. data/app/views/qbrick/placeholder_bricks/placeholder_brick/_edit.html.haml +1 -0
  128. data/app/views/{kuhsaft → qbrick}/search/_form.html.haml +0 -0
  129. data/app/views/{kuhsaft → qbrick}/search/_results.html.haml +2 -2
  130. data/app/views/{kuhsaft → qbrick}/search/_results_entry.html.haml +1 -1
  131. data/app/views/{kuhsaft → qbrick}/sitemaps/index.xml.haml +0 -0
  132. data/app/views/{kuhsaft → qbrick}/slider_bricks/_slider_brick.html.haml +0 -0
  133. data/app/views/{kuhsaft → qbrick}/slider_bricks/slider_brick/_edit.html.haml +0 -0
  134. data/app/views/{kuhsaft → qbrick}/text_bricks/_text_brick.html.haml +0 -0
  135. data/app/views/{kuhsaft → qbrick}/text_bricks/text_brick/_edit.html.haml +0 -0
  136. data/app/views/{kuhsaft → qbrick}/two_column_bricks/_two_column_brick.html.haml +1 -1
  137. data/app/views/qbrick/two_column_bricks/two_column_brick/_childs.html.haml +5 -0
  138. data/app/views/qbrick/two_column_bricks/two_column_brick/_edit.html.haml +1 -0
  139. data/app/views/{kuhsaft → qbrick}/video_bricks/_video_brick.html.haml +2 -2
  140. data/app/views/{kuhsaft → qbrick}/video_bricks/video_brick/_edit.html.haml +1 -1
  141. data/config/initializers/devise.rb +259 -0
  142. data/config/locales/cms.de.yml +11 -0
  143. data/config/locales/cms.en.yml +11 -0
  144. data/config/locales/devise.en.yml +60 -0
  145. data/config/locales/models/qbrick/accordion_brick/de.yml +4 -0
  146. data/config/locales/models/qbrick/accordion_brick/en.yml +4 -0
  147. data/config/locales/models/qbrick/accordion_item_brick/de.yml +7 -0
  148. data/config/locales/models/qbrick/accordion_item_brick/en.yml +7 -0
  149. data/config/locales/models/qbrick/admin/de.yml +13 -0
  150. data/config/locales/models/qbrick/admin/en.yml +13 -0
  151. data/config/locales/models/{kuhsaft → qbrick}/anchor_brick/de.yml +2 -2
  152. data/config/locales/models/{kuhsaft → qbrick}/anchor_brick/en.yml +2 -2
  153. data/config/locales/models/{kuhsaft → qbrick}/asset_brick/de.yml +2 -2
  154. data/config/locales/models/{kuhsaft → qbrick}/asset_brick/en.yml +2 -2
  155. data/config/locales/models/{kuhsaft → qbrick}/brick/de.yml +1 -1
  156. data/config/locales/models/{kuhsaft → qbrick}/brick/en.yml +1 -1
  157. data/config/locales/models/qbrick/column_brick/de.yml +4 -0
  158. data/config/locales/models/qbrick/column_brick/en.yml +4 -0
  159. data/config/locales/models/{kuhsaft → qbrick}/image_brick/de.yml +2 -2
  160. data/config/locales/models/{kuhsaft → qbrick}/image_brick/en.yml +2 -2
  161. data/config/locales/models/{kuhsaft → qbrick}/image_size/de.yml +2 -2
  162. data/config/locales/models/{kuhsaft → qbrick}/image_size/en.yml +2 -2
  163. data/config/locales/models/{kuhsaft → qbrick}/link_brick/de.yml +2 -2
  164. data/config/locales/models/{kuhsaft → qbrick}/link_brick/en.yml +2 -2
  165. data/config/locales/models/{kuhsaft → qbrick}/page/de.yml +2 -2
  166. data/config/locales/models/{kuhsaft → qbrick}/page/en.yml +3 -2
  167. data/config/locales/models/{kuhsaft → qbrick}/placeholder_brick/de.yml +2 -2
  168. data/config/locales/models/{kuhsaft → qbrick}/placeholder_brick/en.yml +2 -2
  169. data/config/locales/models/qbrick/slider_brick/de.yml +4 -0
  170. data/config/locales/models/qbrick/slider_brick/en.yml +4 -0
  171. data/config/locales/models/{kuhsaft → qbrick}/text_brick/de.yml +2 -2
  172. data/config/locales/models/{kuhsaft → qbrick}/text_brick/en.yml +2 -2
  173. data/config/locales/models/qbrick/two_column_brick/de.yml +7 -0
  174. data/config/locales/models/qbrick/two_column_brick/en.yml +7 -0
  175. data/config/locales/models/{kuhsaft → qbrick}/video_brick/de.yml +2 -2
  176. data/config/locales/models/{kuhsaft → qbrick}/video_brick/en.yml +2 -2
  177. data/config/locales/views/qbrick/cms/admin/de.yml +36 -0
  178. data/config/locales/views/{kuhsaft → qbrick}/cms/admin/en.yml +1 -1
  179. data/config/locales/views/{kuhsaft → qbrick}/cms/bricks/de.yml +1 -1
  180. data/config/locales/views/{kuhsaft → qbrick}/cms/bricks/en.yml +1 -1
  181. data/config/locales/views/qbrick/cms/navigation.yml +8 -0
  182. data/config/locales/views/{kuhsaft → qbrick}/cms/pages/de.yml +14 -1
  183. data/config/locales/views/{kuhsaft → qbrick}/cms/pages/en.yml +1 -1
  184. data/config/locales/views/qbrick/cms/settings_collection/de.yml +14 -0
  185. data/config/locales/views/qbrick/cms/settings_collection/en.yml +14 -0
  186. data/config/locales/views/{kuhsaft → qbrick}/image_brick/de.yml +1 -1
  187. data/config/locales/views/{kuhsaft → qbrick}/image_brick/en.yml +1 -1
  188. data/config/locales/views/{kuhsaft → qbrick}/search/de.yml +1 -1
  189. data/config/locales/views/{kuhsaft → qbrick}/search/en.yml +1 -1
  190. data/config/locales/views/{kuhsaft → qbrick}/text_brick/de.yml +1 -1
  191. data/config/locales/views/{kuhsaft → qbrick}/text_brick/en.yml +1 -1
  192. data/config/locales/views/{kuhsaft → qbrick}/video_brick/de.yml +1 -1
  193. data/config/locales/views/{kuhsaft → qbrick}/video_brick/en.yml +1 -1
  194. data/config/routes.rb +14 -2
  195. data/db/migrate/{01_create_kuhsaft_pages.rb → 01_create_qbrick_pages.rb} +5 -5
  196. data/db/migrate/{02_create_kuhsaft_bricks.rb → 02_create_qbrick_bricks.rb} +3 -3
  197. data/db/migrate/03_create_qbrick_brick_types.rb +12 -0
  198. data/db/migrate/04_create_qbrick_assets.rb +10 -0
  199. data/db/migrate/05_remove_cms_admin.rb +3 -3
  200. data/db/migrate/06_add_template_name_to_qbrick_bricks.rb +7 -0
  201. data/db/migrate/07_add_default_value_to_brick_type_enabled.rb +2 -2
  202. data/db/migrate/08_add_display_styles_to_bricks.rb +1 -1
  203. data/db/migrate/09_add_additional_fields_to_qbrick_bricks.rb +6 -0
  204. data/db/migrate/10_add_redirect_url_to_qbrick_pages.rb +7 -0
  205. data/db/migrate/11_update_url_and_redirect_url_value.rb +2 -2
  206. data/db/migrate/12_regenerate_fulltext.rb +1 -1
  207. data/db/migrate/13_add_page_title_to_pages.rb +1 -1
  208. data/db/migrate/14_move_qbrick_assets.rb +22 -0
  209. data/db/migrate/15_add_alt_text_to_bricks.rb +1 -1
  210. data/db/migrate/16_update_default_value_for_page_type.rb +2 -2
  211. data/db/migrate/17_set_page_type_to_content_for_empty_fields.rb +2 -2
  212. data/db/migrate/18_add_identifier_to_qbrick_pages.rb +6 -0
  213. data/db/migrate/19_add_col_count_to_bricks.rb +1 -1
  214. data/db/migrate/20_create_qbrick_ckimages.rb +9 -0
  215. data/db/migrate/21_add_google_verification_key_to_qbrick_pages.rb +5 -0
  216. data/db/migrate/22_create_settings.rb +15 -0
  217. data/db/migrate/22_create_settings_collections.rb +11 -0
  218. data/db/migrate/23_add_metadata_to_asset.rb +6 -0
  219. data/db/migrate/23_devise_create_qbrick_admins.rb +42 -0
  220. data/db/seeds.rb +36 -13
  221. data/lib/generators/{kuhsaft → qbrick}/assets/install_generator.rb +5 -5
  222. data/lib/generators/qbrick/custom_model_generator.rb +117 -0
  223. data/lib/generators/{kuhsaft → qbrick}/translations/add_generator.rb +4 -4
  224. data/lib/qbrick.rb +24 -0
  225. data/lib/{kuhsaft → qbrick}/brick_list.rb +3 -3
  226. data/lib/{kuhsaft → qbrick}/engine.rb +5 -5
  227. data/lib/{kuhsaft → qbrick}/gridded.rb +1 -1
  228. data/lib/{kuhsaft → qbrick}/image_uploader_mounting.rb +2 -2
  229. data/lib/{kuhsaft → qbrick}/orderable.rb +1 -1
  230. data/lib/{kuhsaft → qbrick}/page_tree.rb +1 -1
  231. data/lib/{kuhsaft → qbrick}/partial_extractor.rb +1 -1
  232. data/lib/{kuhsaft → qbrick}/searchable.rb +5 -3
  233. data/lib/{kuhsaft → qbrick}/touch_placeholders.rb +4 -4
  234. data/lib/{kuhsaft → qbrick}/translatable.rb +1 -1
  235. data/lib/qbrick/version.rb +3 -0
  236. data/lib/tasks/{kuhsaft_tasks.rake → qbrick_tasks.rake} +5 -5
  237. data/lib/templates/{kuhsaft → qbrick}/assets/ck-config.js.coffee +0 -0
  238. data/lib/templates/{kuhsaft → qbrick}/assets/customizations.css.sass +0 -0
  239. data/lib/templates/{kuhsaft → qbrick}/assets/customizations.js.coffee +0 -0
  240. data/lib/templates/qbrick/custom_model_generator/base_controller.rb +17 -0
  241. data/lib/templates/qbrick/custom_model_generator/inherited_views/base/_form.html.haml +12 -0
  242. data/lib/templates/qbrick/custom_model_generator/inherited_views/base/edit.html.haml +5 -0
  243. data/lib/templates/qbrick/custom_model_generator/inherited_views/base/index.html.haml +28 -0
  244. data/lib/templates/qbrick/custom_model_generator/inherited_views/base/new.html.haml +5 -0
  245. data/lib/templates/qbrick/custom_model_generator/translations/qbrick_base.yml +11 -0
  246. data/lib/templates/qbrick/custom_model_generator/translations/resource.yml.erb +14 -0
  247. data/lib/templates/qbrick/translations/add_translation.erb +8 -0
  248. data/spec/command_wrapper_helper.rb +21 -0
  249. data/spec/controllers/{kuhsaft → qbrick}/api/pages_controller_spec.rb +5 -5
  250. data/spec/controllers/qbrick/cms/pages_controller_spec.rb +61 -0
  251. data/spec/controllers/{kuhsaft → qbrick}/pages_controller_spec.rb +11 -13
  252. data/spec/controllers/{kuhsaft → qbrick}/sitemaps_controller_spec.rb +2 -2
  253. data/spec/dummy/app/assets/javascripts/{kuhsaft → qbrick}/cms/ck-config.js.coffee +0 -0
  254. data/spec/dummy/app/assets/javascripts/{kuhsaft → qbrick}/cms/customizations.js.coffee +0 -0
  255. data/spec/dummy/app/assets/stylesheets/{kuhsaft → qbrick}/cms/customizations.css.sass +0 -0
  256. data/spec/dummy/app/controllers/application_controller.rb +1 -1
  257. data/spec/dummy/config/application.rb +3 -2
  258. data/spec/dummy/config/database.yml +2 -2
  259. data/spec/dummy/config/environments/production.rb +2 -2
  260. data/spec/dummy/config/environments/test.rb +1 -1
  261. data/spec/dummy/config/initializers/{kuhsaft.rb → qbrick.rb} +1 -1
  262. data/spec/dummy/config/routes.rb +4 -1
  263. data/spec/factories.rb +24 -9
  264. data/spec/features/administrator_management_spec.rb +70 -0
  265. data/spec/features/cms_pages_spec.rb +15 -11
  266. data/spec/features/search_spec.rb +15 -15
  267. data/spec/features_helper.rb +36 -0
  268. data/spec/generators/custom_model_generator_spec.rb +83 -0
  269. data/spec/helpers/{kuhsaft → qbrick}/cms/admin_helper_spec.rb +5 -5
  270. data/spec/helpers/{kuhsaft → qbrick}/cms/pages_helper_spec.rb +6 -6
  271. data/spec/helpers/{kuhsaft → qbrick}/pages_helper_spec.rb +4 -5
  272. data/spec/lib/brick_list_spec.rb +12 -11
  273. data/spec/lib/engine_spec.rb +5 -9
  274. data/spec/lib/gridded_spec.rb +4 -5
  275. data/spec/lib/image_uploader_mounting_spec.rb +3 -4
  276. data/spec/lib/page_tree_spec.rb +5 -5
  277. data/spec/lib/searchable_spec.rb +7 -8
  278. data/spec/lib/touch_placeholders_spec.rb +4 -5
  279. data/spec/lib/translatable_spec.rb +20 -20
  280. data/spec/models/accordion_brick_spec.rb +7 -8
  281. data/spec/models/accordion_item_brick_spec.rb +8 -9
  282. data/spec/models/anchor_brick_spec.rb +5 -6
  283. data/spec/models/asset_brick_spec.rb +8 -9
  284. data/spec/models/asset_spec.rb +9 -11
  285. data/spec/models/brick_spec.rb +34 -34
  286. data/spec/models/brick_type_filter_spec.rb +14 -14
  287. data/spec/models/column_brick_spec.rb +6 -7
  288. data/spec/models/image_brick_spec.rb +9 -10
  289. data/spec/models/image_size_spec.rb +8 -8
  290. data/spec/models/link_brick_spec.rb +9 -10
  291. data/spec/models/page_spec.rb +113 -73
  292. data/spec/models/placeholder_brick_spec.rb +12 -13
  293. data/spec/models/publish_state_spec.rb +7 -7
  294. data/spec/models/setting_spec.rb +28 -0
  295. data/spec/models/slider_brick_spec.rb +5 -6
  296. data/spec/models/text_brick_spec.rb +5 -5
  297. data/spec/models/two_column_brick_spec.rb +14 -15
  298. data/spec/models/video_brick_spec.rb +5 -6
  299. data/spec/postgres_helper.rb +66 -0
  300. data/spec/{kuhsaft_spec.rb → qbrick_spec.rb} +2 -2
  301. data/spec/spec_helper.rb +23 -10
  302. data/spec/support/{kuhsaft_spec_helper.rb → qbrick_spec_helper.rb} +1 -1
  303. data/spec/support/write_expectation.rb +2 -2
  304. data/spec/views/{kuhsaft → qbrick}/sitemaps/index.xml.haml_spec.rb +3 -3
  305. metadata +451 -330
  306. data/app/controllers/kuhsaft/cms/admin_controller.rb +0 -18
  307. data/app/controllers/kuhsaft/cms/pages_controller.rb +0 -71
  308. data/app/helpers/kuhsaft/cms/admin_helper.rb +0 -21
  309. data/app/uploaders/kuhsaft/asset_brick_asset_uploader.rb +0 -43
  310. data/app/views/kuhsaft/cms/admin/_brick_type_dropdown.html.haml +0 -14
  311. data/app/views/kuhsaft/cms/admin/_content_language_switch.html.haml +0 -7
  312. data/app/views/kuhsaft/cms/admin/_main_navigation.html.haml +0 -6
  313. data/app/views/kuhsaft/cms/assets/index.html.haml +0 -3
  314. data/app/views/kuhsaft/cms/pages/edit.html.haml +0 -16
  315. data/app/views/kuhsaft/cms/pages/new.html.haml +0 -1
  316. data/app/views/kuhsaft/placeholder_bricks/placeholder_brick/_edit.html.haml +0 -1
  317. data/app/views/kuhsaft/two_column_bricks/two_column_brick/_childs.html.haml +0 -5
  318. data/app/views/kuhsaft/two_column_bricks/two_column_brick/_edit.html.haml +0 -1
  319. data/app/views/layouts/kuhsaft/cms/ckimages.html.haml +0 -18
  320. data/config/locales/models/kuhsaft/accordion_brick/de.yml +0 -4
  321. data/config/locales/models/kuhsaft/accordion_brick/en.yml +0 -4
  322. data/config/locales/models/kuhsaft/accordion_item_brick/de.yml +0 -7
  323. data/config/locales/models/kuhsaft/accordion_item_brick/en.yml +0 -7
  324. data/config/locales/models/kuhsaft/column_brick/de.yml +0 -4
  325. data/config/locales/models/kuhsaft/column_brick/en.yml +0 -4
  326. data/config/locales/models/kuhsaft/slider_brick/de.yml +0 -4
  327. data/config/locales/models/kuhsaft/slider_brick/en.yml +0 -4
  328. data/config/locales/models/kuhsaft/two_column_brick/de.yml +0 -7
  329. data/config/locales/models/kuhsaft/two_column_brick/en.yml +0 -7
  330. data/config/locales/views/kuhsaft/cms/admin/de.yml +0 -13
  331. data/db/migrate/03_create_kuhsaft_brick_types.rb +0 -12
  332. data/db/migrate/04_create_kuhsaft_assets.rb +0 -10
  333. data/db/migrate/06_add_template_name_to_kuhsaft_bricks.rb +0 -7
  334. data/db/migrate/09_add_additional_fields_to_kuhsaft_bricks.rb +0 -6
  335. data/db/migrate/10_add_redirect_url_to_kuhsaft_pages.rb +0 -7
  336. data/db/migrate/14_move_kuhsaft_assets.rb +0 -22
  337. data/db/migrate/18_add_identifier_to_kuhsaft_pages.rb +0 -6
  338. data/db/migrate/20_create_kuhsaft_ckimages.rb +0 -9
  339. data/lib/kuhsaft.rb +0 -22
  340. data/lib/kuhsaft/version.rb +0 -3
  341. data/lib/templates/kuhsaft/translations/add_translation.erb +0 -8
@@ -0,0 +1,5 @@
1
+ %h1= t("cms.new_title", singular_name: resource_class.model_name.human)
2
+
3
+ = render 'form'
4
+
5
+ = link_to t('cms.back'), collection_path
@@ -0,0 +1,11 @@
1
+ de:
2
+ cms:
3
+ are_you_sure: 'Sind Sie sicher?'
4
+ destroy: 'Löschen'
5
+ edit: 'Bearbeiten'
6
+ back: 'Zurück'
7
+ index_title: "%{plural_name} Verwalten"
8
+ edit_title: "%{singular_name} Bearbeiten"
9
+ new_title: "%{singular_name} Erstellen"
10
+ default:
11
+ new: 'Neuer Eintrag'
@@ -0,0 +1,14 @@
1
+ <%= I18n.locale %>:
2
+ cms:
3
+ navigation_title:
4
+ <%= model_name %>: TRANSLATEME
5
+ activerecord:
6
+ models:
7
+ <%= model_name %>:
8
+ one: TRANSLATEME
9
+ other: TRNASLATEME
10
+ attributes:
11
+ <%= model_name -%>:
12
+ <%- attributes.each do |attr| -%>
13
+ <%= "#{attr}: TRANSLATE ME" %>
14
+ <%- end -%>
@@ -0,0 +1,8 @@
1
+ class Add<%= formatted_locale.camelize %>Translation < ActiveRecord::Migration
2
+
3
+ def change
4
+ <%- translated_columns.each do |column_hash| %>
5
+ add_column(:qbrick_pages, "<%= get_attribute column_hash %>", :<%= get_type column_hash %>) unless Qbrick::Page.column_names.include?("<%= get_attribute column_hash %>")
6
+ <%- end %>
7
+ end
8
+ end
@@ -0,0 +1,21 @@
1
+ require 'active_support/all'
2
+
3
+ [:rails, :rake].each do |command|
4
+ define_method command do |task|
5
+ Dir.chdir test_app_path do
6
+ # this is commented bc the output is annoying and not useful imho
7
+ # if you cant provide a reason to keep this i'll delete
8
+ # dbg_comment "cd #{test_app_path}"
9
+ reload_application_gemfile
10
+ `bundle exec "#{command} #{task}"`
11
+ end
12
+ end
13
+ end
14
+
15
+ # def dbg_comment(msg)
16
+ # puts " # #{ts} - #{msg}"
17
+ # end
18
+
19
+ # def ts
20
+ # Time.now.strftime('%H:%M:%S')
21
+ # end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Kuhsaft::Api::PagesController do
3
+ describe Qbrick::Api::PagesController, type: :controller do
4
4
  describe '#index' do
5
5
  before do
6
6
  @pages = []
@@ -15,7 +15,7 @@ describe Kuhsaft::Api::PagesController do
15
15
 
16
16
  it 'gets only published pages' do
17
17
  I18n.with_locale :de do
18
- get :index, use_route: :kuhsaft
18
+ get :index, use_route: :qbrick
19
19
  expect(JSON.parse(response.body)).to eq([@page1, @page2].as_json)
20
20
  end
21
21
  end
@@ -23,12 +23,12 @@ describe Kuhsaft::Api::PagesController do
23
23
  it 'gets specific translated pages for each locale' do
24
24
  I18n.with_locale :de do
25
25
  @pages << @only_german = create(:page, published: true, title: 'foobar de', url: 'de/foobar-de')
26
- get :index, use_route: :kuhsaft
26
+ get :index, use_route: :qbrick
27
27
  expect(JSON.parse(response.body)).to eq([@page1, @page2, @only_german].as_json)
28
28
  end
29
29
 
30
30
  I18n.with_locale :en do
31
- get :index, use_route: :kuhsaft
31
+ get :index, use_route: :qbrick
32
32
  expect(JSON.parse(response.body)).to eq([@page1, @page2].as_json)
33
33
  end
34
34
  end
@@ -43,7 +43,7 @@ describe Kuhsaft::Api::PagesController do
43
43
  url_de: 'de/barfoo-de', title_en: 'barfoo en', url_en: 'en/barfoo-en')
44
44
 
45
45
  I18n.with_locale :de do
46
- get :index, use_route: :kuhsaft
46
+ get :index, use_route: :qbrick
47
47
  @json = JSON.parse(response.body)
48
48
  @page_hash = @json.first
49
49
  end
@@ -0,0 +1,61 @@
1
+ require 'spec_helper'
2
+
3
+ # TODO: For some reason rspec does not recognize this as controller
4
+ # spec even though it is in spec/controllers?
5
+ describe Qbrick::Cms::PagesController, type: :controller do
6
+ subject { described_class }
7
+
8
+ describe 'mirroring' do
9
+ around(:each) do |example|
10
+ I18n.with_locale :de do
11
+ example.run
12
+ end
13
+ end
14
+
15
+ let(:page) { FactoryGirl.create(:page, url_de: 'de', url_en: 'en') }
16
+ let!(:brick) do
17
+ FactoryGirl.create(:text_brick,
18
+ brick_list_id: page.id,
19
+ brick_list_type: 'Qbrick::Page',
20
+ text: 'DEUTSCH')
21
+ end
22
+ let!(:en_brick) do
23
+ FactoryGirl.create(:text_brick,
24
+ brick_list_id: page.id,
25
+ brick_list_type: 'Qbrick::Page',
26
+ locale: 'en',
27
+ text: 'ENGLISH')
28
+ end
29
+
30
+ before do
31
+ admin = double('admin')
32
+ allow_message_expectations_on_nil
33
+ allow(request.env['warden']).to receive(:authenticate!) { admin }
34
+ allow(controller).to receive(:current_admin) { admin }
35
+ end
36
+
37
+ context 'with no bricks on target locale' do
38
+ it 'clones the existing bricks' do
39
+ xhr :get, :mirror, use_route: :qbrick, target_locale: :en, page_id: page.id
40
+ I18n.with_locale :en do
41
+ expect(page.bricks.count).to eq(1)
42
+ end
43
+ end
44
+ end
45
+
46
+ context 'with bricks on target locale' do
47
+ it 'does not clone anything without the required parameter' do
48
+ xhr :get, :mirror, use_route: :qbrick, target_locale: :en, page_id: page.id
49
+ expect(page.bricks.unscoped.where(locale: :en, brick_list_id: page.id).first.text).to eq('ENGLISH')
50
+ end
51
+
52
+ it 'clones the bricks when required parameter is set' do
53
+ expect(page.bricks).to be_any
54
+ xhr :get, :mirror, use_route: :qbrick, target_locale: :en, page_id: page.id, rutheless: 'true'
55
+ I18n.with_locale :en do
56
+ expect(Qbrick::Page.find(page.id).bricks.first.text).to eq('DEUTSCH')
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Kuhsaft::PagesController do
3
+ describe Qbrick::PagesController, type: :controller do
4
4
  subject { described_class }
5
5
 
6
6
  describe '#index' do
@@ -14,9 +14,9 @@ describe Kuhsaft::PagesController do
14
14
  context 'with search parameter' do
15
15
  it 'assigns the search results' do
16
16
  I18n.with_locale :de do
17
- get(:index, use_route: :kuhsaft, search: 'foobar')
17
+ get(:index, use_route: :qbrick, search: 'foobar')
18
18
  end
19
- assigns(:pages).should eq([@pages.first])
19
+ expect(assigns(:pages)).to eq([@pages.first])
20
20
  end
21
21
  end
22
22
  end
@@ -31,17 +31,15 @@ describe Kuhsaft::PagesController do
31
31
  context 'with matching locale' do
32
32
  it 'sets the corresponding page' do
33
33
  I18n.with_locale(:de) do
34
- get(:show, use_route: :kuhsaft)
34
+ get(:show, use_route: :qbrick)
35
35
  end
36
- assigns(:page).should eq(@page)
36
+ expect(assigns(:page)).to eq(@page)
37
37
  end
38
38
  end
39
39
 
40
40
  context 'without matching locale' do
41
41
  it 'raises a routing error' do
42
- I18n.with_locale(:en) do
43
- expect { get(:show, use_route: :kuhsaft) }.to raise_error(ActionController::RoutingError)
44
- end
42
+ expect { get(:show, use_route: :qbrick, locale: :en) }.to raise_error(ActionController::RoutingError)
45
43
  end
46
44
  end
47
45
  end
@@ -58,8 +56,8 @@ describe Kuhsaft::PagesController do
58
56
  it 'responds with page' do
59
57
  page = FactoryGirl.create(:page, slug: 'dumdidum',
60
58
  url: 'de/dumdidum')
61
- get :show, url: page.slug, use_route: :kuhsaft
62
- assigns(:page).should eq(page)
59
+ get :show, url: page.slug, use_route: :qbrick
60
+ expect(assigns(:page)).to eq(page)
63
61
  end
64
62
  end
65
63
 
@@ -67,21 +65,21 @@ describe Kuhsaft::PagesController do
67
65
  it 'redirects to the redirected url' do
68
66
  page = FactoryGirl.create(:page, page_type: 'redirect', slug: 'dumdidum',
69
67
  url: 'de/dumdidum', redirect_url: 'de/redirect_page')
70
- get :show, url: page.slug, use_route: :kuhsaft
68
+ get :show, url: page.slug, use_route: :qbrick
71
69
  expect(response).to redirect_to('/de/redirect_page')
72
70
  end
73
71
 
74
72
  it 'redirects to invalid redirect urls with too many preceding slashes' do
75
73
  page = FactoryGirl.create(:page, page_type: 'redirect', slug: 'dumdidum',
76
74
  url: 'de/dumdidum', redirect_url: '///de/redirect_page')
77
- get :show, url: page.slug, use_route: :kuhsaft
75
+ get :show, url: page.slug, use_route: :qbrick
78
76
  expect(response).to redirect_to('/de/redirect_page')
79
77
  end
80
78
 
81
79
  it 'redirects to root' do
82
80
  page = FactoryGirl.create(:page, page_type: 'redirect', slug: 'dumdidum',
83
81
  url: 'de/dumdidum', redirect_url: '/')
84
- get :show, url: page.slug, use_route: :kuhsaft
82
+ get :show, url: page.slug, use_route: :qbrick
85
83
  expect(response).to redirect_to('/')
86
84
  end
87
85
  end
@@ -1,13 +1,13 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Kuhsaft::SitemapsController do
3
+ describe Qbrick::SitemapsController, type: :controller do
4
4
  describe '#index' do
5
5
  before do
6
6
  @page = FactoryGirl.create(:page)
7
7
  end
8
8
 
9
9
  it 'should be able to send a xml file' do
10
- get(:index, use_route: :kuhsaft, format: 'xml')
10
+ get(:index, use_route: :qbrick, format: 'xml')
11
11
  end
12
12
  end
13
13
  end
@@ -1,4 +1,4 @@
1
1
  class ApplicationController < ActionController::Base
2
2
  protect_from_forgery
3
- helper Kuhsaft::Engine.helpers
3
+ helper Qbrick::Engine.helpers
4
4
  end
@@ -6,7 +6,7 @@ require 'rails/all'
6
6
  # you've limited to :test, :development, or :production.
7
7
  Bundler.require(:default, Rails.env)
8
8
 
9
- require 'kuhsaft'
9
+ require 'qbrick'
10
10
 
11
11
  module Dummy
12
12
  class Application < Rails::Application
@@ -19,8 +19,9 @@ module Dummy
19
19
  # config.time_zone = 'Central Time (US & Canada)'
20
20
 
21
21
  # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
22
- # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
22
+ config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]
23
23
  config.i18n.available_locales = [:de, :en]
24
24
  #config.i18n.default_locale = :de
25
+ config.active_record.raise_in_transactional_callbacks = true
25
26
  end
26
27
  end
@@ -1,6 +1,6 @@
1
1
  development:
2
2
  adapter: postgresql
3
- database: kuhsaft_development
3
+ database: qbrick_development
4
4
  username: screenconcept
5
5
  password:
6
6
  host: localhost
@@ -10,7 +10,7 @@ development:
10
10
 
11
11
  test:
12
12
  adapter: postgresql
13
- database: kuhsaft_test
13
+ database: qbrick_test
14
14
  username: screenconcept
15
15
  password:
16
16
  host: localhost
@@ -20,7 +20,7 @@ Dummy::Application.configure do
20
20
  # config.action_dispatch.rack_cache = true
21
21
 
22
22
  # Disable Rails's static asset server (Apache or nginx will already do this).
23
- config.serve_static_assets = false
23
+ config.serve_static_files = false
24
24
 
25
25
  # Compress JavaScripts and CSS.
26
26
  config.assets.js_compressor = :uglifier
@@ -60,7 +60,7 @@ Dummy::Application.configure do
60
60
  # Precompile additional assets.
61
61
  # application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
62
62
  # config.assets.precompile += %w( search.js )
63
- config.assets.precompile += %w( kuhsaft/cms/customizations.css kuhsaft/cms/customizations.js )
63
+ config.assets.precompile += %w( qbrick/cms/customizations.css qbrick/cms/customizations.js )
64
64
 
65
65
  # Ignore bad email addresses and do not raise email delivery errors.
66
66
  # Set this to true and configure the email server for immediate delivery to raise delivery errors.
@@ -13,7 +13,7 @@ Dummy::Application.configure do
13
13
  config.eager_load = false
14
14
 
15
15
  # Configure static asset server for tests with Cache-Control for performance.
16
- config.serve_static_assets = true
16
+ config.serve_static_files = true
17
17
  config.static_cache_control = "public, max-age=3600"
18
18
 
19
19
  # Show full error reports and disable caching.
@@ -1,5 +1,5 @@
1
1
  Rails.application.config.to_prepare do
2
- Kuhsaft::Engine.configure do
2
+ Qbrick::Engine.configure do
3
3
  config.image_sizes.build_defaults! # creates 960x540 and 320x180 sizes
4
4
  end
5
5
  end
@@ -1,3 +1,6 @@
1
1
  Dummy::Application.routes.draw do
2
- mount Kuhsaft::Engine => "/"
2
+ scope "(:locale)", locale: /#{I18n.available_locales.join('|')}/ do
3
+ root "qbrick/pages#show"
4
+ end
5
+ mount Qbrick::Engine => "/"
3
6
  end
data/spec/factories.rb CHANGED
@@ -1,26 +1,41 @@
1
1
  FactoryGirl.define do
2
- sequence(:title) { |n| n }
2
+ sequence(:title) { |n| "English Title #{n}" }
3
3
 
4
- factory :page, class: 'Kuhsaft::Page' do |p|
4
+ factory :page, class: 'Qbrick::Page' do |p|
5
5
  p.parent nil
6
6
  p.position 1
7
- p.title { "English Title #{FactoryGirl.generate(:title)}" }
7
+ p.title { FactoryGirl.generate(:title) }
8
8
  p.published 1
9
9
  p.body 'lorem ipsum'
10
10
  p.url ''
11
11
  end
12
12
 
13
- factory :text_brick, class: 'Kuhsaft::TextBrick' do |tb|
14
- tb.type 'Kuhsaft::TextBrick'
13
+ factory :text_brick, class: 'Qbrick::TextBrick' do |tb|
14
+ tb.type 'Qbrick::TextBrick'
15
15
  tb.text 'DummyText'
16
16
  end
17
17
 
18
- factory :placeholder_brick, class: 'Kuhsaft::PlaceholderBrick' do |tb|
19
- tb.type 'Kuhsaft::PlaceholderBrick'
18
+ factory :placeholder_brick, class: 'Qbrick::PlaceholderBrick' do |tb|
19
+ tb.type 'Qbrick::PlaceholderBrick'
20
20
  tb.template_name 'foo'
21
21
  end
22
22
 
23
- factory :asset, class: Kuhsaft::Asset do |a|
24
- a.file File.open("#{Kuhsaft::Engine.root}/spec/dummy/app/assets/images/spec-image.png")
23
+ factory :image_brick, class: 'Qbrick::ImageBrick' do |ib|
24
+ ib.image File.open("#{Qbrick::Engine.root}/spec/dummy/app/assets/images/spec-image.png")
25
+ ib.image_size 'gallery'
26
+ end
27
+
28
+ factory :asset, class: Qbrick::Asset do |a|
29
+ a.file File.open("#{Qbrick::Engine.root}/spec/dummy/app/assets/images/spec-image.png")
30
+ end
31
+
32
+ factory :setting, class: Qbrick::Setting do |s|
33
+ s.key 'code'
34
+ s.value 'SomeValue'
35
+ end
36
+
37
+ factory :admin, class: Qbrick::Admin do
38
+ email 'test@test.com'
39
+ password 'somel33tPW'
25
40
  end
26
41
  end
@@ -0,0 +1,70 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Administrator Management', type: :feature do
4
+ def create_admin
5
+ @admin ||= FactoryGirl.create(:admin)
6
+ end
7
+
8
+ def create_and_login_admin
9
+ create_admin
10
+ visit qbrick.cms_pages_path
11
+ fill_in 'E-Mail', with: @admin.email
12
+ fill_in 'Password', with: @admin.password
13
+ click_on 'Login'
14
+ end
15
+
16
+ before :each do
17
+ @page = FactoryGirl.create(:page, page_type: 'navigation', published: true, title: 'home')
18
+ create_and_login_admin
19
+ end
20
+
21
+ describe 'admin' do
22
+ it 'can log in with his/her credentials' do
23
+ expect(page).to have_content 'Signed in successfully'
24
+ end
25
+
26
+ it 'can log out' do
27
+ click_on 'Log out'
28
+ visit qbrick.cms_pages_path
29
+ expect(current_url).to eq(qbrick.new_admin_session_url)
30
+ end
31
+
32
+ context 'when logged in' do
33
+ let(:new_password) { 'newAdminPW!' }
34
+
35
+ it 'can change his/her password' do
36
+ click_on 'Change Password'
37
+ fill_in 'Current Password', with: @admin.password
38
+ fill_in 'Password', with: new_password
39
+ fill_in 'Password Confirmation', with: new_password
40
+ expect { click_on 'Update Admin' }.to change { Qbrick::Admin.find_by_email(@admin.email).encrypted_password }
41
+ end
42
+
43
+ it 'can create a new admin user' do
44
+ click_on 'Admins'
45
+ click_on 'New'
46
+ fill_in 'E-Mail', with: 'another@admin.com'
47
+ fill_in 'Password', with: 'fancyPassword33'
48
+ fill_in 'Password Confirmation', with: 'fancyPassword33'
49
+ expect { click_on 'Create Admin' }.to change { Qbrick::Admin.count }
50
+ end
51
+
52
+ it 'can edit an admin' do
53
+ FactoryGirl.create(:admin, email: 'somemail@admin.com')
54
+ click_on 'Admins'
55
+ find('tr', text: 'somemail@admin.com').find_link('Edit').click
56
+ fill_in 'E-Mail', with: 'new_email@admin.com'
57
+ fill_in 'Password', with: 'fancyPassword33'
58
+ fill_in 'Password Confirmation', with: 'fancyPassword33'
59
+ click_on 'Update Admin'
60
+ expect(page).to have_content('new_email@admin.com')
61
+ end
62
+
63
+ it 'can delete an admin' do
64
+ FactoryGirl.create(:admin, email: 'somemail@admin.com')
65
+ click_on 'Admins'
66
+ expect { find('tr', text: 'somemail@admin.com').find_link('Delete').click }.to change { Qbrick::Admin.count }
67
+ end
68
+ end
69
+ end
70
+ end