releaf-core 0.2.1 → 1.0.3

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 (256) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +19 -21
  3. data/app/assets/javascripts/releaf/application.js +1 -2
  4. data/app/assets/javascripts/releaf/include/field.type_date_or_datetime_or_time.js +19 -21
  5. data/app/assets/javascripts/releaf/include/field.type_richtext.js +31 -9
  6. data/app/assets/javascripts/releaf/include/localization.js +3 -8
  7. data/app/assets/javascripts/releaf/include/nested_fields.js +1 -1
  8. data/app/assets/javascripts/releaf/include/remote_validator.js +7 -4
  9. data/app/assets/javascripts/releaf/include/sortable.js +1 -1
  10. data/app/assets/javascripts/releaf/include/{profile_settings.js → store_settings.js} +4 -10
  11. data/app/assets/javascripts/releaf/include/toolbox.js +7 -11
  12. data/app/assets/stylesheets/releaf/layout/fields.scss +1 -0
  13. data/app/assets/stylesheets/releaf/layout/header.scss +1 -0
  14. data/app/assets/stylesheets/releaf/layout/search.scss +15 -0
  15. data/app/builders/releaf/builders/base.rb +11 -9
  16. data/app/builders/releaf/builders/confirm_destroy_dialog_builder.rb +2 -2
  17. data/app/builders/releaf/builders/confirm_dialog_builder.rb +3 -3
  18. data/app/builders/releaf/builders/edit_builder.rb +51 -6
  19. data/app/builders/releaf/builders/form_builder/associated_set_field.rb +37 -0
  20. data/app/builders/releaf/builders/form_builder/associations.rb +153 -0
  21. data/app/builders/releaf/builders/form_builder/boolean_fields.rb +12 -0
  22. data/app/builders/releaf/builders/form_builder/date_fields.rb +30 -0
  23. data/app/builders/releaf/builders/form_builder/fields.rb +10 -0
  24. data/app/builders/releaf/builders/form_builder/file_fields.rb +47 -0
  25. data/app/builders/releaf/builders/form_builder/i18n_fields.rb +75 -0
  26. data/app/builders/releaf/builders/form_builder/label.rb +34 -0
  27. data/app/builders/releaf/builders/form_builder/number_fields.rb +13 -0
  28. data/app/builders/releaf/builders/form_builder/richtext_fields.rb +28 -0
  29. data/app/builders/releaf/builders/form_builder/text_fields.rb +43 -0
  30. data/app/builders/releaf/builders/form_builder.rb +8 -489
  31. data/app/builders/releaf/builders/index_builder.rb +10 -3
  32. data/app/builders/releaf/builders/page/header_builder.rb +23 -59
  33. data/app/builders/releaf/builders/page/layout_builder.rb +125 -115
  34. data/app/builders/releaf/builders/page/menu_builder.rb +96 -106
  35. data/app/builders/releaf/builders/refused_destroy_dialog_builder.rb +7 -12
  36. data/app/builders/releaf/builders/resource_view.rb +4 -4
  37. data/app/builders/releaf/builders/table_builder.rb +20 -30
  38. data/app/builders/releaf/builders/toolbox_builder.rb +1 -1
  39. data/app/builders/releaf/builders/utilities/date_fields.rb +100 -0
  40. data/app/builders/releaf/builders/utilities/resolve_attribute_field_method_name.rb +80 -0
  41. data/app/builders/releaf/builders/view.rb +5 -2
  42. data/app/builders/releaf/settings/form_builder.rb +18 -0
  43. data/app/builders/releaf/settings/table_builder.rb +9 -0
  44. data/app/controllers/releaf/action_controller.rb +174 -0
  45. data/app/controllers/releaf/{core/errors_controller.rb → errors_controller.rb} +1 -1
  46. data/app/controllers/releaf/root_controller.rb +23 -0
  47. data/app/controllers/releaf/settings_controller.rb +22 -0
  48. data/app/helpers/releaf/application_helper.rb +1 -1
  49. data/app/lib/releaf/action_controller/ajax.rb +24 -0
  50. data/app/lib/releaf/action_controller/breadcrumbs.rb +26 -0
  51. data/app/lib/releaf/action_controller/builders.rb +34 -0
  52. data/app/lib/releaf/action_controller/features.rb +47 -0
  53. data/app/lib/releaf/action_controller/notifications.rb +28 -0
  54. data/app/lib/releaf/action_controller/resources.rb +59 -0
  55. data/app/{controllers/concerns/releaf → lib/releaf/action_controller}/richtext_attachments.rb +1 -1
  56. data/app/lib/releaf/action_controller/search.rb +22 -0
  57. data/app/lib/releaf/action_controller/urls.rb +49 -0
  58. data/app/lib/releaf/action_controller/views.rb +29 -0
  59. data/app/lib/releaf/assets_resolver.rb +51 -0
  60. data/app/lib/releaf/build_errors_hash.rb +81 -0
  61. data/app/lib/releaf/controller_definition.rb +22 -0
  62. data/app/lib/releaf/controller_group_definition.rb +12 -0
  63. data/app/lib/releaf/{core/default_searchable_fields.rb → default_searchable_fields.rb} +1 -1
  64. data/app/lib/releaf/{core/resource_base.rb → resource_base.rb} +14 -6
  65. data/app/lib/releaf/{core/resource_fields.rb → resource_fields.rb} +1 -1
  66. data/app/lib/releaf/{core/resource_params.rb → resource_params.rb} +3 -3
  67. data/app/lib/releaf/resource_table_fields.rb +10 -0
  68. data/app/lib/releaf/{core/resource_utilities.rb → resource_utilities.rb} +2 -2
  69. data/app/lib/releaf/{core/responders → responders}/access_denied_responder.rb +2 -2
  70. data/app/lib/releaf/{core/responders → responders}/after_save_responder.rb +3 -3
  71. data/app/lib/releaf/{core/responders → responders}/confirm_destroy_responder.rb +1 -1
  72. data/app/lib/releaf/{core/responders → responders}/destroy_responder.rb +1 -1
  73. data/app/lib/releaf/{core/responders → responders}/error_responder.rb +1 -1
  74. data/app/lib/releaf/{core/responders → responders}/feature_disabled_responder.rb +2 -2
  75. data/app/lib/releaf/{core/responders → responders}/page_not_found_responder.rb +2 -2
  76. data/app/lib/releaf/responders.rb +31 -0
  77. data/app/lib/releaf/{core/search.rb → search.rb} +1 -1
  78. data/app/lib/releaf/settings/normalize_value.rb +45 -0
  79. data/app/lib/releaf/settings/register.rb +45 -0
  80. data/app/models/releaf/settings.rb +25 -13
  81. data/app/services/array/reorder.rb +82 -0
  82. data/app/views/releaf/{base → action}/confirm_destroy.ruby +0 -0
  83. data/app/views/releaf/{base → action}/create_releaf_richtext_attachment.haml +0 -0
  84. data/app/views/releaf/{base → action}/edit.ruby +0 -0
  85. data/app/views/releaf/{base → action}/index.ruby +0 -0
  86. data/app/views/releaf/{base → action}/new.ruby +0 -0
  87. data/app/views/releaf/{base → action}/refused_destroy.ruby +0 -0
  88. data/app/views/releaf/{base → action}/show.ruby +0 -0
  89. data/app/views/releaf/{base → action}/toolbox.ruby +0 -0
  90. data/lib/generators/dummy/install_generator.rb +5 -0
  91. data/lib/generators/dummy/templates/assets/javascripts/controllers/admin/books.js +23 -0
  92. data/lib/generators/dummy/templates/assets/javascripts/controllers/admin/nodes.js +1 -0
  93. data/lib/generators/dummy/templates/assets/javascripts/controllers/admin/other_site/other_nodes.js +1 -0
  94. data/lib/generators/dummy/templates/assets/stylesheets/controllers/admin/nodes.scss +1 -0
  95. data/lib/generators/dummy/templates/assets/stylesheets/controllers/admin/other_site/other_nodes.scss +1 -0
  96. data/lib/generators/dummy/templates/builders/admin/books/form_builder.rb +11 -1
  97. data/lib/generators/dummy/templates/config/routes.rb +31 -7
  98. data/lib/generators/dummy/templates/controllers/admin/authors_controller.rb +3 -6
  99. data/lib/generators/dummy/templates/controllers/admin/books_controller.rb +1 -1
  100. data/lib/generators/dummy/templates/controllers/admin/chapters_controller.rb +1 -1
  101. data/lib/generators/dummy/templates/controllers/admin/nodes_controller.rb +3 -0
  102. data/lib/generators/dummy/templates/controllers/admin/other_site/other_nodes_controller.rb +3 -0
  103. data/lib/generators/dummy/templates/controllers/admin/publishers_controller.rb +1 -1
  104. data/lib/generators/dummy/templates/controllers/application_controller.rb +27 -5
  105. data/lib/generators/dummy/templates/controllers/concerns/node_controller.rb +13 -3
  106. data/lib/generators/dummy/templates/controllers/contacts_controller.rb +3 -1
  107. data/lib/generators/dummy/templates/initializers/releaf.rb +31 -25
  108. data/lib/generators/dummy/templates/migrations/create_home_pages.rb +1 -0
  109. data/lib/generators/dummy/templates/migrations/create_other_nodes.rb +29 -0
  110. data/lib/generators/dummy/templates/models/author.rb +2 -2
  111. data/lib/generators/dummy/templates/models/book.rb +0 -2
  112. data/lib/generators/dummy/templates/models/chapter.rb +0 -2
  113. data/lib/generators/dummy/templates/models/home_page.rb +1 -0
  114. data/lib/generators/dummy/templates/models/other_site/other_node.rb +7 -0
  115. data/lib/generators/dummy/templates/models/publisher.rb +0 -5
  116. data/lib/generators/dummy/templates/models/text_page.rb +0 -1
  117. data/lib/generators/dummy/templates/views/contacts/show.html.haml +1 -1
  118. data/lib/generators/dummy/templates/views/layouts/application.html.haml +9 -1
  119. data/lib/generators/dummy/templates/views/text_pages/show.haml +1 -1
  120. data/lib/generators/releaf/templates/initializers/releaf.rb +6 -17
  121. data/lib/generators/releaf/templates/migrations/create_releaf_translations.rb +13 -14
  122. data/lib/generators/releaf/templates/seeds/seeds.rb +28 -32
  123. data/lib/releaf/{core/application.rb → application.rb} +5 -4
  124. data/lib/releaf/{core/component.rb → component.rb} +6 -2
  125. data/lib/releaf/configuration.rb +95 -0
  126. data/lib/releaf/core_ext/array/reorder.rb +5 -0
  127. data/lib/releaf/engine.rb +12 -0
  128. data/lib/releaf/exceptions.rb +5 -0
  129. data/lib/releaf/instance_cache.rb +72 -0
  130. data/lib/releaf/{core → rails_ext}/validation_error_codes.rb +1 -1
  131. data/lib/releaf/root/configuration.rb +6 -0
  132. data/lib/releaf/root/default_controller_resolver.rb +37 -0
  133. data/lib/releaf/root/settings_manager.rb +12 -0
  134. data/lib/releaf/root.rb +17 -0
  135. data/lib/releaf/{core/route_mapper.rb → route_mapper.rb} +6 -6
  136. data/lib/releaf/service.rb +11 -0
  137. data/lib/releaf/settings_ui.rb +7 -0
  138. data/lib/releaf/version.rb +1 -1
  139. data/lib/releaf-core.rb +38 -9
  140. data/spec/builders/{builders → releaf/builders}/association_reflector_spec.rb +0 -0
  141. data/spec/builders/{builders → releaf/builders}/base_spec.rb +17 -21
  142. data/spec/builders/{builders → releaf/builders}/collection_spec.rb +0 -0
  143. data/spec/builders/{builders → releaf/builders}/confirm_destroy_dialog_builder_spec.rb +5 -5
  144. data/spec/builders/{builders → releaf/builders}/confirm_dialog_builder_spec.rb +9 -7
  145. data/spec/builders/{builders → releaf/builders}/edit_builder_spec.rb +127 -20
  146. data/spec/builders/releaf/builders/form_builder/associations_spec.rb +129 -0
  147. data/spec/builders/releaf/builders/form_builder/date_fields_spec.rb +86 -0
  148. data/spec/builders/releaf/builders/form_builder/i18n_fields_spec.rb +48 -0
  149. data/spec/builders/releaf/builders/form_builder/label_spec.rb +106 -0
  150. data/spec/builders/releaf/builders/form_builder/number_fields_spec.rb +37 -0
  151. data/spec/builders/releaf/builders/form_builder_spec.rb +228 -0
  152. data/spec/builders/{builders → releaf/builders}/index_builder_spec.rb +29 -10
  153. data/spec/builders/releaf/builders/page/header_builder_spec.rb +65 -0
  154. data/spec/builders/releaf/builders/page/layout_builder_spec.rb +170 -0
  155. data/spec/builders/releaf/builders/page/menu_builder_spec.rb +345 -0
  156. data/spec/builders/{builders → releaf/builders}/pagination_builder_spec.rb +0 -0
  157. data/spec/builders/{builders → releaf/builders}/resource_dialog_spec.rb +0 -0
  158. data/spec/builders/{builders → releaf/builders}/resource_view_spec.rb +8 -8
  159. data/spec/builders/{builders → releaf/builders}/show_builder_spec.rb +0 -0
  160. data/spec/builders/{builders → releaf/builders}/table_builder_spec.rb +31 -75
  161. data/spec/builders/{builders → releaf/builders}/template_spec.rb +0 -0
  162. data/spec/builders/{builders → releaf/builders}/toolbox_builder_spec.rb +4 -4
  163. data/spec/builders/{builders → releaf/builders}/toolbox_spec.rb +0 -0
  164. data/spec/builders/releaf/builders/utilities/date_fields_spec.rb +125 -0
  165. data/spec/builders/releaf/builders/utilities/resolve_attribute_field_method_name_spec.rb +318 -0
  166. data/spec/builders/{builders → releaf/builders}/view_spec.rb +1 -1
  167. data/spec/builders/{builders_spec.rb → releaf/builders_spec.rb} +0 -0
  168. data/spec/builders/releaf/settings/form_builder_spec.rb +48 -0
  169. data/spec/builders/{core → releaf}/settings/table_builder_spec.rb +6 -4
  170. data/spec/controllers/concerns/releaf/richtext_attachments_spec.rb +1 -1
  171. data/spec/controllers/releaf/{base_controller_spec.rb → action_controller_spec.rb} +132 -161
  172. data/spec/controllers/releaf/root_controller_spec.rb +40 -0
  173. data/spec/controllers/releaf/settings_controller_spec.rb +52 -0
  174. data/spec/error_hash_builder_spec.rb +83 -0
  175. data/spec/ext/array_reorder_spec.rb +12 -0
  176. data/spec/features/ajaxbox_spec.rb +6 -6
  177. data/spec/features/errors_spec.rb +2 -1
  178. data/spec/features/index_table_spec.rb +6 -3
  179. data/spec/features/richtext_attachments_spec.rb +2 -2
  180. data/spec/features/richtext_custom_config_spec.rb +28 -0
  181. data/spec/features/richtext_embed_spec.rb +1 -1
  182. data/spec/features/richtext_spec.rb +10 -1
  183. data/spec/features/search_spec.rb +1 -1
  184. data/spec/features/settings_spec.rb +10 -5
  185. data/spec/helpers/application_helper_spec.rb +4 -6
  186. data/spec/lib/releaf/action_controller/features_spec.rb +171 -0
  187. data/spec/lib/releaf/action_controller/search_spec.rb +84 -0
  188. data/spec/lib/releaf/{core/application_spec.rb → application_spec.rb} +7 -6
  189. data/spec/lib/releaf/assets_resolver_spec.rb +130 -0
  190. data/spec/lib/releaf/build_errors_hash_spec.rb +141 -0
  191. data/spec/lib/releaf/configuration_spec.rb +205 -0
  192. data/spec/lib/releaf/controller_definition_spec.rb +49 -0
  193. data/spec/lib/releaf/controller_group_definition_spec.rb +27 -0
  194. data/spec/lib/releaf/{core/default_searchable_fields_spec.rb → default_searchable_fields_spec.rb} +1 -1
  195. data/spec/lib/releaf/instance_cache_spec.rb +98 -0
  196. data/spec/lib/releaf/{core/resource_base_spec.rb → resource_base_spec.rb} +59 -21
  197. data/spec/lib/releaf/{core/resource_fields_spec.rb → resource_fields_spec.rb} +1 -1
  198. data/spec/lib/releaf/{core/resource_params_spec.rb → resource_params_spec.rb} +3 -5
  199. data/spec/lib/releaf/resource_table_fields_spec.rb +20 -0
  200. data/spec/lib/releaf/{core/resource_utilities_spec.rb → resource_utilities_spec.rb} +1 -1
  201. data/spec/lib/releaf/{core/responders → responders}/access_denied_responder_spec.rb +1 -1
  202. data/spec/lib/releaf/{core/responders → responders}/after_save_responder_spec.rb +9 -8
  203. data/spec/lib/releaf/{core/responders → responders}/confirm_destroy_responder_spec.rb +2 -2
  204. data/spec/lib/releaf/{core/responders → responders}/destroy_responder_spec.rb +2 -2
  205. data/spec/lib/releaf/{core/responders → responders}/error_responder_spec.rb +4 -4
  206. data/spec/lib/releaf/{core/responders → responders}/feature_disabled_responder_spec.rb +1 -1
  207. data/spec/lib/releaf/{core/responders → responders}/page_not_found_responder_spec.rb +1 -1
  208. data/spec/lib/releaf/{core/responders_spec.rb → responders_spec.rb} +14 -14
  209. data/spec/lib/releaf/root/configuration_spec.rb +9 -0
  210. data/spec/lib/releaf/root/default_controller_resolver_spec.rb +108 -0
  211. data/spec/lib/releaf/root_spec.rb +13 -0
  212. data/spec/lib/releaf/service_spec.rb +20 -0
  213. data/spec/lib/releaf/settings/normalize_value_spec.rb +103 -0
  214. data/spec/lib/releaf/settings/register_spec.rb +135 -0
  215. data/spec/lib/releaf/settings_manager_spec.rb +22 -0
  216. data/spec/lib/validation_error_codes_spec.rb +1 -1
  217. data/spec/misc/factories_spec.rb +0 -12
  218. data/spec/models/settings_spec.rb +74 -32
  219. data/spec/routing/route_mapper_spec.rb +5 -5
  220. data/spec/rspec_helpers/test_helpers_spec.rb +1 -1
  221. data/spec/rspec_helpers/test_spec.rb +14 -0
  222. data/spec/{lib/releaf/core/item_orderer_spec.rb → services/array/reorder_spec.rb} +32 -53
  223. metadata +299 -224
  224. data/app/builders/releaf/builders/orderer.rb +0 -5
  225. data/app/builders/releaf/builders/tags/releaf_associated_set_field.rb +0 -40
  226. data/app/builders/releaf/core/settings/form_builder.rb +0 -21
  227. data/app/builders/releaf/core/settings/table_builder.rb +0 -11
  228. data/app/controllers/concerns/releaf/breadcrumbs.rb +0 -42
  229. data/app/controllers/releaf/base_controller.rb +0 -458
  230. data/app/controllers/releaf/core/settings_controller.rb +0 -50
  231. data/app/helpers/releaf/javascript_helper.rb +0 -75
  232. data/app/lib/releaf/core/assets_resolver.rb +0 -58
  233. data/app/lib/releaf/core/error_formatter.rb +0 -103
  234. data/app/lib/releaf/core/item_orderer.rb +0 -102
  235. data/app/lib/releaf/core/resource_table_fields.rb +0 -10
  236. data/app/lib/releaf/core/responders.rb +0 -31
  237. data/app/lib/releaf/core/template_field_type_mapper.rb +0 -127
  238. data/lib/generators/dummy/templates/controllers/concerns/.keep +0 -0
  239. data/lib/releaf/core/builders_autoload.rb +0 -27
  240. data/lib/releaf/core/configuration.rb +0 -101
  241. data/lib/releaf/core/engine.rb +0 -35
  242. data/lib/releaf/core/exceptions.rb +0 -38
  243. data/lib/releaf/core/settings_ui_component.rb +0 -7
  244. data/releaf-core.gemspec +0 -35
  245. data/spec/builders/builders/form_builder_spec.rb +0 -562
  246. data/spec/builders/builders/orderer_spec.rb +0 -22
  247. data/spec/builders/builders/page/header_builder_spec.rb +0 -143
  248. data/spec/builders/builders/page/layout_builder_spec.rb +0 -73
  249. data/spec/builders/builders/page/menu_builder_spec.rb +0 -160
  250. data/spec/builders/core/settings/form_builder_spec.rb +0 -69
  251. data/spec/controllers/releaf/core/settings_controller_spec.rb +0 -31
  252. data/spec/lib/releaf/core/assets_resolver_spec.rb +0 -113
  253. data/spec/lib/releaf/core/configuration_spec.rb +0 -230
  254. data/spec/lib/releaf/core/error_formatter_spec.rb +0 -242
  255. data/spec/lib/releaf/core/resource_table_fields_spec.rb +0 -18
  256. data/spec/lib/releaf/core/template_field_type_mapper_spec.rb +0 -311
@@ -8,7 +8,7 @@ feature "Ajaxbox", js: true do
8
8
  user = Releaf::Permissions::User.last
9
9
  visit releaf_permissions_users_path
10
10
  click_link user.name
11
- expect(page).to have_header(text: user.to_text)
11
+ expect(page).to have_header(text: user.releaf_title)
12
12
 
13
13
  open_toolbox_dialog "Delete"
14
14
  within_dialog{ click_link "No" }
@@ -18,7 +18,7 @@ feature "Ajaxbox", js: true do
18
18
 
19
19
  scenario "Close ajaxbox with footer 'cancel' button (wrapped within form) without reloading page" do
20
20
  node = create(:home_page_node, name: "MyNode")
21
- node_path = edit_releaf_content_node_path(node)
21
+ node_path = edit_admin_node_path(node)
22
22
  visit node_path
23
23
  open_toolbox_dialog "Move"
24
24
  within_dialog{ click_link "Cancel" }
@@ -28,7 +28,7 @@ feature "Ajaxbox", js: true do
28
28
 
29
29
  scenario "Close ajaxbox with header 'close' button without reloading page" do
30
30
  node = create(:home_page_node, name: "MyNode")
31
- node_path = edit_releaf_content_node_path(node)
31
+ node_path = edit_admin_node_path(node)
32
32
  visit node_path
33
33
  open_toolbox_dialog "Add child"
34
34
  within_dialog{ find("button.close").click }
@@ -38,7 +38,7 @@ feature "Ajaxbox", js: true do
38
38
 
39
39
  scenario "Drag ajaxbox within header" do
40
40
  node = create(:home_page_node, name: "MyNode")
41
- node_path = edit_releaf_content_node_path(node)
41
+ node_path = edit_admin_node_path(node)
42
42
  visit node_path
43
43
  open_toolbox_dialog "Add child"
44
44
  header = find(".dialog > header")
@@ -66,7 +66,7 @@ feature "Ajaxbox", js: true do
66
66
 
67
67
  scenario "Ajaxbox without modality (background is clickable)" do
68
68
  node = create(:home_page_node, name: "MyNode")
69
- node_path = edit_releaf_content_node_path(node)
69
+ node_path = edit_admin_node_path(node)
70
70
  visit node_path
71
71
  open_toolbox_dialog "Add child"
72
72
 
@@ -79,7 +79,7 @@ feature "Ajaxbox", js: true do
79
79
  user = Releaf::Permissions::User.last
80
80
  visit releaf_permissions_users_path
81
81
  click_link user.name
82
- expect(page).to have_header(text: user.to_text)
82
+ expect(page).to have_header(text: user.releaf_title)
83
83
  open_toolbox_dialog "Delete"
84
84
 
85
85
  expect(page).to have_css(".mfp-bg")
@@ -12,7 +12,8 @@ describe "Errors feature" do
12
12
  end
13
13
 
14
14
  it "returns 403 status code and generic error page for disabled feature" do
15
- allow_any_instance_of(Releaf::Permissions::RolesController).to receive(:verify_feature_availability!).and_raise(Releaf::FeatureDisabled, "edit")
15
+ allow_any_instance_of(Releaf::Permissions::RolesController).to receive(:verify_feature_availability!)
16
+ .and_raise(Releaf::FeatureDisabled, "edit")
16
17
  visit releaf_permissions_roles_path
17
18
 
18
19
  expect(page.status_code).to eq(403)
@@ -13,18 +13,21 @@ feature "Index tables" do
13
13
  visit admin_books_path
14
14
 
15
15
  within ".table.books thead tr" do
16
- cells = ["Title", "Year", "Author", "Genre", "Active", "Published at", "Price", "Stars", "Cover image uid", "Description", "Author publisher title"]
16
+ cells = [
17
+ "Title", "Year", "Author", "Genre", "Active", "Published at",
18
+ "Price", "Stars", "Description", "Author publisher title"
19
+ ]
17
20
  expect(page).to have_cells_text(cells, type: "th")
18
21
  end
19
22
 
20
23
  within ".table.books tbody" do
21
24
  within "tr[data-id='#{@book_1.id}']" do
22
- cells = ["good book", "", "Aleksandrs Lielais", "", "", "No", "", "", "", "", "ABC books"]
25
+ cells = ["good book", "", "Aleksandrs Lielais", "", "", "No", "", "", "", "ABC books"]
23
26
  expect(page).to have_cells_text(cells)
24
27
  end
25
28
 
26
29
  within "tr[data-id='#{@book_2.id}']" do
27
- cells = ["steevs book", "", "Steve Lielais", "", "", "No", "", "", "", "", ""]
30
+ cells = ["steevs book", "", "Steve Lielais", "", "", "No", "", "", "", ""]
28
31
  expect(page).to have_cells_text(cells)
29
32
  end
30
33
  end
@@ -7,7 +7,7 @@ feature "Richtext attachments", js: true do
7
7
  end
8
8
 
9
9
  scenario "Upload image and insert it within text" do
10
- visit new_releaf_content_node_path(content_type: 'HomePage')
10
+ visit new_admin_node_path(content_type: 'HomePage')
11
11
  fill_in("Name", with: "Image test")
12
12
  select('en', from: 'Locale')
13
13
 
@@ -35,7 +35,7 @@ feature "Richtext attachments", js: true do
35
35
  end
36
36
 
37
37
  scenario "Upload file and insert url to it" do
38
- visit new_releaf_content_node_path(content_type: 'HomePage')
38
+ visit new_admin_node_path(content_type: 'HomePage')
39
39
  fill_in("Name", with: "Link test")
40
40
  select('en', from: 'Locale')
41
41
 
@@ -0,0 +1,28 @@
1
+ require 'rails_helper'
2
+ feature "Richtext custom config", js: true do
3
+ background do
4
+ # preload ActsAsNode classes
5
+ Rails.application.eager_load!
6
+ auth_as_user
7
+ end
8
+
9
+ scenario "Add embed to richtext" do
10
+ visit new_admin_book_path
11
+ wait_for_all_richtexts
12
+
13
+ within "section[data-name=\"chapters\"]" do
14
+ click_button "Add item"
15
+ expect(page).to have_css(".cke_toolbar a.cke_button__bold")
16
+ expect(page).to have_css(".cke_toolbar a.cke_button__italic")
17
+ expect(page).to_not have_css(".cke_toolbar a.cke_button__image")
18
+ expect(page).to_not have_css(".cke_toolbar a.cke_button__format")
19
+ end
20
+
21
+ within ".field[data-name=\"summary_html\"]" do
22
+ expect(page).to have_css(".cke_toolbar a.cke_button__bold")
23
+ expect(page).to have_css(".cke_toolbar a.cke_button__italic")
24
+ expect(page).to have_css(".cke_toolbar a.cke_button__image")
25
+ expect(page).to_not have_css(".cke_toolbar a.cke_button__format")
26
+ end
27
+ end
28
+ end
@@ -7,7 +7,7 @@ feature "Richtext embed", js: true do
7
7
  end
8
8
 
9
9
  scenario "Add embed to richtext" do
10
- visit new_releaf_content_node_path(content_type: 'HomePage')
10
+ visit new_admin_node_path(content_type: 'HomePage')
11
11
  fill_in("Name", with: "Embed test")
12
12
  select('en', from: 'Locale')
13
13
 
@@ -5,7 +5,7 @@ feature "Richtext editing", js: true do
5
5
  end
6
6
 
7
7
  scenario "Image toolbar available when controller support attachments" do
8
- visit new_releaf_content_node_path(content_type: 'TextPage')
8
+ visit new_admin_node_path(content_type: 'TextPage')
9
9
  fill_in_richtext 'Text', with: "some text"
10
10
  expect(page).to have_css("a.cke_button__image")
11
11
  end
@@ -16,4 +16,13 @@ feature "Richtext editing", js: true do
16
16
  fill_in_richtext "Summary", with: "some text"
17
17
  expect(page).to_not have_css("a.cke_button__image")
18
18
  end
19
+
20
+ scenario "Test helper fills in correct value" do
21
+ visit new_admin_node_path(content_type: 'TextPage')
22
+ html = %Q[ <p class="xxx" id='yyy'> &quot;HTML&quot; 'content' </p> ]
23
+ fill_in_richtext 'Text', with: html
24
+ content = evaluate_script('CKEDITOR.instances["resource_content_attributes_text_html"].getData();')
25
+ expect(content).to match_html html
26
+ end
27
+
19
28
  end
@@ -1,6 +1,6 @@
1
1
  require "rails_helper"
2
2
 
3
- describe Releaf::Core::Search do
3
+ describe Releaf::Search do
4
4
 
5
5
  describe "searching in models attributes" do
6
6
  with_model :Tester, scope: :all do
@@ -5,14 +5,18 @@ feature "Settings", js: true do
5
5
  {key: "content.updated_at", default: Time.parse("2014-07-01 14:33:59"), description: "Content update time", type: :time},
6
6
  {key: "content.updated", default: true, description: "Content is updated?", type: :boolean},
7
7
  {key: "content.rating", default: 5.65, type: :decimal},
8
- {key: "content.title", default: "some"}
8
+ {key: "content.title", default: "some"},
9
+ {key: "content.date", default: DateTime.parse("2015-05-02"), type: "date"}
9
10
  ]
10
11
  Releaf::Settings.destroy_all
11
- Releaf::Settings.register(values)
12
+ Releaf::Settings.register(*values)
12
13
  auth_as_user
13
14
 
14
- visit releaf_core_settings_path
15
- expect(page).to have_number_of_resources(4)
15
+ visit releaf_settings_path
16
+ expect(page).to have_number_of_resources(5)
17
+ expect(page).to have_css(".table.releaf\\/settings tbody tr:first-child td:first-child", text: "content.date")
18
+ expect(page).to have_css(".table.releaf\\/settings tbody tr:first-child td:nth-child(2)", text: /^Sat, 02 May 2015 00:00:00 \+0000$/)
19
+ expect(page).to have_css(".table.releaf\\/settings tbody tr:last-child td:first-child", text: "content.updated_at")
16
20
 
17
21
  search "content.updated"
18
22
  expect(page).to have_number_of_resources(2)
@@ -21,6 +25,7 @@ feature "Settings", js: true do
21
25
  update_resource do
22
26
  fill_in "Content update time", with: '2014-04-01 12:33:59'
23
27
  end
28
+
24
29
  click_link "Back to list"
25
30
  expect(page).to have_content("2014-04-01 12:33:59")
26
31
  expect(Releaf::Settings["content.updated_at"]).to eq(Time.parse("2014-04-01 12:33:59"))
@@ -29,7 +34,7 @@ feature "Settings", js: true do
29
34
  expect(page).to have_field("Content is updated?")
30
35
  expect(page).to have_css(".field input[type='checkbox'][checked='checked']")
31
36
 
32
- visit releaf_core_settings_path
37
+ visit releaf_settings_path
33
38
 
34
39
  click_link "content.rating"
35
40
  expect(page).to have_field("Value")
@@ -32,7 +32,7 @@ describe Releaf::ApplicationHelper do
32
32
  describe "#i18n_options_for_select" do
33
33
  Color = Struct.new(:id, :to_s)
34
34
  let(:helper) do
35
- helper = instance_double(Releaf::BaseController)
35
+ helper = instance_double(Releaf::ActionController)
36
36
  helper.extend Releaf::ApplicationHelper
37
37
  helper.extend ActionView::Helpers
38
38
 
@@ -40,11 +40,9 @@ describe Releaf::ApplicationHelper do
40
40
  end
41
41
 
42
42
  before do
43
-
44
- translation = FactoryGirl.create(:translation, :key => "admin.xx.colors-red")
45
- FactoryGirl.create(:translation_data, :lang => "en", :localization => "Color red", :translation => translation)
46
- I18n.backend.reload_cache
47
-
43
+ translation = Releaf::I18nDatabase::I18nEntry.create(key: "admin.xx.colors-red")
44
+ translation.i18n_entry_translation.create(locale: "en", text: "Color red")
45
+ Releaf::I18nDatabase::Backend.reset_cache
48
46
  allow(helper).to receive(:controller_scope_name).and_return("admin.xx")
49
47
  end
50
48
 
@@ -0,0 +1,171 @@
1
+ require 'rails_helper'
2
+
3
+ describe Releaf::ActionController::Features do
4
+ let(:subject){ DummyActionControllerFeaturesIncluder.new }
5
+
6
+ class DummyActionControllerFeaturesIncluder < Releaf::ActionController
7
+ include Releaf::ActionController::Features
8
+ include Releaf::Responders
9
+ def params
10
+ {action: "some_action"}
11
+ end
12
+ end
13
+
14
+ describe "#verify_feature_availability!" do
15
+ before do
16
+ allow(subject).to receive(:action_feature).with("some_action").and_return(:feature_name)
17
+ end
18
+
19
+ it "adds itself to before filters" do
20
+ before_actions = subject._process_action_callbacks.select{|f| f.kind == :before}.map{|f| f.filter }
21
+ expect(before_actions).to include(:verify_controller_access!)
22
+ end
23
+
24
+ context "when no feature defined for action" do
25
+ it "doesn no raise `Releaf::FeatureDisabled` exception" do
26
+ allow(subject).to receive(:action_feature).with("some_action").and_return(nil)
27
+ expect{ subject.verify_feature_availability! }.to_not raise_error
28
+ end
29
+ end
30
+
31
+ context "when current feature is available" do
32
+ it "doesn no raise `Releaf::FeatureDisabled` exception" do
33
+ allow(subject).to receive(:feature_available?).with(:feature_name).and_return(true)
34
+ expect{ subject.verify_feature_availability! }.to_not raise_error
35
+ end
36
+ end
37
+
38
+ context "when current feature is not available" do
39
+ it "raises `Releaf::FeatureDisabled` exception with stringified feature name" do
40
+ allow(subject).to receive(:feature_available?).with(:feature_name).and_return(false)
41
+ expect{ subject.verify_feature_availability! }.to raise_error(Releaf::FeatureDisabled, "feature_name")
42
+ end
43
+ end
44
+ end
45
+
46
+ describe "#action_feature" do
47
+ before do
48
+ allow(subject).to receive(:action_features).and_return(create: "xxx", te: "kkk")
49
+ end
50
+
51
+ it "returns matching feature for given action from action features" do
52
+ expect(subject.action_feature(:create)).to eq("xxx")
53
+ end
54
+
55
+ it "symbolize given action name" do
56
+ expect(subject.action_feature("te")).to eq("kkk")
57
+ end
58
+ end
59
+
60
+ describe "#features" do
61
+ it "returns array instance" do
62
+ expect(subject.features).to be_instance_of Array
63
+ end
64
+
65
+ it "returned array contains features as symbols" do
66
+ subject.features.each do|feature_name|
67
+ expect(feature_name).to be_instance_of Symbol
68
+ end
69
+ end
70
+ end
71
+
72
+ describe "#action_features" do
73
+ it "returns instance of `Hash`" do
74
+ expect(subject.action_features).to be_instance_of(Hash)
75
+ end
76
+
77
+ it "returns hash with action and feature mapp as symbols" do
78
+ subject.action_features.each_pair do|action_name, feature_name|
79
+ expect(action_name).to be_instance_of(Symbol)
80
+ expect(feature_name).to be_instance_of(Symbol)
81
+ end
82
+ end
83
+
84
+ context "when `show` feature is available" do
85
+ it "returns show to show feature mapping" do
86
+ allow(subject).to receive(:feature_available?).with(:show).and_return(true)
87
+ expect(subject.action_features[:show]).to eq(:show)
88
+ end
89
+ end
90
+
91
+ context "when `show` feature is not available" do
92
+ it "returns show to edit feature mapping" do
93
+ allow(subject).to receive(:feature_available?).with(:show).and_return(false)
94
+ expect(subject.action_features[:show]).to eq(:edit)
95
+ end
96
+ end
97
+ end
98
+
99
+ describe "#feature_disabled" do
100
+ before do
101
+ allow(subject).to receive(:action_responder).with(:feature_disabled).and_return("_res")
102
+ end
103
+
104
+ it "adds itself as rescue handler from `Releaf::FeatureDisabled` exception" do
105
+ expect(Hash[subject.rescue_handlers]["Releaf::FeatureDisabled"]).to eq(:feature_disabled)
106
+ end
107
+
108
+ it "calls disabled feature responder" do
109
+ expect(subject).to receive(:respond_with).with(nil, responder: "_res")
110
+ subject.feature_disabled(Releaf::FeatureDisabled.new("xx"))
111
+ end
112
+
113
+ it "assigns @feature instance variable from exception message" do
114
+ allow(subject).to receive(:respond_with)
115
+ expect{ subject.feature_disabled(Releaf::FeatureDisabled.new("xx")) }.to change{ subject.instance_variable_get(:@feature) }
116
+ .to("xx")
117
+ end
118
+ end
119
+
120
+ describe "#feature_available?" do
121
+ it "adds itself as helper" do
122
+ expect(subject._helper_methods).to include(:feature_available?)
123
+ end
124
+
125
+ it "returns whether feature is defined within features variable" do
126
+ allow(subject).to receive(:features).and_return([:edit])
127
+ expect(subject.feature_available?(:create)).to be false
128
+
129
+ allow(subject).to receive(:features).and_return([:edit, :create])
130
+ expect(subject.feature_available?(:create)).to be true
131
+ end
132
+
133
+ context "when `search` feature requested" do
134
+ it "also checks whether `index` feature is enabled" do
135
+ allow(subject).to receive(:feature_available?).with(:search).and_call_original
136
+ allow(subject).to receive(:feature_available?).with(:index).and_return(false)
137
+
138
+ allow(subject).to receive(:features).and_return([:edit])
139
+ expect(subject.feature_available?(:search)).to be false
140
+
141
+ allow(subject).to receive(:features).and_return([:edit, :search])
142
+ expect(subject.feature_available?(:search)).to be false
143
+
144
+ allow(subject).to receive(:feature_available?).with(:index).and_return(true)
145
+ expect(subject.feature_available?(:search)).to be true
146
+
147
+ allow(subject).to receive(:features).and_return([:edit])
148
+ expect(subject.feature_available?(:search)).to be false
149
+ end
150
+ end
151
+
152
+ context "when `create_another` feature requested" do
153
+ it "also checks whether `create` feature is enabled" do
154
+ allow(subject).to receive(:feature_available?).with(:create_another).and_call_original
155
+ allow(subject).to receive(:feature_available?).with(:create).and_return(false)
156
+
157
+ allow(subject).to receive(:features).and_return([:edit])
158
+ expect(subject.feature_available?(:create_another)).to be false
159
+
160
+ allow(subject).to receive(:features).and_return([:edit, :create_another])
161
+ expect(subject.feature_available?(:create_another)).to be false
162
+
163
+ allow(subject).to receive(:feature_available?).with(:create).and_return(true)
164
+ expect(subject.feature_available?(:create_another)).to be true
165
+
166
+ allow(subject).to receive(:features).and_return([:edit])
167
+ expect(subject.feature_available?(:create_another)).to be false
168
+ end
169
+ end
170
+ end
171
+ end
@@ -0,0 +1,84 @@
1
+ require 'rails_helper'
2
+
3
+ describe Releaf::ActionController::Search do
4
+ let(:subject){ DummyActionControllerSearchIncluder.new }
5
+
6
+ class DummySearcher < Releaf::Search
7
+ end
8
+
9
+ class DummyActionControllerSearchIncluder < Releaf::ActionController
10
+ include Releaf::ActionController::Features
11
+ include Releaf::ActionController::Search
12
+
13
+ def resource_class
14
+ Book
15
+ end
16
+ end
17
+
18
+ describe "#search" do
19
+ before do
20
+ allow(subject).to receive(:searchable_fields).and_return([:name, :email])
21
+ allow(subject).to receive(:feature_available?).with(:search).and_return(true)
22
+
23
+ subject.instance_variable_set(:@collection, "_collection")
24
+ allow(subject).to receive(:searcher_class).and_return(DummySearcher)
25
+ allow(DummySearcher).to receive(:prepare).with(relation: "_collection", fields: [:name, :email], text: "_some")
26
+ .and_return("_collection_with_search")
27
+ end
28
+
29
+ context "when feature is enabled, text and searchable fields is not blank" do
30
+ it "replaces collection with searchable collection" do
31
+ expect{ subject.search("_some") }.to change{ subject.instance_variable_get(:@collection) }
32
+ .from("_collection").to("_collection_with_search")
33
+ end
34
+ end
35
+
36
+ context "when `show` feature is not available" do
37
+ it "does not replace collection with searchable collection" do
38
+ allow(subject).to receive(:feature_available?).with(:search).and_return(false)
39
+ expect{ subject.search("_some") }.to_not change{ subject.instance_variable_get(:@collection) }
40
+ end
41
+ end
42
+
43
+ context "when blank search given" do
44
+ it "does not replace collection with searchable collection" do
45
+ expect{ subject.search("") }.to_not change{ subject.instance_variable_get(:@collection) }
46
+ end
47
+ end
48
+
49
+ context "when no search fields exists" do
50
+ it "does not replace collection with searchable collection" do
51
+ allow(subject).to receive(:searchable_fields).and_return([])
52
+ expect{ subject.search("_some") }.to_not change{ subject.instance_variable_get(:@collection) }
53
+ end
54
+ end
55
+ end
56
+
57
+ describe "#searcher_class" do
58
+ it "returns `Releaf::Search` class" do
59
+ expect(subject.searcher_class).to eq(Releaf::Search)
60
+ end
61
+ end
62
+
63
+ describe "#searchable_fields" do
64
+ let(:searchable_fields){ Releaf::DefaultSearchableFields.new(Author) }
65
+
66
+ it "adds itself as helper" do
67
+ expect(subject._helper_methods).to include(:searchable_fields)
68
+ end
69
+
70
+ it "returns default searchable fields from `Releaf::DefaultSearchableFields` instance" do
71
+ allow(Releaf::DefaultSearchableFields).to receive(:new).with(Book).and_return(searchable_fields)
72
+ allow(searchable_fields).to receive(:find).and_return("x").once
73
+
74
+ expect(subject.searchable_fields).to eq("x")
75
+ end
76
+
77
+ it "caches returned searchable fields" do
78
+ allow(Releaf::DefaultSearchableFields).to receive(:new).and_return(searchable_fields)
79
+ expect(searchable_fields).to receive(:find).and_return("x").once
80
+ subject.searchable_fields
81
+ subject.searchable_fields
82
+ end
83
+ end
84
+ end
@@ -1,14 +1,15 @@
1
1
  require "rails_helper"
2
2
 
3
- describe Releaf::Core::Application do
3
+ describe Releaf::Application do
4
4
  describe "#configure" do
5
- it "assigns new `Releaf::Core::Configuration` instance, evaluate block and call instance configuration" do
6
- configuration = Releaf::Core::Configuration.new
7
- allow(Releaf::Core::Configuration).to receive(:new).and_return(configuration)
5
+ it "assigns new configuration instance, evaluate block, initialize locales and components" do
6
+ configuration = Releaf::Configuration.new
7
+ allow(Releaf::Configuration).to receive(:new).and_return(configuration)
8
8
 
9
9
  expect(subject).to receive(:config=).with(configuration).and_call_original.ordered
10
10
  expect(configuration).to receive(:menu=).with("x").ordered
11
- expect(configuration).to receive(:configure)
11
+ expect(configuration).to receive(:initialize_locales).ordered
12
+ expect(configuration).to receive(:initialize_components).ordered
12
13
  subject.configure{ config.menu = "x" }
13
14
  end
14
15
  end
@@ -24,7 +25,7 @@ describe Releaf::Core::Application do
24
25
  end
25
26
  end
26
27
 
27
- subject.config = Releaf::Core::Configuration.new
28
+ subject.config = Releaf::Configuration.new
28
29
  allow(subject.config).to receive(:layout_builder_class_name).and_return("DummyBuilder")
29
30
  builder = DummyBuilder.new("xx")
30
31
  allow(DummyBuilder).to receive(:new).with("tmpl").and_return(builder)
@@ -0,0 +1,130 @@
1
+ require "rails_helper"
2
+
3
+ describe Releaf::AssetsResolver do
4
+ describe ".base_assets" do
5
+ it "returns array with `releaf/application`" do
6
+ expect(described_class.base_assets).to eq(["releaf/application"])
7
+ end
8
+ end
9
+
10
+ describe ".controller_assets" do
11
+ before do
12
+ allow(described_class).to receive(:base_assets).and_return(["a", "b"])
13
+ end
14
+
15
+ context "when controller assets of given type (javascripts/stylesheets) exists" do
16
+ it "returns array with controller specific asset alognside base assets" do
17
+ allow(described_class).to receive(:assets).and_return(
18
+ "controllers/releaf/i18n_database/translations.js" => "controllers/releaf/i18n_database/translations.js",
19
+ "controllers/releaf/i18n_database/translations.css" => "controllers/releaf/i18n_database/translations.css",
20
+ )
21
+ expect(described_class.controller_assets("releaf/i18n_database/translations", :javascripts))
22
+ .to eq(["a", "b", "controllers/releaf/i18n_database/translations.js"])
23
+
24
+ expect(described_class.controller_assets("releaf/i18n_database/translations", :stylesheets))
25
+ .to eq(["a", "b", "controllers/releaf/i18n_database/translations.css"])
26
+ end
27
+ end
28
+
29
+ context "when no controller assets of given type (javascripts/stylesheets) exists" do
30
+ it "returns only base assets" do
31
+ allow(described_class).to receive(:assets).and_return(
32
+ "controllers/releaf/i18n_database/translations.fonts" => "controllers/releaf/i18n_database/translations.fonts",
33
+ "i18n_database/translations.css" => "i18n_database/translations.css",
34
+ )
35
+ expect(described_class.controller_assets("releaf/i18n_database/translations", :javascripts))
36
+ .to eq(["a", "b"])
37
+
38
+ expect(described_class.controller_assets("releaf/i18n_database/translations", :stylesheets))
39
+ .to eq(["a", "b"])
40
+ end
41
+ end
42
+ end
43
+
44
+ describe ".compiled_assets" do
45
+ it "returns array with uniq controller scoped stylesheets and javascripts" do
46
+ allow(Rails.application.assets_manifest).to receive(:files).and_return(
47
+ "controllers/releaf/content/nodes-72ac849dd467fe827933f15c45ea77a2b7beac55379147f3be4a21779787f484.js"=>{"logical_path"=>"controllers/releaf/content/nodes.js", "mtime"=>"2015-12-01T13:55:41+02:00", "size"=>1530, "digest"=>"72ac849dd467fe827933f15c45ea77a2b7beac55379147f3be4a21779787f484", "integrity"=>"sha256-cqyEndRn/oJ5M/FcRep3ore+rFU3kUfzvkohd5eH9IQ="},
48
+ "controllers/releaf/content/nodes-2ac6b38702a01d9e0918adasasdasda45e746.css"=>{"logical_path"=>"controllers/releaf/content/nodes.css", "mtime"=>"2016-02-18T13:36:15+02:00", "size"=>4301, "digest"=>"2ac6b38702a01d9e0918adasasdasda45e746", "integrity"=>"sha256-asdasdasdsa+adasdasda="},
49
+ # simulate old assets cache here
50
+ "controllers/releaf/content/nodes-adsaassdkdasd.css"=>{"logical_path"=>"controllers/releaf/content/nodes.css", "mtime"=>"2016-02-18T13:36:15+02:00", "size"=>4301, "digest"=>"adsaassdkdasd", "integrity"=>"sha256-asdasdasdsa+adasdasda="},
51
+ "releaontxzcent/nodes-asdassdasdsaasdasd.css"=>{"logical_path"=>"releaontxzcent/nodes-asdassdasdsaasdasd.css", "mtime"=>"2016-01-18T13:36:15+02:00", "size"=>5919, "digest"=>"asdassdasdsaasdasd", "integrity"=>"sha256-KsazhwKgHZ4JGPBY+SOznIMgzfph9Bx0lHUrZIpF50Y="},
52
+ "controllers/releaf/permissions/sessions-9eb2f3275ea7578a6a95ca413d318a9984ef93c0d6645f11cf77fe82a2639cf0.css"=>{"logical_path"=>"controllers/releaf/permissions/sessions.css", "mtime"=>"2016-01-18T13:36:15+02:00", "size"=>2205, "digest"=>"9eb2f3275ea7578a6a95ca413d318a9984ef93c0d6645f11cf77fe82a2639cf0", "integrity"=>"sha256-nrLzJ16nV4pqlcpBPTGKmYTvk8DWZF8Rz3f+gqJjnPA="}
53
+ )
54
+
55
+ list = [
56
+ "controllers/releaf/content/nodes.js",
57
+ "controllers/releaf/content/nodes.css",
58
+ "controllers/releaf/permissions/sessions.css"
59
+ ]
60
+ expect(described_class.compiled_assets).to eq(list)
61
+ end
62
+ end
63
+
64
+ describe ".noncompiled_assets" do
65
+ it "returns array with controller scoped stylesheets and javascripts" do
66
+ list = [
67
+ "controllers/admin/books.js",
68
+ "controllers/admin/nodes.js",
69
+ "controllers/admin/other_site/other_nodes.js",
70
+ "controllers/admin/nodes.css",
71
+ "controllers/admin/other_site/other_nodes.css",
72
+ "controllers/releaf/content/nodes.js",
73
+ "controllers/releaf/content/nodes.css",
74
+ "controllers/releaf/permissions/sessions.css",
75
+ "controllers/releaf/i18n_database/translations.js",
76
+ "controllers/releaf/i18n_database/translations.css"
77
+ ]
78
+ expect(described_class.noncompiled_assets).to eq(list)
79
+ end
80
+ end
81
+
82
+ describe ".compiled_assets?" do
83
+ context "when `Rails.application.assets` is not nil" do
84
+ it "returns true" do
85
+ allow(Rails.application).to receive(:assets).and_return(nil)
86
+ expect(described_class.compiled_assets?).to be true
87
+ end
88
+ end
89
+
90
+ context "when `Rails.application.assets` is nil" do
91
+ it "returns false" do
92
+ allow(Rails.application).to receive(:assets).and_return("x")
93
+ expect(described_class.compiled_assets?).to be false
94
+ end
95
+ end
96
+ end
97
+
98
+ describe ".assets" do
99
+ before do
100
+ described_class.class_variable_set(:@@compiled_assets, nil)
101
+ allow(described_class).to receive(:compiled_assets).and_return("a")
102
+ allow(described_class).to receive(:noncompiled_assets).and_return("b")
103
+ allow(described_class).to receive(:assets_hash).with("a").and_return("aa")
104
+ allow(described_class).to receive(:assets_hash).with("b").and_return("bb")
105
+ end
106
+
107
+ context "when compiled assets is not available" do
108
+ it "returns grouped non compiled assets" do
109
+ allow(described_class).to receive(:compiled_assets?).and_return(false)
110
+ expect(described_class.assets).to eq("bb")
111
+ end
112
+ end
113
+
114
+ context "when compiled assets available" do
115
+ before do
116
+ allow(described_class).to receive(:compiled_assets?).and_return(true)
117
+ end
118
+
119
+ it "caches grouped compiled assets list" do
120
+ expect(described_class).to receive(:assets_hash).once.and_return("aa")
121
+ described_class.assets
122
+ described_class.assets
123
+ end
124
+
125
+ it "returns grouped compiled assets" do
126
+ expect(described_class.assets).to eq("aa")
127
+ end
128
+ end
129
+ end
130
+ end