alchemy_cms 3.0.4 → 3.1.0.beta1

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 (210) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +4 -6
  3. data/Gemfile +4 -7
  4. data/README.md +207 -115
  5. data/alchemy_cms.gemspec +10 -9
  6. data/app/assets/javascripts/alchemy/alchemy.dragndrop.js.coffee +2 -2
  7. data/app/assets/javascripts/alchemy/alchemy.image_cropper.js.coffee +2 -2
  8. data/app/assets/javascripts/alchemy/alchemy.js +6 -7
  9. data/app/assets/javascripts/alchemy/alchemy.translations.js.coffee +1 -43
  10. data/app/assets/javascripts/alchemy/alchemy.uploader.js.coffee +1 -1
  11. data/app/assets/stylesheets/alchemy/_mixins.scss +2 -1
  12. data/app/assets/stylesheets/alchemy/buttons.scss +0 -5
  13. data/app/assets/stylesheets/alchemy/dialogs.scss +1 -0
  14. data/app/assets/stylesheets/alchemy/frame.scss +9 -12
  15. data/app/assets/stylesheets/tinymce/skins/alchemy/content.min.css.scss +11 -2
  16. data/app/assets/stylesheets/tinymce/skins/alchemy/skin.min.css.scss +9 -1
  17. data/app/controllers/alchemy/admin/attachments_controller.rb +2 -4
  18. data/app/controllers/alchemy/admin/essence_pictures_controller.rb +34 -38
  19. data/app/controllers/alchemy/api/base_controller.rb +19 -0
  20. data/app/controllers/alchemy/api/contents_controller.rb +35 -0
  21. data/app/controllers/alchemy/api/elements_controller.rb +29 -0
  22. data/app/controllers/alchemy/api/pages_controller.rb +32 -0
  23. data/app/controllers/alchemy/contents_controller.rb +1 -0
  24. data/app/controllers/alchemy/elements_controller.rb +5 -2
  25. data/app/controllers/alchemy/pages_controller.rb +4 -1
  26. data/app/controllers/alchemy/pictures_controller.rb +4 -36
  27. data/app/helpers/alchemy/admin/essences_helper.rb +5 -2
  28. data/app/helpers/alchemy/essences_helper.rb +14 -1
  29. data/app/models/alchemy/content.rb +32 -4
  30. data/app/models/alchemy/element.rb +2 -16
  31. data/app/models/alchemy/element/presenters.rb +2 -2
  32. data/app/models/alchemy/essence_file.rb +5 -0
  33. data/app/models/alchemy/essence_picture.rb +12 -8
  34. data/app/models/alchemy/picture.rb +1 -74
  35. data/app/models/alchemy/picture/transformations.rb +249 -0
  36. data/app/serializers/alchemy/content_serializer.rb +3 -10
  37. data/app/serializers/alchemy/element_serializer.rb +6 -3
  38. data/app/serializers/alchemy/legacy_element_serializer.rb +17 -0
  39. data/app/views/alchemy/admin/dashboard/_sites.html.erb +14 -4
  40. data/app/views/alchemy/admin/essence_pictures/crop.html.erb +8 -5
  41. data/app/views/alchemy/admin/pages/edit.html.erb +9 -9
  42. data/app/views/alchemy/admin/pictures/info.html.erb +2 -3
  43. data/app/views/alchemy/admin/tags/edit.html.erb +1 -1
  44. data/app/views/alchemy/essences/_essence_boolean_editor.html.erb +8 -7
  45. data/app/views/alchemy/essences/_essence_boolean_view.html.erb +3 -3
  46. data/app/views/alchemy/essences/_essence_date_editor.html.erb +8 -2
  47. data/app/views/alchemy/essences/_essence_date_view.html.erb +10 -8
  48. data/app/views/alchemy/essences/_essence_file_editor.html.erb +48 -53
  49. data/app/views/alchemy/essences/_essence_file_view.html.erb +5 -5
  50. data/app/views/alchemy/essences/_essence_html_editor.html.erb +5 -4
  51. data/app/views/alchemy/essences/_essence_link_editor.html.erb +17 -15
  52. data/app/views/alchemy/essences/_essence_link_view.html.erb +11 -7
  53. data/app/views/alchemy/essences/_essence_picture_editor.html.erb +4 -2
  54. data/app/views/alchemy/essences/_essence_picture_view.html.erb +4 -2
  55. data/app/views/alchemy/essences/_essence_richtext_view.html.erb +5 -4
  56. data/app/views/alchemy/essences/_essence_select_editor.html.erb +22 -32
  57. data/app/views/alchemy/essences/_essence_text_view.html.erb +7 -6
  58. data/app/views/alchemy/essences/shared/_essence_picture_tools.html.erb +1 -1
  59. data/app/views/layouts/alchemy/admin.html.erb +5 -3
  60. data/config/initializers/inflections.rb +3 -0
  61. data/config/initializers/simple_form.rb +1 -1
  62. data/config/locales/alchemy.en.yml +0 -1
  63. data/config/routes.rb +14 -0
  64. data/lib/alchemy/capistrano.rb +71 -0
  65. data/lib/alchemy/engine.rb +0 -3
  66. data/lib/alchemy/essence.rb +1 -1
  67. data/lib/alchemy/permissions.rb +19 -5
  68. data/lib/alchemy/picture_attributes.rb +1 -1
  69. data/lib/alchemy/test_support/auth_helpers.rb +1 -1
  70. data/lib/alchemy/test_support/essence_shared_examples.rb +37 -22
  71. data/lib/alchemy/test_support/integration_helpers.rb +1 -1
  72. data/lib/alchemy/tinymce.rb +21 -4
  73. data/lib/alchemy/upgrader/three_point_one.rb +43 -0
  74. data/lib/alchemy/upgrader/three_point_zero.rb +13 -0
  75. data/lib/alchemy/version.rb +2 -1
  76. data/lib/rails/generators/alchemy/module/module_generator.rb +30 -0
  77. data/lib/rails/generators/alchemy/module/templates/ability.rb.tt +11 -0
  78. data/lib/rails/generators/alchemy/module/templates/controller.rb.tt +2 -0
  79. data/lib/rails/generators/alchemy/module/templates/module_config.rb.tt +15 -0
  80. data/lib/rails/generators/alchemy/scaffold/scaffold_generator.rb +0 -1
  81. data/lib/rails/templates/alchemy.rb +2 -2
  82. data/lib/tasks/alchemy/db.rake +7 -1
  83. data/spec/controllers/admin/attachments_controller_spec.rb +38 -38
  84. data/spec/controllers/admin/base_controller_spec.rb +18 -18
  85. data/spec/controllers/admin/clipboard_controller_spec.rb +23 -18
  86. data/spec/controllers/admin/contents_controller_spec.rb +33 -27
  87. data/spec/controllers/admin/dashboard_controller_spec.rb +14 -14
  88. data/spec/controllers/admin/elements_controller_spec.rb +125 -105
  89. data/spec/controllers/admin/essence_files_controller_spec.rb +6 -7
  90. data/spec/controllers/admin/essence_pictures_controller_spec.rb +52 -42
  91. data/spec/controllers/admin/languages_controller_spec.rb +3 -3
  92. data/spec/controllers/admin/pages_controller_spec.rb +81 -71
  93. data/spec/controllers/admin/pictures_controller_spec.rb +69 -72
  94. data/spec/controllers/admin/resources_controller_spec.rb +5 -5
  95. data/spec/controllers/admin/trash_controller_spec.rb +15 -12
  96. data/spec/controllers/alchemy/admin/tags_controller_spec.rb +8 -8
  97. data/spec/controllers/alchemy/api/contents_controller_spec.rb +73 -0
  98. data/spec/controllers/alchemy/api/elements_controller_spec.rb +69 -0
  99. data/spec/controllers/alchemy/api/pages_controller_spec.rb +86 -0
  100. data/spec/controllers/attachments_controller_spec.rb +8 -8
  101. data/spec/controllers/contents_controller_spec.rb +22 -0
  102. data/spec/controllers/elements_controller_spec.rb +10 -4
  103. data/spec/controllers/messages_controller_spec.rb +35 -34
  104. data/spec/controllers/pages_controller_spec.rb +37 -28
  105. data/spec/controllers/pictures_controller_spec.rb +90 -23
  106. data/spec/dummy/app/models/dummy_user.rb +0 -4
  107. data/spec/dummy/app/views/alchemy/elements/_all_you_can_eat_editor.html.erb +11 -0
  108. data/spec/dummy/config/alchemy/elements.yml +22 -1
  109. data/spec/dummy/config/alchemy/page_layouts.yml +4 -0
  110. data/spec/dummy/config/application.rb +2 -1
  111. data/spec/dummy/config/environments/test.rb +3 -1
  112. data/spec/features/admin/dashboard_spec.rb +41 -6
  113. data/spec/features/admin/language_tree_feature_spec.rb +3 -3
  114. data/spec/features/admin/legacy_page_url_management_spec.rb +1 -1
  115. data/spec/features/admin/link_overlay_spec.rb +7 -7
  116. data/spec/features/admin/locale_select_feature_spec.rb +5 -2
  117. data/spec/features/admin/modules_integration_spec.rb +1 -1
  118. data/spec/features/admin/page_creation_feature_spec.rb +3 -2
  119. data/spec/features/admin/page_editing_feature_spec.rb +66 -79
  120. data/spec/features/admin/picture_library_integration_spec.rb +8 -8
  121. data/spec/features/admin/resources_integration_spec.rb +21 -21
  122. data/spec/features/admin/tinymce_feature_spec.rb +36 -0
  123. data/spec/features/navigation_spec.rb +1 -1
  124. data/spec/features/page_feature_spec.rb +34 -34
  125. data/spec/features/picture_security_spec.rb +4 -4
  126. data/spec/features/security_spec.rb +1 -1
  127. data/spec/features/translation_integration_spec.rb +7 -7
  128. data/spec/helpers/admin/base_helper_spec.rb +51 -49
  129. data/spec/helpers/admin/contents_helper_spec.rb +11 -11
  130. data/spec/helpers/admin/elements_helper_spec.rb +20 -17
  131. data/spec/helpers/admin/essences_helper_spec.rb +42 -11
  132. data/spec/helpers/admin/navigation_helper_spec.rb +64 -54
  133. data/spec/helpers/admin/pages_helper_spec.rb +10 -10
  134. data/spec/helpers/admin/tags_helper_spec.rb +16 -16
  135. data/spec/helpers/base_helper_spec.rb +11 -11
  136. data/spec/helpers/elements_block_helper_spec.rb +24 -24
  137. data/spec/helpers/elements_helper_spec.rb +46 -46
  138. data/spec/helpers/essences_helper_spec.rb +90 -17
  139. data/spec/helpers/pages_helper_spec.rb +53 -53
  140. data/spec/helpers/picture_url_helpers_spec.rb +6 -6
  141. data/spec/helpers/url_helper_spec.rb +32 -32
  142. data/spec/libraries/config_spec.rb +9 -9
  143. data/spec/libraries/controller_actions_spec.rb +14 -14
  144. data/spec/libraries/i18n_spec.rb +6 -6
  145. data/spec/libraries/kaminari/scoped_pagination_url_helper_spec.rb +4 -4
  146. data/spec/libraries/modules_spec.rb +4 -4
  147. data/spec/libraries/mount_point_spec.rb +13 -13
  148. data/spec/libraries/page_layout_spec.rb +24 -24
  149. data/spec/libraries/permissions_spec.rb +97 -80
  150. data/spec/libraries/resource_spec.rb +37 -37
  151. data/spec/libraries/resources_helper_spec.rb +19 -19
  152. data/spec/libraries/shell_spec.rb +17 -17
  153. data/spec/libraries/template_tracker_spec.rb +14 -14
  154. data/spec/libraries/tinymce_spec.rb +8 -8
  155. data/spec/libraries/userstamp_spec.rb +2 -2
  156. data/spec/mailers/messages_spec.rb +4 -4
  157. data/spec/models/attachment_spec.rb +86 -30
  158. data/spec/models/cell_spec.rb +10 -10
  159. data/spec/models/content_spec.rb +106 -46
  160. data/spec/models/element_spec.rb +94 -115
  161. data/spec/models/essence_date_spec.rb +1 -1
  162. data/spec/models/essence_file_spec.rb +4 -4
  163. data/spec/models/essence_picture_spec.rb +56 -25
  164. data/spec/models/essence_richtext_spec.rb +1 -1
  165. data/spec/models/essence_text_spec.rb +7 -7
  166. data/spec/models/language_spec.rb +12 -12
  167. data/spec/models/legacy_page_url_spec.rb +2 -2
  168. data/spec/models/message_spec.rb +12 -5
  169. data/spec/models/page_spec.rb +259 -235
  170. data/spec/models/picture_spec.rb +72 -166
  171. data/spec/models/site_spec.rb +41 -41
  172. data/spec/models/tag_spec.rb +7 -7
  173. data/spec/routing/api_routing_spec.rb +150 -0
  174. data/spec/routing/routing_spec.rb +28 -28
  175. data/spec/spec_helper.rb +6 -5
  176. data/spec/support/hint_examples.rb +5 -5
  177. data/spec/support/transformation_examples.rb +173 -0
  178. data/spec/tasks/helpers_spec.rb +29 -29
  179. data/spec/views/essences/essence_boolean_editor_spec.rb +32 -0
  180. data/spec/views/essences/essence_boolean_view_spec.rb +2 -2
  181. data/spec/views/essences/essence_date_view_spec.rb +1 -1
  182. data/spec/views/essences/essence_link_view_spec.rb +11 -0
  183. data/spec/views/essences/essence_picture_view_spec.rb +56 -11
  184. data/spec/views/essences/essence_richtext_view_spec.rb +12 -0
  185. data/spec/views/essences/essence_text_view_spec.rb +12 -0
  186. data/vendor/assets/javascripts/tinymce/langs/de.js +20 -2
  187. data/vendor/assets/javascripts/tinymce/langs/fr.js +14 -1
  188. data/vendor/assets/javascripts/tinymce/langs/nl.js +22 -4
  189. data/vendor/assets/javascripts/tinymce/plugins/anchor/plugin.min.js +1 -1
  190. data/vendor/assets/javascripts/tinymce/plugins/autoresize/plugin.min.js +1 -1
  191. data/vendor/assets/javascripts/tinymce/plugins/charmap/plugin.min.js +1 -1
  192. data/vendor/assets/javascripts/tinymce/plugins/code/plugin.min.js +1 -1
  193. data/vendor/assets/javascripts/tinymce/plugins/directionality/plugin.min.js +1 -1
  194. data/vendor/assets/javascripts/tinymce/plugins/fullscreen/plugin.min.js +1 -1
  195. data/vendor/assets/javascripts/tinymce/plugins/hr/plugin.min.js +1 -1
  196. data/vendor/assets/javascripts/tinymce/plugins/link/plugin.min.js +1 -1
  197. data/vendor/assets/javascripts/tinymce/plugins/paste/plugin.min.js +1 -1
  198. data/vendor/assets/javascripts/tinymce/plugins/tabfocus/plugin.min.js +1 -1
  199. data/vendor/assets/javascripts/tinymce/plugins/table/plugin.min.js +1 -1
  200. data/vendor/assets/javascripts/tinymce/themes/modern/theme.min.js +1 -1
  201. data/vendor/assets/javascripts/tinymce/tinymce.min.js +11 -10
  202. metadata +72 -42
  203. data/app/views/alchemy/messages/contact_form_mail.es.text.erb +0 -12
  204. data/config/locales/alchemy.es.yml +0 -958
  205. data/config/locales/alchemy.ru.yml +0 -837
  206. data/config/locales/simple_form.es.yml +0 -6
  207. data/config/locales/simple_form.ru.yml +0 -25
  208. data/lib/rails/generators/alchemy/scaffold/files/alchemy.es.yml +0 -31
  209. data/vendor/assets/javascripts/tinymce/langs/es.js +0 -197
  210. data/vendor/assets/javascripts/tinymce/langs/ru.js +0 -197
@@ -0,0 +1,73 @@
1
+ require 'spec_helper'
2
+
3
+ module Alchemy
4
+ describe API::ContentsController do
5
+ describe '#index' do
6
+ let!(:page) { create(:page) }
7
+ let!(:element) { create(:element, page: page) }
8
+ let!(:content) { create(:content, element: element) }
9
+
10
+ it "returns all public contents as json objects" do
11
+ get :index, format: :json
12
+ expect(response.status).to eq(200)
13
+ expect(response.content_type).to eq('application/json')
14
+ expect(response.body).to_not eq('{"contents":[]}')
15
+ end
16
+
17
+ context 'with element_id' do
18
+ let!(:other_element) { create(:element, page: page) }
19
+ let!(:other_content) { create(:content, element: other_element) }
20
+
21
+ it "returns only contents from this element" do
22
+ get :index, element_id: element.id, format: :json
23
+ expect(response.status).to eq(200)
24
+ expect(response.content_type).to eq('application/json')
25
+ expect(response.body).to_not eq('{"contents":[]}')
26
+ expect(response.body).to_not match(/element_id\"\:#{other_element.id}/)
27
+ end
28
+ end
29
+ end
30
+
31
+ describe '#show' do
32
+ context 'with no other params given' do
33
+ let(:page) { build_stubbed(:page) }
34
+ let(:element) { build_stubbed(:element, page: page, position: 1) }
35
+ let(:content) { build_stubbed(:content, element: element) }
36
+
37
+ before do
38
+ expect(Content).to receive(:find).and_return(content)
39
+ end
40
+
41
+ it "responds to json" do
42
+ get :show, id: content.id, format: :json
43
+ expect(response.status).to eq(200)
44
+ expect(response.content_type).to eq('application/json')
45
+ end
46
+
47
+ context 'requesting an restricted content' do
48
+ let(:page) { build_stubbed(:page, restricted: true) }
49
+
50
+ it "responds with 403" do
51
+ get :show, id: content.id, format: :json
52
+ expect(response.content_type).to eq('application/json')
53
+ expect(response.status).to eq(403)
54
+ end
55
+ end
56
+ end
57
+
58
+ context 'with element_id and name params given' do
59
+ let!(:page) { create(:page) }
60
+ let!(:element) { create(:element, page: page) }
61
+ let!(:content) { create(:content, element: element) }
62
+
63
+ it 'returns the named content from element with given id.' do
64
+ get :show, element_id: element.id, name: content.name, format: :json
65
+ expect(response.status).to eq(200)
66
+ expect(response.content_type).to eq('application/json')
67
+ expect(response.body).to match(/element_id\"\:#{element.id}/)
68
+ expect(response.body).to match(/name\"\:\"#{content.name}\"/)
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,69 @@
1
+ require 'spec_helper'
2
+
3
+ module Alchemy
4
+ describe API::ElementsController do
5
+ describe '#index' do
6
+ let!(:page) { create(:public_page) }
7
+ let!(:element) { create(:element, page: page) }
8
+
9
+ it "returns all public elements as json objects" do
10
+ get :index, format: :json
11
+ expect(response.status).to eq(200)
12
+ expect(response.content_type).to eq('application/json')
13
+ expect(response.body).to_not eq('{"elements":[]}')
14
+ end
15
+
16
+ context 'with page_id param' do
17
+ let!(:other_page) { create(:public_page) }
18
+ let!(:other_element) { create(:element, page: other_page) }
19
+
20
+ it "returns only elements from this element" do
21
+ get :index, page_id: other_page.id, format: :json
22
+ expect(response.status).to eq(200)
23
+ expect(response.content_type).to eq('application/json')
24
+ expect(response.body).to_not eq('{"elements":[]}')
25
+ expect(response.body).to match(/page_id\"\:#{other_page.id}/)
26
+ expect(response.body).to_not match(/page_id\"\:#{page.id}/)
27
+ end
28
+ end
29
+
30
+ context 'with named param' do
31
+ let!(:other_element) { create(:element, page: page, name: 'news') }
32
+
33
+ it "returns only elements named like this." do
34
+ get :index, named: 'news', format: :json
35
+ expect(response.status).to eq(200)
36
+ expect(response.content_type).to eq('application/json')
37
+ expect(response.body).to_not eq('{"elements":[]}')
38
+ expect(response.body).to match(/name\"\:\"#{other_element.name}\"/)
39
+ expect(response.body).to_not match(/name\"\:\"#{element.name}\"/)
40
+ end
41
+ end
42
+ end
43
+
44
+ describe '#show' do
45
+ let(:page) { build_stubbed(:page) }
46
+ let(:element) { build_stubbed(:element, page: page, position: 1) }
47
+
48
+ before do
49
+ expect(Element).to receive(:find).and_return(element)
50
+ end
51
+
52
+ it "responds to json" do
53
+ get :show, id: element.id, format: :json
54
+ expect(response.status).to eq(200)
55
+ expect(response.content_type).to eq('application/json')
56
+ end
57
+
58
+ context 'requesting an restricted element' do
59
+ let(:page) { build_stubbed(:page, restricted: true) }
60
+
61
+ it "responds with 403" do
62
+ get :show, id: element.id, format: :json
63
+ expect(response.content_type).to eq('application/json')
64
+ expect(response.status).to eq(403)
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,86 @@
1
+ require 'spec_helper'
2
+
3
+ module Alchemy
4
+ describe API::PagesController do
5
+
6
+ describe '#index' do
7
+ let!(:page) { create(:public_page) }
8
+
9
+ it "returns all public pages as json objects" do
10
+ get :index, format: :json
11
+ expect(response.status).to eq(200)
12
+ expect(response.content_type).to eq('application/json')
13
+ expect(response.body).to_not eq('{"pages":[]}')
14
+ end
15
+
16
+ context 'with page_layout' do
17
+ let!(:other_page) { create(:public_page, page_layout: 'news') }
18
+
19
+ it "returns only pages from this element" do
20
+ get :index, page_layout: 'news', format: :json
21
+ expect(response.status).to eq(200)
22
+ expect(response.content_type).to eq('application/json')
23
+ expect(response.body).to_not eq('{"pages":[]}')
24
+ expect(response.body).to_not match(/page_layout\"\:#{page.page_layout}/)
25
+ end
26
+ end
27
+ end
28
+
29
+ describe '#show' do
30
+ context 'for existing page' do
31
+ let(:page) { build_stubbed(:public_page) }
32
+
33
+ before do
34
+ expect(Page).to receive(:find_by).and_return(page)
35
+ end
36
+
37
+ it "responds to json" do
38
+ get :show, urlname: page.urlname, format: :json
39
+ expect(response.status).to eq(200)
40
+ expect(response.content_type).to eq('application/json')
41
+ end
42
+
43
+ context 'requesting an restricted page' do
44
+ let(:page) { build_stubbed(:page, restricted: true) }
45
+
46
+ it "responds with 403" do
47
+ get :show, urlname: page.urlname, format: :json
48
+ expect(response.content_type).to eq('application/json')
49
+ expect(response.status).to eq(403)
50
+ expect(response.body).to eq('{"error":"Not authorized"}')
51
+ end
52
+ end
53
+
54
+ context 'requesting a not public page' do
55
+ let(:page) { build_stubbed(:page) }
56
+
57
+ it "responds with 403" do
58
+ get :show, urlname: page.urlname, format: :json
59
+ expect(response.content_type).to eq('application/json')
60
+ expect(response.status).to eq(403)
61
+ expect(response.body).to eq('{"error":"Not authorized"}')
62
+ end
63
+ end
64
+ end
65
+
66
+ context 'requesting an unknown page' do
67
+ it "responds with 404" do
68
+ get :show, urlname: 'not-existing', format: :json
69
+ expect(response.content_type).to eq('application/json')
70
+ expect(response.status).to eq(404)
71
+ expect(response.body).to eq('{"error":"Record not found"}')
72
+ end
73
+ end
74
+
75
+ context 'requesting a page with id' do
76
+ let(:page) { create(:public_page) }
77
+
78
+ it "responds with json" do
79
+ get :show, id: page.id, format: :json
80
+ expect(response.status).to eq(200)
81
+ expect(response.content_type).to eq('application/json')
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
@@ -10,21 +10,21 @@ module Alchemy
10
10
 
11
11
  context 'with restricted attachment' do
12
12
  before do
13
- attachment.stub(:restricted?).and_return(true)
14
- Attachment.stub(:find).and_return(attachment)
13
+ allow(attachment).to receive(:restricted?).and_return(true)
14
+ allow(Attachment).to receive(:find).and_return(attachment)
15
15
  end
16
16
 
17
17
  context 'as anonymous user' do
18
18
  it "should not be possible to download attachments from restricted pages" do
19
19
  get :download, :id => attachment.id
20
- response.status.should == 302
21
- response.should redirect_to(Alchemy.login_path)
20
+ expect(response.status).to eq(302)
21
+ expect(response).to redirect_to(Alchemy.login_path)
22
22
  end
23
23
 
24
24
  it "should not be possible to see attachments from restricted pages" do
25
25
  get :show, :id => attachment.id
26
- response.status.should == 302
27
- response.should redirect_to(Alchemy.login_path)
26
+ expect(response.status).to eq(302)
27
+ expect(response).to redirect_to(Alchemy.login_path)
28
28
  end
29
29
  end
30
30
 
@@ -33,12 +33,12 @@ module Alchemy
33
33
 
34
34
  it "should be possible to download attachments from restricted pages" do
35
35
  get :download, :id => attachment.id
36
- response.status.should == 200
36
+ expect(response.status).to eq(200)
37
37
  end
38
38
 
39
39
  it "should be possible to see attachments from restricted pages" do
40
40
  get :show, :id => attachment.id
41
- response.status.should == 200
41
+ expect(response.status).to eq(200)
42
42
  end
43
43
  end
44
44
  end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ module Alchemy
4
+ describe ContentsController do
5
+ let(:page) { build_stubbed(:page) }
6
+ let(:element) { build_stubbed(:element, page: page, position: 1) }
7
+ let(:content) { build_stubbed(:content, element: element) }
8
+
9
+ describe '#show' do
10
+ before { expect(Content).to receive(:find).and_return(content) }
11
+
12
+ context "requested for json format" do
13
+ it "should render json response but warns about deprecation" do
14
+ expect(ActiveSupport::Deprecation).to receive(:warn)
15
+ get :show, id: content.id, format: :json
16
+ expect(response.status).to eq(200)
17
+ expect(response.content_type).to eq('application/json')
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -8,10 +8,9 @@ module Alchemy
8
8
  let(:restricted_element) { FactoryGirl.create(:element, :page => restricted_page, :name => 'download') }
9
9
 
10
10
  describe '#show' do
11
-
12
11
  it "should render available elements" do
13
12
  get :show, :id => element.id
14
- response.status.should == 200
13
+ expect(response.status).to eq(200)
15
14
  end
16
15
 
17
16
  it "should raise ActiveRecord::RecordNotFound error for trashed elements" do
@@ -35,11 +34,18 @@ module Alchemy
35
34
 
36
35
  it "should render elements of restricted pages" do
37
36
  get :show, :id => restricted_element.id
38
- response.status.should == 200
37
+ expect(response.status).to eq(200)
39
38
  end
40
39
  end
41
40
 
41
+ context "requested for json format" do
42
+ it "should render json response but warns about deprecation" do
43
+ expect(ActiveSupport::Deprecation).to receive(:warn)
44
+ get :show, id: element.id, format: :json
45
+ expect(response.status).to eq(200)
46
+ expect(response.content_type).to eq('application/json')
47
+ end
48
+ end
42
49
  end
43
-
44
50
  end
45
51
  end
@@ -2,10 +2,11 @@ require 'spec_helper'
2
2
 
3
3
  module Alchemy
4
4
  describe MessagesController do
5
+ let(:page) { mock_model('Page') }
5
6
 
6
7
  before do
7
8
  controller.instance_variable_set(:@page, page)
8
- controller.stub(:get_page).and_return(page)
9
+ allow(controller).to receive(:get_page).and_return(page)
9
10
  end
10
11
 
11
12
  describe "#index" do
@@ -25,7 +26,7 @@ module Alchemy
25
26
 
26
27
  describe "#create" do
27
28
  before do
28
- controller.stub(:params).and_return({message: {email: ''}})
29
+ allow(controller).to receive(:params).and_return({message: {email: ''}})
29
30
  end
30
31
 
31
32
  let(:page) { mock_model('Page', get_language_root: mock_model('Page')) }
@@ -39,14 +40,14 @@ module Alchemy
39
40
  context "if validation of message" do
40
41
 
41
42
  before do
42
- Element.stub(:find_by).and_return(element)
43
- element.stub(:ingredient).with(:success_page).and_return('thank-you')
44
- Message.any_instance.stub(:contact_form_id).and_return(1)
43
+ allow(Element).to receive(:find_by).and_return(element)
44
+ allow(element).to receive(:ingredient).with(:success_page).and_return('thank-you')
45
+ allow_any_instance_of(Message).to receive(:contact_form_id).and_return(1)
45
46
  end
46
47
 
47
48
  context "failed" do
48
49
  before do
49
- Message.any_instance.stub(:valid?).and_return(false)
50
+ allow_any_instance_of(Message).to receive(:valid?).and_return(false)
50
51
  end
51
52
 
52
53
  it "should render 'alchemy/pages/show' template" do
@@ -56,38 +57,38 @@ module Alchemy
56
57
 
57
58
  context "succeeded" do
58
59
  before do
59
- Message.any_instance.stub(:valid?).and_return(true)
60
- Messages.stub_chain(:contact_form_mail, :deliver).and_return(true)
60
+ allow_any_instance_of(Message).to receive(:valid?).and_return(true)
61
+ allow(Messages).to receive(:contact_form_mail).and_return double(deliver: true)
61
62
  end
62
63
 
63
64
  it "Messages should call Messages#contact_form_mail to send the email" do
64
- Messages.should_receive(:contact_form_mail)
65
+ expect(Messages).to receive(:contact_form_mail)
65
66
  post :create
66
67
  end
67
68
 
68
69
  describe '#mail_to' do
69
70
  context "with element having mail_to ingredient" do
70
71
  before do
71
- element.stub(:ingredient).with(:mail_to).and_return('peter@schroeder.de')
72
+ allow(element).to receive(:ingredient).with(:mail_to).and_return('peter@schroeder.de')
72
73
  message
73
- Message.stub(:new).and_return(message)
74
+ allow(Message).to receive(:new).and_return(message)
74
75
  end
75
76
 
76
77
  it "returns the ingredient" do
77
- Messages.should_receive(:contact_form_mail).with(message, 'peter@schroeder.de', '', '')
78
+ expect(Messages).to receive(:contact_form_mail).with(message, 'peter@schroeder.de', '', '')
78
79
  post :create
79
80
  end
80
81
  end
81
82
 
82
83
  context "with element having no mail_to ingredient" do
83
84
  before do
84
- element.stub(:ingredient).with(:mail_to).and_return(nil)
85
+ allow(element).to receive(:ingredient).with(:mail_to).and_return(nil)
85
86
  message
86
- Message.stub(:new).and_return(message)
87
+ allow(Message).to receive(:new).and_return(message)
87
88
  end
88
89
 
89
90
  it "returns the config value" do
90
- Messages.should_receive(:contact_form_mail).with(message, 'your.mail@your-domain.com', '', '')
91
+ expect(Messages).to receive(:contact_form_mail).with(message, 'your.mail@your-domain.com', '', '')
91
92
  post :create
92
93
  end
93
94
  end
@@ -96,26 +97,26 @@ module Alchemy
96
97
  describe '#mail_from' do
97
98
  context "with element having mail_from ingredient" do
98
99
  before do
99
- element.stub(:ingredient).with(:mail_from).and_return('peter@schroeder.de')
100
+ allow(element).to receive(:ingredient).with(:mail_from).and_return('peter@schroeder.de')
100
101
  message
101
- Message.stub(:new).and_return(message)
102
+ allow(Message).to receive(:new).and_return(message)
102
103
  end
103
104
 
104
105
  it "returns the ingredient" do
105
- Messages.should_receive(:contact_form_mail).with(message, '', 'peter@schroeder.de', '')
106
+ expect(Messages).to receive(:contact_form_mail).with(message, '', 'peter@schroeder.de', '')
106
107
  post :create
107
108
  end
108
109
  end
109
110
 
110
111
  context "with element having no mail_from ingredient" do
111
112
  before do
112
- element.stub(:ingredient).with(:mail_from).and_return(nil)
113
+ allow(element).to receive(:ingredient).with(:mail_from).and_return(nil)
113
114
  message
114
- Message.stub(:new).and_return(message)
115
+ allow(Message).to receive(:new).and_return(message)
115
116
  end
116
117
 
117
118
  it "returns the config value" do
118
- Messages.should_receive(:contact_form_mail).with(message, '', 'your.mail@your-domain.com', '')
119
+ expect(Messages).to receive(:contact_form_mail).with(message, '', 'your.mail@your-domain.com', '')
119
120
  post :create
120
121
  end
121
122
  end
@@ -124,26 +125,26 @@ module Alchemy
124
125
  describe '#subject' do
125
126
  context "with element having subject ingredient" do
126
127
  before do
127
- element.stub(:ingredient).with(:subject).and_return('A new message')
128
+ allow(element).to receive(:ingredient).with(:subject).and_return('A new message')
128
129
  message
129
- Message.stub(:new).and_return(message)
130
+ allow(Message).to receive(:new).and_return(message)
130
131
  end
131
132
 
132
133
  it "returns the ingredient" do
133
- Messages.should_receive(:contact_form_mail).with(message, '', '', 'A new message')
134
+ expect(Messages).to receive(:contact_form_mail).with(message, '', '', 'A new message')
134
135
  post :create
135
136
  end
136
137
  end
137
138
 
138
139
  context "with element having no subject ingredient" do
139
140
  before do
140
- element.stub(:ingredient).with(:subject).and_return(nil)
141
+ allow(element).to receive(:ingredient).with(:subject).and_return(nil)
141
142
  message
142
- Message.stub(:new).and_return(message)
143
+ allow(Message).to receive(:new).and_return(message)
143
144
  end
144
145
 
145
146
  it "returns the config value" do
146
- Messages.should_receive(:contact_form_mail).with(message, '', '', 'A new contact form message')
147
+ expect(Messages).to receive(:contact_form_mail).with(message, '', '', 'A new contact form message')
147
148
  post :create
148
149
  end
149
150
  end
@@ -152,7 +153,7 @@ module Alchemy
152
153
  describe "#redirect_to_success_page" do
153
154
  context "if 'success_page' ingredient of element is set with urlname" do
154
155
  before do
155
- element.stub(:ingredient).with(:success_page).and_return('success-page')
156
+ allow(element).to receive(:ingredient).with(:success_page).and_return('success-page')
156
157
  end
157
158
 
158
159
  it "should redirect to the given urlname" do
@@ -162,13 +163,13 @@ module Alchemy
162
163
 
163
164
  context "if 'success_page' ingredient of element is not set" do
164
165
  before do
165
- element.stub(:ingredient).with(:success_page).and_return(nil)
166
+ allow(element).to receive(:ingredient).with(:success_page).and_return(nil)
166
167
  end
167
168
 
168
169
  context "but mailer_config['forward_to_page'] is true and mailer_config['mail_success_page'] is set" do
169
170
  before do
170
- controller.stub(:mailer_config).and_return({'forward_to_page' => true, 'mail_success_page' => 'mailer-config-success-page'})
171
- Page.stub_chain(:find_by, :urlname).and_return('mailer-config-success-page')
171
+ allow(controller).to receive(:mailer_config).and_return({'forward_to_page' => true, 'mail_success_page' => 'mailer-config-success-page'})
172
+ allow(Page).to receive(:find_by).and_return double(urlname: 'mailer-config-success-page')
172
173
  end
173
174
 
174
175
  it "redirect to the given success page" do
@@ -180,12 +181,12 @@ module Alchemy
180
181
  let(:language) { mock_model('Language', code: 'en', pages: double(find_by: build_stubbed(:page))) }
181
182
 
182
183
  before do
183
- controller.stub(:mailer_config).and_return({})
184
- Language.stub_chain(:current_root_page, :urlname).and_return('lang-root')
184
+ allow(controller).to receive(:mailer_config).and_return({})
185
+ allow(Language).to receive(:current_root_page).and_return double(urlname: 'lang-root')
185
186
  end
186
187
 
187
188
  it "should redirect to the language root page" do
188
- Language.stub(current: language)
189
+ expect(Language).to receive(:current).and_return(language)
189
190
  expect(post :create).to redirect_to(show_page_path(urlname: 'lang-root'))
190
191
  end
191
192
  end