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
|
@@ -32,7 +32,6 @@ module Alchemy
|
|
|
32
32
|
template "page_layouts.yml.tt", "#{Rails.root}/config/alchemy/page_layouts.yml"
|
|
33
33
|
copy_file "#{current_path}/files/alchemy.en.yml", "#{Rails.root}/config/locales/alchemy.en.yml"
|
|
34
34
|
copy_file "#{current_path}/files/alchemy.de.yml", "#{Rails.root}/config/locales/alchemy.de.yml"
|
|
35
|
-
copy_file "#{current_path}/files/alchemy.es.yml", "#{Rails.root}/config/locales/alchemy.es.yml"
|
|
36
35
|
copy_file "#{current_path}/files/application.html.erb", "#{Rails.root}/app/views/layouts/application.html.erb"
|
|
37
36
|
copy_file "#{current_path}/files/_standard.html.erb", "#{Rails.root}/app/views/alchemy/page_layouts/_standard.html.erb"
|
|
38
37
|
copy_file "#{current_path}/files/_article_view.html.erb", "#{Rails.root}/app/views/alchemy/elements/_article_view.html.erb"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# This rails template installs Alchemy and all depending gems.
|
|
2
2
|
require File.expand_path('../../../alchemy/version', __FILE__)
|
|
3
3
|
|
|
4
|
-
gem 'alchemy_cms', github: 'magiclabs/alchemy_cms', branch: '
|
|
5
|
-
gem 'alchemy-devise', github: 'magiclabs/alchemy-devise', branch: '
|
|
4
|
+
gem 'alchemy_cms', github: 'magiclabs/alchemy_cms', branch: 'master'
|
|
5
|
+
gem 'alchemy-devise', github: 'magiclabs/alchemy-devise', branch: 'master'
|
|
6
6
|
gem 'capistrano', '~> 2.15.5', group: 'development'
|
data/lib/tasks/alchemy/db.rake
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
require 'shellwords'
|
|
1
2
|
require 'alchemy/seeder'
|
|
2
3
|
require 'alchemy/tasks/helpers'
|
|
3
4
|
include Alchemy::Tasks::Helpers
|
|
4
5
|
|
|
5
6
|
namespace :alchemy do
|
|
6
7
|
namespace :db do
|
|
7
|
-
|
|
8
8
|
desc "Seeds your database with essential data for Alchemy CMS."
|
|
9
9
|
task :seed => :environment do
|
|
10
10
|
Alchemy::Seeder.seed!
|
|
@@ -17,5 +17,11 @@ namespace :alchemy do
|
|
|
17
17
|
system "#{dump_cmd}#{dump_store}"
|
|
18
18
|
end
|
|
19
19
|
|
|
20
|
+
desc "Imports the database from STDIN (Pass DUMP_FILENAME to read the dump from file)."
|
|
21
|
+
task :import => :environment do
|
|
22
|
+
dump_store = ENV['DUMP_FILENAME'] ? "cat #{ENV['DUMP_FILENAME']}" : "echo #{Shellwords.escape(STDIN.read)}"
|
|
23
|
+
import_cmd = database_import_command(database_config['adapter'])
|
|
24
|
+
system "#{dump_store} | #{import_cmd}"
|
|
25
|
+
end
|
|
20
26
|
end
|
|
21
27
|
end
|
|
@@ -10,13 +10,13 @@ module Alchemy
|
|
|
10
10
|
|
|
11
11
|
describe "#index" do
|
|
12
12
|
it "should always paginate the records" do
|
|
13
|
-
Attachment.
|
|
13
|
+
expect(Attachment).to receive(:find_paginated)
|
|
14
14
|
get :index
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
context "when params[:tagged_with] is set" do
|
|
18
18
|
it "should filter the records by tags" do
|
|
19
|
-
Attachment.
|
|
19
|
+
expect(Attachment).to receive(:tagged_with).and_return(Attachment.all)
|
|
20
20
|
get :index, tagged_with: "pdf"
|
|
21
21
|
end
|
|
22
22
|
end
|
|
@@ -26,10 +26,10 @@ module Alchemy
|
|
|
26
26
|
|
|
27
27
|
context "is set" do
|
|
28
28
|
it "it renders the archive_overlay partial" do
|
|
29
|
-
Content.
|
|
29
|
+
expect(Content).to receive(:find_by).and_return(content)
|
|
30
30
|
get :index, {content_id: content.id}
|
|
31
31
|
expect(response).to render_template(partial: '_archive_overlay')
|
|
32
|
-
assigns(:content).
|
|
32
|
+
expect(assigns(:content)).to eq(content)
|
|
33
33
|
end
|
|
34
34
|
end
|
|
35
35
|
|
|
@@ -44,7 +44,7 @@ module Alchemy
|
|
|
44
44
|
|
|
45
45
|
describe '#show' do
|
|
46
46
|
before do
|
|
47
|
-
Attachment.
|
|
47
|
+
expect(Attachment).to receive(:find).and_return(attachment)
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
it "renders the show template" do
|
|
@@ -56,18 +56,18 @@ module Alchemy
|
|
|
56
56
|
describe "#new" do
|
|
57
57
|
context "in overlay" do
|
|
58
58
|
before do
|
|
59
|
-
controller.
|
|
60
|
-
Content.
|
|
59
|
+
expect(controller).to receive(:in_overlay?).and_return(true)
|
|
60
|
+
expect(Content).to receive(:find_by).and_return(mock_model('Content'))
|
|
61
61
|
end
|
|
62
62
|
|
|
63
63
|
it "should set @while_assigning to true" do
|
|
64
64
|
get :new
|
|
65
|
-
assigns(:while_assigning).
|
|
65
|
+
expect(assigns(:while_assigning)).to eq(true)
|
|
66
66
|
end
|
|
67
67
|
|
|
68
68
|
it "should set @swap to params[:swap]" do
|
|
69
69
|
get :new, swap: 'true'
|
|
70
|
-
assigns(:swap).
|
|
70
|
+
expect(assigns(:swap)).to eq('true')
|
|
71
71
|
end
|
|
72
72
|
end
|
|
73
73
|
end
|
|
@@ -80,8 +80,8 @@ module Alchemy
|
|
|
80
80
|
|
|
81
81
|
context 'with passing validations' do
|
|
82
82
|
before do
|
|
83
|
-
Attachment.
|
|
84
|
-
attachment.
|
|
83
|
+
expect(Attachment).to receive(:new).and_return(attachment)
|
|
84
|
+
expect(attachment).to receive(:save).and_return(true)
|
|
85
85
|
end
|
|
86
86
|
|
|
87
87
|
context 'if inside of archive overlay' do
|
|
@@ -89,36 +89,36 @@ module Alchemy
|
|
|
89
89
|
let(:content) { mock_model('Content') }
|
|
90
90
|
|
|
91
91
|
before do
|
|
92
|
-
Content.
|
|
92
|
+
expect(Content).to receive(:find_by).and_return(content)
|
|
93
93
|
end
|
|
94
94
|
|
|
95
95
|
it "assigns lots of instance variables" do
|
|
96
96
|
subject
|
|
97
|
-
assigns(:options).
|
|
98
|
-
assigns(:while_assigning).
|
|
99
|
-
assigns(:content).
|
|
100
|
-
assigns(:swap).
|
|
97
|
+
expect(assigns(:options)).to eq({})
|
|
98
|
+
expect(assigns(:while_assigning)).to be_truthy
|
|
99
|
+
expect(assigns(:content)).to eq(content)
|
|
100
|
+
expect(assigns(:swap)).to eq(nil)
|
|
101
101
|
end
|
|
102
102
|
end
|
|
103
103
|
|
|
104
104
|
it "renders json response with success message" do
|
|
105
105
|
subject
|
|
106
|
-
response.content_type.
|
|
107
|
-
response.status.
|
|
106
|
+
expect(response.content_type).to eq('application/json')
|
|
107
|
+
expect(response.status).to eq(201)
|
|
108
108
|
json = JSON.parse(response.body)
|
|
109
|
-
json.
|
|
110
|
-
json.
|
|
109
|
+
expect(json).to have_key('growl_message')
|
|
110
|
+
expect(json).to have_key('files')
|
|
111
111
|
end
|
|
112
112
|
end
|
|
113
113
|
|
|
114
114
|
context 'without passing validations' do
|
|
115
115
|
it "renders json response with error message" do
|
|
116
116
|
subject
|
|
117
|
-
response.content_type.
|
|
118
|
-
response.status.
|
|
117
|
+
expect(response.content_type).to eq('application/json')
|
|
118
|
+
expect(response.status).to eq(422)
|
|
119
119
|
json = JSON.parse(response.body)
|
|
120
|
-
json.
|
|
121
|
-
json.
|
|
120
|
+
expect(json).to have_key('growl_message')
|
|
121
|
+
expect(json).to have_key('files')
|
|
122
122
|
end
|
|
123
123
|
end
|
|
124
124
|
end
|
|
@@ -129,27 +129,27 @@ module Alchemy
|
|
|
129
129
|
let(:attachment) { build_stubbed(:attachment) }
|
|
130
130
|
|
|
131
131
|
before do
|
|
132
|
-
Attachment.
|
|
132
|
+
expect(Attachment).to receive(:find).and_return(attachment)
|
|
133
133
|
end
|
|
134
134
|
|
|
135
135
|
context 'with passing validations' do
|
|
136
136
|
before do
|
|
137
|
-
attachment.
|
|
137
|
+
expect(attachment).to receive(:update_attributes).and_return(true)
|
|
138
138
|
end
|
|
139
139
|
|
|
140
140
|
it "redirects to index path" do
|
|
141
|
-
|
|
141
|
+
is_expected.to redirect_to admin_attachments_path
|
|
142
142
|
end
|
|
143
143
|
end
|
|
144
144
|
|
|
145
145
|
context 'with failing validations' do
|
|
146
146
|
before do
|
|
147
|
-
attachment.
|
|
148
|
-
attachment.
|
|
147
|
+
expect(attachment).to receive(:update_attributes).and_return(false)
|
|
148
|
+
expect(attachment).to receive(:errors).and_return double(empty?: false)
|
|
149
149
|
end
|
|
150
150
|
|
|
151
151
|
it "renders edit form" do
|
|
152
|
-
|
|
152
|
+
is_expected.to render_template(:edit)
|
|
153
153
|
end
|
|
154
154
|
end
|
|
155
155
|
end
|
|
@@ -158,22 +158,22 @@ module Alchemy
|
|
|
158
158
|
let(:attachment) { build_stubbed(:attachment) }
|
|
159
159
|
|
|
160
160
|
before do
|
|
161
|
-
Attachment.
|
|
161
|
+
expect(Attachment).to receive(:find).and_return(attachment)
|
|
162
162
|
end
|
|
163
163
|
|
|
164
164
|
it "destroys the attachment and sets and success message" do
|
|
165
|
-
attachment.
|
|
165
|
+
expect(attachment).to receive(:destroy)
|
|
166
166
|
xhr :delete, :destroy
|
|
167
|
-
assigns(:attachment).
|
|
168
|
-
assigns(:url).
|
|
169
|
-
flash[:notice].
|
|
167
|
+
expect(assigns(:attachment)).to eq(attachment)
|
|
168
|
+
expect(assigns(:url)).not_to be_blank
|
|
169
|
+
expect(flash[:notice]).not_to be_blank
|
|
170
170
|
end
|
|
171
171
|
end
|
|
172
172
|
|
|
173
173
|
describe "#download" do
|
|
174
174
|
before do
|
|
175
|
-
Attachment.
|
|
176
|
-
controller.
|
|
175
|
+
expect(Attachment).to receive(:find).with("#{attachment.id}").and_return(attachment)
|
|
176
|
+
allow(controller).to receive(:render).and_return(nil)
|
|
177
177
|
end
|
|
178
178
|
|
|
179
179
|
it "should assign @attachment with Attachment found by id" do
|
|
@@ -182,7 +182,7 @@ module Alchemy
|
|
|
182
182
|
end
|
|
183
183
|
|
|
184
184
|
it "should send the data to the browser" do
|
|
185
|
-
controller.
|
|
185
|
+
expect(controller).to receive(:send_data)
|
|
186
186
|
get :download, id: attachment.id
|
|
187
187
|
end
|
|
188
188
|
end
|
|
@@ -6,7 +6,7 @@ describe Alchemy::Admin::BaseController do
|
|
|
6
6
|
subject { controller.send(:options_from_params) }
|
|
7
7
|
|
|
8
8
|
context "params[:options] is a JSON string" do
|
|
9
|
-
before { controller.
|
|
9
|
+
before { expect(controller).to receive(:params).at_least(:once).and_return(options: '{"hallo":"World"}') }
|
|
10
10
|
|
|
11
11
|
it "parses the string into an object" do
|
|
12
12
|
expect(subject).to be_an_instance_of(Hash)
|
|
@@ -15,7 +15,7 @@ describe Alchemy::Admin::BaseController do
|
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
context "params[:options] is already an object" do
|
|
18
|
-
before { controller.
|
|
18
|
+
before { expect(controller).to receive(:params).at_least(:once).and_return(options: {hallo: "World"}) }
|
|
19
19
|
|
|
20
20
|
it "parses the string into an object" do
|
|
21
21
|
expect(subject).to be_an_instance_of(Hash)
|
|
@@ -23,7 +23,7 @@ describe Alchemy::Admin::BaseController do
|
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
context "params[:options] is not present" do
|
|
26
|
-
before { controller.
|
|
26
|
+
before { expect(controller).to receive(:params).at_least(:once).and_return({}) }
|
|
27
27
|
|
|
28
28
|
it "returns ampty object" do
|
|
29
29
|
expect(subject).to be_an_instance_of(Hash)
|
|
@@ -36,22 +36,22 @@ describe Alchemy::Admin::BaseController do
|
|
|
36
36
|
subject { controller.send(:raise_exception?) }
|
|
37
37
|
|
|
38
38
|
context 'in test mode' do
|
|
39
|
-
before { Rails.env.
|
|
40
|
-
it {
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
context 'in page preview' do
|
|
44
|
-
before { controller.stub(is_page_preview?: true) }
|
|
45
|
-
it { should be_true }
|
|
39
|
+
before { expect(Rails.env).to receive(:test?).and_return true }
|
|
40
|
+
it { is_expected.to be_truthy }
|
|
46
41
|
end
|
|
47
42
|
|
|
48
43
|
context 'not in test mode' do
|
|
49
|
-
before { Rails.env.
|
|
50
|
-
it {
|
|
44
|
+
before { expect(Rails.env).to receive(:test?).and_return false }
|
|
45
|
+
it { is_expected.to be_falsey }
|
|
46
|
+
|
|
47
|
+
context 'and in page preview' do
|
|
48
|
+
before { expect(controller).to receive(:is_page_preview?).and_return true }
|
|
49
|
+
it { is_expected.to be_truthy }
|
|
50
|
+
end
|
|
51
51
|
|
|
52
52
|
context 'and not in page preview' do
|
|
53
|
-
before { controller.
|
|
54
|
-
it {
|
|
53
|
+
before { expect(controller).to receive(:is_page_preview?).and_return false }
|
|
54
|
+
it { is_expected.to be_falsey }
|
|
55
55
|
end
|
|
56
56
|
end
|
|
57
57
|
end
|
|
@@ -59,15 +59,15 @@ describe Alchemy::Admin::BaseController do
|
|
|
59
59
|
describe '#is_page_preview?' do
|
|
60
60
|
subject { controller.send(:is_page_preview?) }
|
|
61
61
|
|
|
62
|
-
it {
|
|
62
|
+
it { is_expected.to be_falsey }
|
|
63
63
|
|
|
64
64
|
context 'is pages controller and show action' do
|
|
65
65
|
before do
|
|
66
|
-
controller.
|
|
67
|
-
controller.
|
|
66
|
+
expect(controller).to receive(:controller_path).and_return('alchemy/admin/pages')
|
|
67
|
+
expect(controller).to receive(:action_name).and_return('show')
|
|
68
68
|
end
|
|
69
69
|
|
|
70
|
-
it {
|
|
70
|
+
it { is_expected.to be_truthy }
|
|
71
71
|
end
|
|
72
72
|
end
|
|
73
73
|
|
|
@@ -9,28 +9,33 @@ module Alchemy
|
|
|
9
9
|
before do
|
|
10
10
|
sign_in(admin_user)
|
|
11
11
|
session[:alchemy_clipboard] = {}
|
|
12
|
-
Element.stub(find: element)
|
|
13
12
|
end
|
|
14
13
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
session[:alchemy_clipboard]['elements'].should == [{'id' => element.id.to_s, 'action' => 'copy'}]
|
|
14
|
+
context 'for elements' do
|
|
15
|
+
before do
|
|
16
|
+
expect(Element).to receive(:find).and_return(element)
|
|
19
17
|
end
|
|
20
18
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
19
|
+
describe "#insert" do
|
|
20
|
+
it "should hold element ids" do
|
|
21
|
+
xhr :post, :insert, {remarkable_type: 'elements', remarkable_id: element.id}
|
|
22
|
+
expect(session[:alchemy_clipboard]['elements']).to eq([{'id' => element.id.to_s, 'action' => 'copy'}])
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "should not have the same element twice" do
|
|
26
|
+
session[:alchemy_clipboard]['elements'] = [{'id' => element.id.to_s, 'action' => 'copy'}]
|
|
27
|
+
xhr :post, :insert, {remarkable_type: 'elements', remarkable_id: element.id}
|
|
28
|
+
expect(session[:alchemy_clipboard]['elements'].collect { |e| e['id'] }).not_to eq([element.id, element.id])
|
|
29
|
+
end
|
|
25
30
|
end
|
|
26
|
-
end
|
|
27
31
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
describe "#delete" do
|
|
33
|
+
it "should remove element ids from clipboard" do
|
|
34
|
+
session[:alchemy_clipboard]['elements'] = [{'id' => element.id.to_s, 'action' => 'copy'}]
|
|
35
|
+
session[:alchemy_clipboard]['elements'] << {'id' => another_element.id.to_s, 'action' => 'copy'}
|
|
36
|
+
xhr :delete, :remove, {remarkable_type: 'elements', remarkable_id: another_element.id}
|
|
37
|
+
expect(session[:alchemy_clipboard]['elements']).to eq([{'id' => element.id.to_s, 'action' => 'copy'}])
|
|
38
|
+
end
|
|
34
39
|
end
|
|
35
40
|
end
|
|
36
41
|
|
|
@@ -39,7 +44,7 @@ module Alchemy
|
|
|
39
44
|
it "should clear the elements clipboard" do
|
|
40
45
|
session[:alchemy_clipboard]['elements'] = [{'id' => element.id.to_s}]
|
|
41
46
|
xhr :delete, :clear, {remarkable_type: 'elements'}
|
|
42
|
-
session[:alchemy_clipboard]['elements'].
|
|
47
|
+
expect(session[:alchemy_clipboard]['elements']).to be_empty
|
|
43
48
|
end
|
|
44
49
|
end
|
|
45
50
|
|
|
@@ -47,7 +52,7 @@ module Alchemy
|
|
|
47
52
|
it "should clear the pages clipboard" do
|
|
48
53
|
session[:alchemy_clipboard]['pages'] = [{'id' => public_page.id.to_s}]
|
|
49
54
|
xhr :delete, :clear, {remarkable_type: 'pages'}
|
|
50
|
-
session[:alchemy_clipboard]['pages'].
|
|
55
|
+
expect(session[:alchemy_clipboard]['pages']).to be_empty
|
|
51
56
|
end
|
|
52
57
|
end
|
|
53
58
|
end
|
|
@@ -7,48 +7,54 @@ module Alchemy
|
|
|
7
7
|
|
|
8
8
|
before do
|
|
9
9
|
sign_in(admin_user)
|
|
10
|
-
Element.stub(find: element)
|
|
11
10
|
end
|
|
12
11
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
it "creates a content from name" do
|
|
17
|
-
Content.should_receive(:create_from_scratch).and_return(content)
|
|
18
|
-
xhr :post, :create, {content: {element_id: element.id, name: 'headline'}}
|
|
12
|
+
context 'with element_id parameter' do
|
|
13
|
+
before do
|
|
14
|
+
expect(Element).to receive(:find).and_return(element)
|
|
19
15
|
end
|
|
20
16
|
|
|
21
|
-
it "creates a content from essence_type" do
|
|
22
|
-
Content.should_receive(:create_from_scratch).and_return(content)
|
|
23
|
-
xhr :post, :create, {content: {element_id: element.id, essence_type: 'EssencePicture'}}
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
17
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
18
|
+
describe '#create' do
|
|
19
|
+
let(:element) { build_stubbed(:element, name: 'headline') }
|
|
20
|
+
|
|
21
|
+
it "creates a content from name" do
|
|
22
|
+
expect(Content).to receive(:create_from_scratch).and_return(content)
|
|
23
|
+
xhr :post, :create, {content: {element_id: element.id, name: 'headline'}}
|
|
24
|
+
end
|
|
31
25
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
26
|
+
it "creates a content from essence_type" do
|
|
27
|
+
expect(Content).to receive(:create_from_scratch).and_return(content)
|
|
28
|
+
xhr :post, :create, {content: {element_id: element.id, essence_type: 'EssencePicture'}}
|
|
29
|
+
end
|
|
35
30
|
end
|
|
36
31
|
|
|
37
|
-
context '
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
32
|
+
context 'inside a picture gallery' do
|
|
33
|
+
let(:attributes) do
|
|
34
|
+
{content: {element_id: element.id, essence_type: 'Alchemy::EssencePicture'}, options: {grouped: 'true'}}
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "adds it into the gallery editor" do
|
|
38
|
+
xhr :post, :create, attributes
|
|
39
|
+
expect(assigns(:content_dom_id)).to eq("#add_picture_#{element.id}")
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
context 'with picture_id given' do
|
|
43
|
+
it "assigns the picture" do
|
|
44
|
+
expect_any_instance_of(Content).to receive(:update_essence).with(picture_id: '1')
|
|
45
|
+
xhr :post, :create, attributes.merge(picture_id: '1')
|
|
46
|
+
end
|
|
41
47
|
end
|
|
42
48
|
end
|
|
43
49
|
end
|
|
44
50
|
|
|
45
51
|
describe '#update' do
|
|
46
52
|
before do
|
|
47
|
-
Content.
|
|
53
|
+
expect(Content).to receive(:find).and_return(content)
|
|
48
54
|
end
|
|
49
55
|
|
|
50
56
|
it "should update a content via ajax" do
|
|
51
|
-
content.essence.
|
|
57
|
+
expect(content.essence).to receive(:update).with('ingredient' => 'Peters Petshop')
|
|
52
58
|
xhr :post, :update, {id: content.id, content: {ingredient: 'Peters Petshop'}}
|
|
53
59
|
end
|
|
54
60
|
end
|
|
@@ -58,8 +64,8 @@ module Alchemy
|
|
|
58
64
|
it "should reorder the contents" do
|
|
59
65
|
content_ids = element.contents.essence_texts.pluck(:id)
|
|
60
66
|
xhr :post, :order, {content_ids: content_ids.reverse}
|
|
61
|
-
response.status.
|
|
62
|
-
element.contents.essence_texts.pluck(:id).
|
|
67
|
+
expect(response.status).to eq(200)
|
|
68
|
+
expect(element.contents.essence_texts.pluck(:id)).to eq(content_ids.reverse)
|
|
63
69
|
end
|
|
64
70
|
end
|
|
65
71
|
end
|