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.
- checksums.yaml +4 -4
- data/.travis.yml +4 -6
- data/Gemfile +4 -7
- data/README.md +207 -115
- data/alchemy_cms.gemspec +10 -9
- data/app/assets/javascripts/alchemy/alchemy.dragndrop.js.coffee +2 -2
- data/app/assets/javascripts/alchemy/alchemy.image_cropper.js.coffee +2 -2
- data/app/assets/javascripts/alchemy/alchemy.js +6 -7
- data/app/assets/javascripts/alchemy/alchemy.translations.js.coffee +1 -43
- data/app/assets/javascripts/alchemy/alchemy.uploader.js.coffee +1 -1
- data/app/assets/stylesheets/alchemy/_mixins.scss +2 -1
- data/app/assets/stylesheets/alchemy/buttons.scss +0 -5
- data/app/assets/stylesheets/alchemy/dialogs.scss +1 -0
- data/app/assets/stylesheets/alchemy/frame.scss +9 -12
- data/app/assets/stylesheets/tinymce/skins/alchemy/content.min.css.scss +11 -2
- data/app/assets/stylesheets/tinymce/skins/alchemy/skin.min.css.scss +9 -1
- data/app/controllers/alchemy/admin/attachments_controller.rb +2 -4
- data/app/controllers/alchemy/admin/essence_pictures_controller.rb +34 -38
- data/app/controllers/alchemy/api/base_controller.rb +19 -0
- data/app/controllers/alchemy/api/contents_controller.rb +35 -0
- data/app/controllers/alchemy/api/elements_controller.rb +29 -0
- data/app/controllers/alchemy/api/pages_controller.rb +32 -0
- data/app/controllers/alchemy/contents_controller.rb +1 -0
- data/app/controllers/alchemy/elements_controller.rb +5 -2
- data/app/controllers/alchemy/pages_controller.rb +4 -1
- data/app/controllers/alchemy/pictures_controller.rb +4 -36
- data/app/helpers/alchemy/admin/essences_helper.rb +5 -2
- data/app/helpers/alchemy/essences_helper.rb +14 -1
- data/app/models/alchemy/content.rb +32 -4
- data/app/models/alchemy/element.rb +2 -16
- data/app/models/alchemy/element/presenters.rb +2 -2
- data/app/models/alchemy/essence_file.rb +5 -0
- data/app/models/alchemy/essence_picture.rb +12 -8
- data/app/models/alchemy/picture.rb +1 -74
- data/app/models/alchemy/picture/transformations.rb +249 -0
- data/app/serializers/alchemy/content_serializer.rb +3 -10
- data/app/serializers/alchemy/element_serializer.rb +6 -3
- data/app/serializers/alchemy/legacy_element_serializer.rb +17 -0
- data/app/views/alchemy/admin/dashboard/_sites.html.erb +14 -4
- data/app/views/alchemy/admin/essence_pictures/crop.html.erb +8 -5
- data/app/views/alchemy/admin/pages/edit.html.erb +9 -9
- data/app/views/alchemy/admin/pictures/info.html.erb +2 -3
- data/app/views/alchemy/admin/tags/edit.html.erb +1 -1
- data/app/views/alchemy/essences/_essence_boolean_editor.html.erb +8 -7
- data/app/views/alchemy/essences/_essence_boolean_view.html.erb +3 -3
- data/app/views/alchemy/essences/_essence_date_editor.html.erb +8 -2
- data/app/views/alchemy/essences/_essence_date_view.html.erb +10 -8
- data/app/views/alchemy/essences/_essence_file_editor.html.erb +48 -53
- data/app/views/alchemy/essences/_essence_file_view.html.erb +5 -5
- data/app/views/alchemy/essences/_essence_html_editor.html.erb +5 -4
- data/app/views/alchemy/essences/_essence_link_editor.html.erb +17 -15
- data/app/views/alchemy/essences/_essence_link_view.html.erb +11 -7
- data/app/views/alchemy/essences/_essence_picture_editor.html.erb +4 -2
- data/app/views/alchemy/essences/_essence_picture_view.html.erb +4 -2
- data/app/views/alchemy/essences/_essence_richtext_view.html.erb +5 -4
- data/app/views/alchemy/essences/_essence_select_editor.html.erb +22 -32
- data/app/views/alchemy/essences/_essence_text_view.html.erb +7 -6
- data/app/views/alchemy/essences/shared/_essence_picture_tools.html.erb +1 -1
- data/app/views/layouts/alchemy/admin.html.erb +5 -3
- data/config/initializers/inflections.rb +3 -0
- data/config/initializers/simple_form.rb +1 -1
- data/config/locales/alchemy.en.yml +0 -1
- data/config/routes.rb +14 -0
- data/lib/alchemy/capistrano.rb +71 -0
- data/lib/alchemy/engine.rb +0 -3
- data/lib/alchemy/essence.rb +1 -1
- data/lib/alchemy/permissions.rb +19 -5
- data/lib/alchemy/picture_attributes.rb +1 -1
- data/lib/alchemy/test_support/auth_helpers.rb +1 -1
- data/lib/alchemy/test_support/essence_shared_examples.rb +37 -22
- data/lib/alchemy/test_support/integration_helpers.rb +1 -1
- data/lib/alchemy/tinymce.rb +21 -4
- data/lib/alchemy/upgrader/three_point_one.rb +43 -0
- data/lib/alchemy/upgrader/three_point_zero.rb +13 -0
- data/lib/alchemy/version.rb +2 -1
- data/lib/rails/generators/alchemy/module/module_generator.rb +30 -0
- data/lib/rails/generators/alchemy/module/templates/ability.rb.tt +11 -0
- data/lib/rails/generators/alchemy/module/templates/controller.rb.tt +2 -0
- data/lib/rails/generators/alchemy/module/templates/module_config.rb.tt +15 -0
- data/lib/rails/generators/alchemy/scaffold/scaffold_generator.rb +0 -1
- data/lib/rails/templates/alchemy.rb +2 -2
- data/lib/tasks/alchemy/db.rake +7 -1
- data/spec/controllers/admin/attachments_controller_spec.rb +38 -38
- data/spec/controllers/admin/base_controller_spec.rb +18 -18
- data/spec/controllers/admin/clipboard_controller_spec.rb +23 -18
- data/spec/controllers/admin/contents_controller_spec.rb +33 -27
- data/spec/controllers/admin/dashboard_controller_spec.rb +14 -14
- data/spec/controllers/admin/elements_controller_spec.rb +125 -105
- data/spec/controllers/admin/essence_files_controller_spec.rb +6 -7
- data/spec/controllers/admin/essence_pictures_controller_spec.rb +52 -42
- data/spec/controllers/admin/languages_controller_spec.rb +3 -3
- data/spec/controllers/admin/pages_controller_spec.rb +81 -71
- data/spec/controllers/admin/pictures_controller_spec.rb +69 -72
- data/spec/controllers/admin/resources_controller_spec.rb +5 -5
- data/spec/controllers/admin/trash_controller_spec.rb +15 -12
- data/spec/controllers/alchemy/admin/tags_controller_spec.rb +8 -8
- data/spec/controllers/alchemy/api/contents_controller_spec.rb +73 -0
- data/spec/controllers/alchemy/api/elements_controller_spec.rb +69 -0
- data/spec/controllers/alchemy/api/pages_controller_spec.rb +86 -0
- data/spec/controllers/attachments_controller_spec.rb +8 -8
- data/spec/controllers/contents_controller_spec.rb +22 -0
- data/spec/controllers/elements_controller_spec.rb +10 -4
- data/spec/controllers/messages_controller_spec.rb +35 -34
- data/spec/controllers/pages_controller_spec.rb +37 -28
- data/spec/controllers/pictures_controller_spec.rb +90 -23
- data/spec/dummy/app/models/dummy_user.rb +0 -4
- data/spec/dummy/app/views/alchemy/elements/_all_you_can_eat_editor.html.erb +11 -0
- data/spec/dummy/config/alchemy/elements.yml +22 -1
- data/spec/dummy/config/alchemy/page_layouts.yml +4 -0
- data/spec/dummy/config/application.rb +2 -1
- data/spec/dummy/config/environments/test.rb +3 -1
- data/spec/features/admin/dashboard_spec.rb +41 -6
- data/spec/features/admin/language_tree_feature_spec.rb +3 -3
- data/spec/features/admin/legacy_page_url_management_spec.rb +1 -1
- data/spec/features/admin/link_overlay_spec.rb +7 -7
- data/spec/features/admin/locale_select_feature_spec.rb +5 -2
- data/spec/features/admin/modules_integration_spec.rb +1 -1
- data/spec/features/admin/page_creation_feature_spec.rb +3 -2
- data/spec/features/admin/page_editing_feature_spec.rb +66 -79
- data/spec/features/admin/picture_library_integration_spec.rb +8 -8
- data/spec/features/admin/resources_integration_spec.rb +21 -21
- data/spec/features/admin/tinymce_feature_spec.rb +36 -0
- data/spec/features/navigation_spec.rb +1 -1
- data/spec/features/page_feature_spec.rb +34 -34
- data/spec/features/picture_security_spec.rb +4 -4
- data/spec/features/security_spec.rb +1 -1
- data/spec/features/translation_integration_spec.rb +7 -7
- data/spec/helpers/admin/base_helper_spec.rb +51 -49
- data/spec/helpers/admin/contents_helper_spec.rb +11 -11
- data/spec/helpers/admin/elements_helper_spec.rb +20 -17
- data/spec/helpers/admin/essences_helper_spec.rb +42 -11
- data/spec/helpers/admin/navigation_helper_spec.rb +64 -54
- data/spec/helpers/admin/pages_helper_spec.rb +10 -10
- data/spec/helpers/admin/tags_helper_spec.rb +16 -16
- data/spec/helpers/base_helper_spec.rb +11 -11
- data/spec/helpers/elements_block_helper_spec.rb +24 -24
- data/spec/helpers/elements_helper_spec.rb +46 -46
- data/spec/helpers/essences_helper_spec.rb +90 -17
- data/spec/helpers/pages_helper_spec.rb +53 -53
- data/spec/helpers/picture_url_helpers_spec.rb +6 -6
- data/spec/helpers/url_helper_spec.rb +32 -32
- data/spec/libraries/config_spec.rb +9 -9
- data/spec/libraries/controller_actions_spec.rb +14 -14
- data/spec/libraries/i18n_spec.rb +6 -6
- data/spec/libraries/kaminari/scoped_pagination_url_helper_spec.rb +4 -4
- data/spec/libraries/modules_spec.rb +4 -4
- data/spec/libraries/mount_point_spec.rb +13 -13
- data/spec/libraries/page_layout_spec.rb +24 -24
- data/spec/libraries/permissions_spec.rb +97 -80
- data/spec/libraries/resource_spec.rb +37 -37
- data/spec/libraries/resources_helper_spec.rb +19 -19
- data/spec/libraries/shell_spec.rb +17 -17
- data/spec/libraries/template_tracker_spec.rb +14 -14
- data/spec/libraries/tinymce_spec.rb +8 -8
- data/spec/libraries/userstamp_spec.rb +2 -2
- data/spec/mailers/messages_spec.rb +4 -4
- data/spec/models/attachment_spec.rb +86 -30
- data/spec/models/cell_spec.rb +10 -10
- data/spec/models/content_spec.rb +106 -46
- data/spec/models/element_spec.rb +94 -115
- data/spec/models/essence_date_spec.rb +1 -1
- data/spec/models/essence_file_spec.rb +4 -4
- data/spec/models/essence_picture_spec.rb +56 -25
- data/spec/models/essence_richtext_spec.rb +1 -1
- data/spec/models/essence_text_spec.rb +7 -7
- data/spec/models/language_spec.rb +12 -12
- data/spec/models/legacy_page_url_spec.rb +2 -2
- data/spec/models/message_spec.rb +12 -5
- data/spec/models/page_spec.rb +259 -235
- data/spec/models/picture_spec.rb +72 -166
- data/spec/models/site_spec.rb +41 -41
- data/spec/models/tag_spec.rb +7 -7
- data/spec/routing/api_routing_spec.rb +150 -0
- data/spec/routing/routing_spec.rb +28 -28
- data/spec/spec_helper.rb +6 -5
- data/spec/support/hint_examples.rb +5 -5
- data/spec/support/transformation_examples.rb +173 -0
- data/spec/tasks/helpers_spec.rb +29 -29
- data/spec/views/essences/essence_boolean_editor_spec.rb +32 -0
- data/spec/views/essences/essence_boolean_view_spec.rb +2 -2
- data/spec/views/essences/essence_date_view_spec.rb +1 -1
- data/spec/views/essences/essence_link_view_spec.rb +11 -0
- data/spec/views/essences/essence_picture_view_spec.rb +56 -11
- data/spec/views/essences/essence_richtext_view_spec.rb +12 -0
- data/spec/views/essences/essence_text_view_spec.rb +12 -0
- data/vendor/assets/javascripts/tinymce/langs/de.js +20 -2
- data/vendor/assets/javascripts/tinymce/langs/fr.js +14 -1
- data/vendor/assets/javascripts/tinymce/langs/nl.js +22 -4
- data/vendor/assets/javascripts/tinymce/plugins/anchor/plugin.min.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/autoresize/plugin.min.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/charmap/plugin.min.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/code/plugin.min.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/directionality/plugin.min.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/fullscreen/plugin.min.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/hr/plugin.min.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/link/plugin.min.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/paste/plugin.min.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/tabfocus/plugin.min.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/table/plugin.min.js +1 -1
- data/vendor/assets/javascripts/tinymce/themes/modern/theme.min.js +1 -1
- data/vendor/assets/javascripts/tinymce/tinymce.min.js +11 -10
- metadata +72 -42
- data/app/views/alchemy/messages/contact_form_mail.es.text.erb +0 -12
- data/config/locales/alchemy.es.yml +0 -958
- data/config/locales/alchemy.ru.yml +0 -837
- data/config/locales/simple_form.es.yml +0 -6
- data/config/locales/simple_form.ru.yml +0 -25
- data/lib/rails/generators/alchemy/scaffold/files/alchemy.es.yml +0 -31
- data/vendor/assets/javascripts/tinymce/langs/es.js +0 -197
- 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.
|
|
14
|
-
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.
|
|
21
|
-
response.
|
|
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.
|
|
27
|
-
response.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
43
|
-
element.
|
|
44
|
-
Message.
|
|
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.
|
|
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.
|
|
60
|
-
Messages.
|
|
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.
|
|
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.
|
|
72
|
+
allow(element).to receive(:ingredient).with(:mail_to).and_return('peter@schroeder.de')
|
|
72
73
|
message
|
|
73
|
-
Message.
|
|
74
|
+
allow(Message).to receive(:new).and_return(message)
|
|
74
75
|
end
|
|
75
76
|
|
|
76
77
|
it "returns the ingredient" do
|
|
77
|
-
Messages.
|
|
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.
|
|
85
|
+
allow(element).to receive(:ingredient).with(:mail_to).and_return(nil)
|
|
85
86
|
message
|
|
86
|
-
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.
|
|
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.
|
|
100
|
+
allow(element).to receive(:ingredient).with(:mail_from).and_return('peter@schroeder.de')
|
|
100
101
|
message
|
|
101
|
-
Message.
|
|
102
|
+
allow(Message).to receive(:new).and_return(message)
|
|
102
103
|
end
|
|
103
104
|
|
|
104
105
|
it "returns the ingredient" do
|
|
105
|
-
Messages.
|
|
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.
|
|
113
|
+
allow(element).to receive(:ingredient).with(:mail_from).and_return(nil)
|
|
113
114
|
message
|
|
114
|
-
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.
|
|
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.
|
|
128
|
+
allow(element).to receive(:ingredient).with(:subject).and_return('A new message')
|
|
128
129
|
message
|
|
129
|
-
Message.
|
|
130
|
+
allow(Message).to receive(:new).and_return(message)
|
|
130
131
|
end
|
|
131
132
|
|
|
132
133
|
it "returns the ingredient" do
|
|
133
|
-
Messages.
|
|
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.
|
|
141
|
+
allow(element).to receive(:ingredient).with(:subject).and_return(nil)
|
|
141
142
|
message
|
|
142
|
-
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.
|
|
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.
|
|
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.
|
|
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.
|
|
171
|
-
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.
|
|
184
|
-
Language.
|
|
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.
|
|
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
|