alchemy_cms 3.2.0.beta → 3.2.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +661 -863
- data/README.md +5 -63
- data/app/assets/javascripts/alchemy/alchemy.base.js.coffee +11 -10
- data/app/assets/javascripts/alchemy/alchemy.initializer.js.coffee +6 -0
- data/app/assets/stylesheets/alchemy/_extends.scss +0 -6
- data/app/assets/stylesheets/alchemy/_mixins.scss +6 -0
- data/app/assets/stylesheets/alchemy/buttons.scss +1 -1
- data/app/assets/stylesheets/alchemy/elements.scss +1 -1
- data/app/assets/stylesheets/alchemy/menubar.scss +1 -1
- data/app/assets/stylesheets/alchemy/selects.scss +5 -1
- data/app/assets/stylesheets/alchemy/upload.scss +1 -1
- data/app/controllers/alchemy/admin/pages_controller.rb +1 -1
- data/app/controllers/alchemy/base_controller.rb +4 -57
- data/app/controllers/alchemy/messages_controller.rb +2 -2
- data/app/controllers/alchemy/pages_controller.rb +22 -31
- data/app/controllers/alchemy/pictures_controller.rb +2 -2
- data/app/helpers/alchemy/admin/base_helper.rb +7 -0
- data/app/helpers/alchemy/admin/elements_helper.rb +31 -15
- data/app/helpers/alchemy/admin/pages_helper.rb +17 -0
- data/app/helpers/alchemy/base_helper.rb +0 -28
- data/app/helpers/alchemy/pages_helper.rb +18 -12
- data/app/helpers/alchemy/url_helper.rb +2 -2
- data/app/models/alchemy/cell.rb +1 -1
- data/app/models/alchemy/content/factory.rb +12 -6
- data/app/models/alchemy/element.rb +3 -3
- data/app/models/alchemy/element/definitions.rb +1 -1
- data/app/models/alchemy/element_to_page.rb +7 -0
- data/app/models/alchemy/language.rb +1 -1
- data/app/models/alchemy/page.rb +8 -1
- data/app/models/alchemy/page/page_cells.rb +2 -2
- data/app/models/alchemy/page/page_elements.rb +23 -5
- data/app/models/alchemy/page/page_natures.rb +3 -3
- data/app/models/alchemy/page/page_scopes.rb +1 -1
- data/app/models/alchemy/picture.rb +1 -1
- data/app/views/alchemy/admin/pages/_create_language_form.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_form.html.erb +1 -1
- data/app/views/alchemy/admin/pictures/_picture_to_assign.html.erb +1 -1
- data/app/views/alchemy/breadcrumb/_page.html.erb +3 -2
- data/app/views/alchemy/breadcrumb/_separator.html.erb +1 -0
- data/app/views/alchemy/breadcrumb/_wrapper.html.erb +13 -0
- data/app/views/alchemy/language_links/_language.html.erb +1 -1
- data/app/views/alchemy/navigation/_link.html.erb +1 -1
- data/app/views/alchemy/pages/show.rss.builder +5 -7
- data/app/views/layouts/alchemy/admin.html.erb +5 -0
- data/config/routes.rb +13 -10
- data/lib/alchemy/configuration_methods.rb +29 -0
- data/lib/alchemy/controller_actions.rb +12 -4
- data/lib/alchemy/engine.rb +3 -0
- data/lib/alchemy/errors.rb +1 -1
- data/lib/alchemy/essence.rb +14 -12
- data/lib/alchemy/on_page_layout.rb +58 -0
- data/lib/alchemy/page_layout.rb +1 -1
- data/lib/alchemy/permissions.rb +21 -16
- data/lib/alchemy/routing_constraints.rb +49 -0
- data/lib/alchemy/seeder.rb +4 -2
- data/lib/alchemy/ssl_protection.rb +30 -0
- data/lib/alchemy/test_support/essence_shared_examples.rb +118 -25
- data/lib/alchemy/test_support/factories.rb +5 -8
- data/lib/alchemy/test_support/integration_helpers.rb +16 -10
- data/lib/alchemy/upgrader/three_point_two.rb +34 -4
- data/lib/alchemy/version.rb +1 -1
- data/lib/rails/generators/alchemy/{scaffold → install}/files/_article_editor.html.erb +0 -0
- data/lib/rails/generators/alchemy/{scaffold → install}/files/_article_view.html.erb +0 -0
- data/lib/rails/generators/alchemy/{scaffold → install}/files/_standard.html.erb +0 -0
- data/lib/rails/generators/alchemy/{scaffold → install}/files/alchemy.de.yml +0 -0
- data/lib/rails/generators/alchemy/{scaffold → install}/files/alchemy.elements.css.scss +0 -0
- data/lib/rails/generators/alchemy/{scaffold → install}/files/alchemy.en.yml +0 -0
- data/lib/rails/generators/alchemy/{scaffold → install}/files/alchemy.es.yml +0 -0
- data/lib/rails/generators/alchemy/{scaffold → install}/files/application.html.erb +0 -0
- data/lib/rails/generators/alchemy/install/install_generator.rb +69 -0
- data/lib/rails/generators/alchemy/{scaffold/files/elements.yml → install/templates/elements.yml.tt} +2 -0
- data/lib/rails/generators/alchemy/{scaffold → install}/templates/page_layouts.yml.tt +2 -0
- data/lib/rails/generators/alchemy/views/views_generator.rb +41 -0
- data/lib/rails/templates/alchemy.rb +2 -2
- data/lib/tasks/alchemy/db.rake +0 -5
- data/lib/tasks/alchemy/install.rake +10 -5
- data/lib/tasks/alchemy/tidy.rake +2 -0
- data/spec/controllers/admin/attachments_controller_spec.rb +1 -1
- data/spec/controllers/admin/clipboard_controller_spec.rb +1 -1
- data/spec/controllers/admin/contents_controller_spec.rb +1 -1
- data/spec/controllers/admin/dashboard_controller_spec.rb +2 -2
- data/spec/controllers/admin/elements_controller_spec.rb +1 -1
- data/spec/controllers/admin/essence_files_controller_spec.rb +1 -1
- data/spec/controllers/admin/essence_pictures_controller_spec.rb +1 -1
- data/spec/controllers/admin/languages_controller_spec.rb +1 -1
- data/spec/controllers/admin/layoutpages_controller_spec.rb +1 -1
- data/spec/controllers/admin/pages_controller_spec.rb +4 -4
- data/spec/controllers/admin/pictures_controller_spec.rb +1 -1
- data/spec/controllers/admin/resources_controller_spec.rb +1 -1
- data/spec/controllers/admin/trash_controller_spec.rb +1 -1
- data/spec/controllers/alchemy/admin/tags_controller_spec.rb +1 -1
- data/spec/controllers/attachments_controller_spec.rb +1 -1
- data/spec/controllers/base_controller_spec.rb +22 -0
- data/spec/controllers/elements_controller_spec.rb +1 -1
- data/spec/controllers/pages_controller_spec.rb +15 -16
- data/spec/controllers/pictures_controller_spec.rb +212 -162
- data/spec/dummy/app/controllers/login_controller.rb +5 -0
- data/spec/dummy/app/models/dummy_model.rb +3 -0
- data/spec/dummy/config/alchemy/cells.yml +4 -1
- data/spec/dummy/config/alchemy/elements.yml +8 -0
- data/spec/dummy/config/alchemy/page_layouts.yml +5 -1
- data/spec/dummy/config/routes.rb +1 -2
- data/spec/dummy/db/migrate/20150412103152_create_dummy_model.rb +7 -0
- data/spec/dummy/db/schema.rb +30 -26
- data/spec/features/admin/dashboard_spec.rb +11 -9
- data/spec/features/admin/language_tree_feature_spec.rb +5 -6
- data/spec/features/admin/legacy_page_url_management_spec.rb +1 -1
- data/spec/features/admin/link_overlay_spec.rb +1 -1
- data/spec/features/admin/locale_select_feature_spec.rb +1 -1
- data/spec/features/admin/modules_integration_spec.rb +1 -1
- data/spec/features/admin/navigation_feature_spec.rb +1 -1
- data/spec/features/admin/page_creation_feature_spec.rb +1 -1
- data/spec/features/admin/page_editing_feature_spec.rb +3 -3
- data/spec/features/admin/picture_library_integration_spec.rb +1 -1
- data/spec/features/admin/resources_integration_spec.rb +1 -1
- data/spec/features/admin/site_select_feature_spec.rb +32 -0
- data/spec/features/admin/tinymce_feature_spec.rb +1 -3
- data/spec/features/page_feature_spec.rb +36 -27
- data/spec/features/security_spec.rb +1 -1
- data/spec/features/translation_integration_spec.rb +3 -3
- data/spec/helpers/admin/elements_helper_spec.rb +103 -26
- data/spec/helpers/admin/pages_helper_spec.rb +32 -1
- data/spec/helpers/base_helper_spec.rb +0 -45
- data/spec/helpers/pages_helper_spec.rb +18 -17
- data/spec/helpers/url_helper_spec.rb +8 -5
- data/spec/libraries/controller_actions_spec.rb +2 -2
- data/spec/libraries/on_page_layout_spec.rb +112 -0
- data/spec/libraries/page_layout_spec.rb +5 -1
- data/spec/libraries/permissions_spec.rb +13 -15
- data/spec/models/cell_spec.rb +4 -0
- data/spec/models/content_spec.rb +6 -0
- data/spec/models/dummy_model_spec.rb +11 -0
- data/spec/models/element_spec.rb +6 -1
- data/spec/models/element_to_page_spec.rb +14 -0
- data/spec/models/page_spec.rb +111 -19
- data/spec/routing/routing_spec.rb +120 -101
- data/spec/spec_helper.rb +3 -3
- metadata +36 -21
- data/app/views/alchemy/breadcrumb/_spacer.html.erb +0 -1
- data/lib/alchemy/capistrano.rb +0 -230
- data/lib/alchemy/test_support/auth_helpers.rb +0 -35
- data/lib/rails/generators/alchemy/deploy_script/deploy_script_generator.rb +0 -90
- data/lib/rails/generators/alchemy/deploy_script/templates/deploy.rb.tt +0 -113
- data/lib/rails/generators/alchemy/scaffold/scaffold_generator.rb +0 -63
- data/spec/dummy/app/controllers/errors_controller.rb +0 -5
@@ -17,49 +17,6 @@ module Alchemy
|
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
-
describe "#configuration" do
|
21
|
-
it "should return certain configuration options" do
|
22
|
-
allow(Config).to receive(:show).and_return({"some_option" => true})
|
23
|
-
expect(helper.configuration(:some_option)).to eq(true)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
describe "#multi_language?" do
|
28
|
-
context "if more than one published language exists" do
|
29
|
-
it "should return true" do
|
30
|
-
allow(Alchemy::Language).to receive(:published).and_return double(count: 2)
|
31
|
-
expect(helper.multi_language?).to eq(true)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
context "if less than two published languages exists" do
|
36
|
-
it "should return false" do
|
37
|
-
allow(Alchemy::Language).to receive(:published).and_return double(count: 1)
|
38
|
-
expect(helper.multi_language?).to eq(false)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
describe '#breadcrumb' do
|
44
|
-
let(:lang_root) { Page.language_root_for(Language.default.id) }
|
45
|
-
let(:parent) { FactoryGirl.create(:public_page) }
|
46
|
-
let(:page) { FactoryGirl.create(:public_page, parent_id: parent.id) }
|
47
|
-
|
48
|
-
it "returns an array of all parents including self" do
|
49
|
-
expect(helper.breadcrumb(page)).to eq([lang_root, parent, page])
|
50
|
-
end
|
51
|
-
|
52
|
-
it "does not include the root page" do
|
53
|
-
expect(helper.breadcrumb(page)).not_to include(Page.root)
|
54
|
-
end
|
55
|
-
|
56
|
-
context "with current page nil" do
|
57
|
-
it "should return an empty array" do
|
58
|
-
expect(helper.breadcrumb(nil)).to eq([])
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
20
|
describe '#page_or_find' do
|
64
21
|
let(:page) { FactoryGirl.create(:public_page) }
|
65
22
|
|
@@ -83,8 +40,6 @@ module Alchemy
|
|
83
40
|
expect(helper.page_or_find(page)).to eq(page)
|
84
41
|
end
|
85
42
|
end
|
86
|
-
|
87
43
|
end
|
88
|
-
|
89
44
|
end
|
90
45
|
end
|
@@ -1,26 +1,25 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
|
-
include Alchemy::BaseHelper
|
5
|
-
|
6
4
|
module Alchemy
|
7
5
|
describe PagesHelper do
|
8
6
|
|
9
7
|
# Fixtures
|
10
|
-
let(:language)
|
11
|
-
let(:default_language)
|
12
|
-
let(:language_root)
|
13
|
-
let(:public_page)
|
14
|
-
let(:visible_page)
|
15
|
-
let(:restricted_page)
|
16
|
-
let(:level_2_page)
|
17
|
-
let(:level_3_page)
|
18
|
-
let(:level_4_page)
|
19
|
-
let(:klingonian)
|
20
|
-
let(:klingonian_language_root)
|
21
|
-
let(:klingonian_public_page)
|
8
|
+
let(:language) { mock_model('Language', :code => 'en') }
|
9
|
+
let(:default_language) { Language.default }
|
10
|
+
let(:language_root) { FactoryGirl.create(:language_root_page) }
|
11
|
+
let(:public_page) { FactoryGirl.create(:public_page) }
|
12
|
+
let(:visible_page) { FactoryGirl.create(:public_page, :visible => true) }
|
13
|
+
let(:restricted_page) { FactoryGirl.create(:public_page, :visible => true, :restricted => true) }
|
14
|
+
let(:level_2_page) { FactoryGirl.create(:public_page, :parent_id => visible_page.id, :visible => true, :name => 'Level 2') }
|
15
|
+
let(:level_3_page) { FactoryGirl.create(:public_page, :parent_id => level_2_page.id, :visible => true, :name => 'Level 3') }
|
16
|
+
let(:level_4_page) { FactoryGirl.create(:public_page, :parent_id => level_3_page.id, :visible => true, :name => 'Level 4') }
|
17
|
+
let(:klingonian) { FactoryGirl.create(:klingonian) }
|
18
|
+
let(:klingonian_language_root) { FactoryGirl.create(:language_root_page, :language => klingonian) }
|
19
|
+
let(:klingonian_public_page) { FactoryGirl.create(:public_page, :language => klingonian, :parent_id => klingonian_language_root.id) }
|
22
20
|
|
23
21
|
before do
|
22
|
+
helper.controller.class_eval { include Alchemy::ConfigurationMethods }
|
24
23
|
allow(Config).to receive(:get) { |arg| arg == :url_nesting ? true : Config.parameter(arg) }
|
25
24
|
@root_page = language_root # We need this instance variable in the helpers
|
26
25
|
end
|
@@ -83,7 +82,7 @@ module Alchemy
|
|
83
82
|
end
|
84
83
|
|
85
84
|
context "as member user" do
|
86
|
-
let(:user) {
|
85
|
+
let(:user) { build(:alchemy_dummy_user) }
|
87
86
|
|
88
87
|
before { restricted_page }
|
89
88
|
|
@@ -254,11 +253,13 @@ module Alchemy
|
|
254
253
|
end
|
255
254
|
|
256
255
|
context "with options[:restricted_only] set to true" do
|
257
|
-
let(:user) {
|
256
|
+
let(:user) { build(:alchemy_dummy_user) }
|
258
257
|
|
259
258
|
it "should render a breadcrumb of restricted pages only" do
|
260
259
|
page.update_attributes!(restricted: true, urlname: 'a-restricted-public-page', name: 'A restricted Public Page', title: 'A restricted Public Page')
|
261
|
-
|
260
|
+
result = helper.render_breadcrumb(page: page, restricted_only: true).strip
|
261
|
+
expect(result).to have_selector("*[contains(\"#{page.name}\")]")
|
262
|
+
expect(result).to_not have_selector("*[contains(\"#{parent.name}\")]")
|
262
263
|
end
|
263
264
|
end
|
264
265
|
|
@@ -1,12 +1,15 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
include Alchemy::BaseHelper
|
4
3
|
include Alchemy::ElementsHelper
|
5
4
|
|
6
5
|
module Alchemy
|
7
6
|
describe UrlHelper do
|
8
7
|
let(:page) { mock_model(Page, urlname: 'testpage', language_code: 'en') }
|
9
8
|
|
9
|
+
before do
|
10
|
+
helper.controller.class_eval { include Alchemy::ConfigurationMethods }
|
11
|
+
end
|
12
|
+
|
10
13
|
context 'page path helpers' do
|
11
14
|
describe "#show_page_path_params" do
|
12
15
|
context "when multi_language" do
|
@@ -17,12 +20,12 @@ module Alchemy
|
|
17
20
|
|
18
21
|
it "should return a Hash with urlname and language_id parameter" do
|
19
22
|
allow(helper).to receive(:multi_language?).and_return(true)
|
20
|
-
expect(helper.show_page_path_params(page)).to include(urlname: 'testpage',
|
23
|
+
expect(helper.show_page_path_params(page)).to include(urlname: 'testpage', locale: 'en')
|
21
24
|
end
|
22
25
|
|
23
26
|
it "should return a Hash with urlname, language_id and query parameter" do
|
24
27
|
allow(helper).to receive(:multi_language?).and_return(true)
|
25
|
-
expect(helper.show_page_path_params(page, {query: 'test'})).to include(urlname: 'testpage',
|
28
|
+
expect(helper.show_page_path_params(page, {query: 'test'})).to include(urlname: 'testpage', locale: 'en', query: 'test')
|
26
29
|
end
|
27
30
|
end
|
28
31
|
|
@@ -33,12 +36,12 @@ module Alchemy
|
|
33
36
|
|
34
37
|
it "should return a Hash with the urlname but without language_id parameter" do
|
35
38
|
expect(helper.show_page_path_params(page)).to include(urlname: 'testpage')
|
36
|
-
expect(helper.show_page_path_params(page)).not_to include(
|
39
|
+
expect(helper.show_page_path_params(page)).not_to include(locale: 'en')
|
37
40
|
end
|
38
41
|
|
39
42
|
it "should return a Hash with urlname and query parameter" do
|
40
43
|
expect(helper.show_page_path_params(page, {query: 'test'})).to include(urlname: 'testpage', query: 'test')
|
41
|
-
expect(helper.show_page_path_params(page)).not_to include(
|
44
|
+
expect(helper.show_page_path_params(page)).not_to include(locale: 'en')
|
42
45
|
end
|
43
46
|
end
|
44
47
|
end
|
@@ -109,7 +109,7 @@ describe 'Alchemy::ControllerActions', type: 'controller' do
|
|
109
109
|
|
110
110
|
context "with lang param" do
|
111
111
|
it "should set the language" do
|
112
|
-
allow(controller).to receive(:params).and_return(
|
112
|
+
allow(controller).to receive(:params).and_return(locale: klingonian.code)
|
113
113
|
controller.send :set_alchemy_language
|
114
114
|
expect(assigns(:language)).to eq(klingonian)
|
115
115
|
expect(Alchemy::Language.current).to eq(klingonian)
|
@@ -118,7 +118,7 @@ describe 'Alchemy::ControllerActions', type: 'controller' do
|
|
118
118
|
|
119
119
|
context "for language that does not exist" do
|
120
120
|
before do
|
121
|
-
allow(controller).to receive(:params).and_return(
|
121
|
+
allow(controller).to receive(:params).and_return(locale: 'fo')
|
122
122
|
controller.send :set_alchemy_language
|
123
123
|
end
|
124
124
|
|
@@ -0,0 +1,112 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Alchemy::PagesController, 'OnPageLayout mixin', type: :controller do
|
4
|
+
before(:all) do
|
5
|
+
ApplicationController.send(:extend, Alchemy::OnPageLayout)
|
6
|
+
end
|
7
|
+
|
8
|
+
let(:page) { create(:public_page, page_layout: 'standard') }
|
9
|
+
|
10
|
+
describe 'defines .on_page_layout class method' do
|
11
|
+
context 'with :all as parameter' do
|
12
|
+
context 'and block given' do
|
13
|
+
before do
|
14
|
+
ApplicationController.class_eval do
|
15
|
+
on_page_layout(:all) do
|
16
|
+
@successful_for_all = true
|
17
|
+
@the_page_instance = @page
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'runs on all page layouts' do
|
23
|
+
alchemy_get :show, urlname: page.urlname
|
24
|
+
expect(assigns(:successful_for_all)).to be_truthy
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'has @page instance' do
|
28
|
+
alchemy_get :show, urlname: page.urlname
|
29
|
+
expect(assigns(:the_page_instance)).to eq(page)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'and method name instead of block given' do
|
34
|
+
before do
|
35
|
+
ApplicationController.class_eval do
|
36
|
+
on_page_layout :all, :my_all_callback_method
|
37
|
+
|
38
|
+
def my_all_callback_method
|
39
|
+
@successful_for_all_callback_method = true
|
40
|
+
@the_all_page_instance = @page
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'runs on all page layouts' do
|
46
|
+
alchemy_get :show, urlname: page.urlname
|
47
|
+
expect(assigns(:successful_for_all_callback_method)).to be_truthy
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'has @page instance' do
|
51
|
+
alchemy_get :show, urlname: page.urlname
|
52
|
+
expect(assigns(:the_all_page_instance)).to eq(page)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
context 'with :standard as parameter' do
|
58
|
+
before do
|
59
|
+
ApplicationController.class_eval do
|
60
|
+
on_page_layout(:standard) do
|
61
|
+
@successful_for_standard = true
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
context 'and page having standard layout' do
|
67
|
+
it 'runs callback' do
|
68
|
+
alchemy_get :show, urlname: page.urlname
|
69
|
+
expect(assigns(:successful_for_standard)).to be_truthy
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context 'and page not having standard layout' do
|
74
|
+
let(:page) { create(:public_page, page_layout: 'news') }
|
75
|
+
|
76
|
+
it "doesn't run callback" do
|
77
|
+
alchemy_get :show, urlname: page.urlname
|
78
|
+
expect(assigns(:successful_for_standard)).to be_falsey
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
RSpec.describe ApplicationController, 'OnPageLayout mixin', type: :controller do
|
86
|
+
before(:all) do
|
87
|
+
ApplicationController.send(:extend, Alchemy::OnPageLayout)
|
88
|
+
end
|
89
|
+
|
90
|
+
controller do
|
91
|
+
def index
|
92
|
+
@another_controller = true
|
93
|
+
render nothing: true
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
context 'in another controller' do
|
98
|
+
before do
|
99
|
+
ApplicationController.class_eval do
|
100
|
+
on_page_layout(:standard) do
|
101
|
+
@successful_for_another_controller = true
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'callback does not run' do
|
107
|
+
get :index
|
108
|
+
expect(assigns(:another_controller)).to be_truthy
|
109
|
+
expect(assigns(:successful_for_another_controller)).to be_falsey
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
@@ -14,8 +14,12 @@ module Alchemy
|
|
14
14
|
expect(subject.collect { |l| l['name'] }).to include('standard')
|
15
15
|
end
|
16
16
|
|
17
|
+
it "should allow erb generated layouts" do
|
18
|
+
expect(subject.collect { |l| l['name'] }).to include('erb_layout')
|
19
|
+
end
|
20
|
+
|
17
21
|
context "with empty layouts file" do
|
18
|
-
before { expect(YAML).to receive(:
|
22
|
+
before { expect(YAML).to receive(:load).and_return(false) }
|
19
23
|
|
20
24
|
it "returns empty array" do
|
21
25
|
is_expected.to eq([])
|
@@ -33,14 +33,13 @@ describe Alchemy::Permissions do
|
|
33
33
|
is_expected.not_to be_able_to(:show, restricted_attachment)
|
34
34
|
end
|
35
35
|
|
36
|
-
it "can only download not restricted pictures" do
|
37
|
-
is_expected.to be_able_to(:download, picture)
|
38
|
-
is_expected.not_to be_able_to(:download, restricted_picture)
|
39
|
-
end
|
40
|
-
|
41
36
|
it "can only see not restricted pictures" do
|
42
37
|
is_expected.to be_able_to(:show, picture)
|
38
|
+
is_expected.to be_able_to(:thumbnail, picture)
|
39
|
+
is_expected.to be_able_to(:zoom, picture)
|
43
40
|
is_expected.not_to be_able_to(:show, restricted_picture)
|
41
|
+
is_expected.not_to be_able_to(:thumbnail, restricted_picture)
|
42
|
+
is_expected.not_to be_able_to(:zoom, restricted_picture)
|
44
43
|
end
|
45
44
|
|
46
45
|
it "can only visit not restricted pages" do
|
@@ -71,7 +70,7 @@ describe Alchemy::Permissions do
|
|
71
70
|
end
|
72
71
|
|
73
72
|
context "A member" do
|
74
|
-
let(:user) {
|
73
|
+
let(:user) { build(:alchemy_dummy_user) }
|
75
74
|
|
76
75
|
it "can download all attachments" do
|
77
76
|
is_expected.to be_able_to(:download, attachment)
|
@@ -83,14 +82,13 @@ describe Alchemy::Permissions do
|
|
83
82
|
is_expected.to be_able_to(:show, restricted_attachment)
|
84
83
|
end
|
85
84
|
|
86
|
-
it "can download all pictures" do
|
87
|
-
is_expected.to be_able_to(:download, picture)
|
88
|
-
is_expected.to be_able_to(:download, restricted_picture)
|
89
|
-
end
|
90
|
-
|
91
85
|
it "can see all pictures" do
|
92
86
|
is_expected.to be_able_to(:show, picture)
|
87
|
+
is_expected.to be_able_to(:thumbnail, picture)
|
88
|
+
is_expected.to be_able_to(:zoom, picture)
|
93
89
|
is_expected.to be_able_to(:show, restricted_picture)
|
90
|
+
is_expected.to be_able_to(:thumbnail, restricted_picture)
|
91
|
+
is_expected.to be_able_to(:zoom, restricted_picture)
|
94
92
|
end
|
95
93
|
|
96
94
|
it "can visit restricted pages" do
|
@@ -125,7 +123,7 @@ describe Alchemy::Permissions do
|
|
125
123
|
end
|
126
124
|
|
127
125
|
context "An author" do
|
128
|
-
let(:user) {
|
126
|
+
let(:user) { build(:alchemy_dummy_user, :as_author) }
|
129
127
|
|
130
128
|
it "can leave the admin area" do
|
131
129
|
is_expected.to be_able_to(:leave, :alchemy_admin)
|
@@ -198,7 +196,7 @@ describe Alchemy::Permissions do
|
|
198
196
|
end
|
199
197
|
|
200
198
|
context "An editor" do
|
201
|
-
let(:user) {
|
199
|
+
let(:user) { build(:alchemy_dummy_user, :as_editor) }
|
202
200
|
|
203
201
|
it "can manage pages" do
|
204
202
|
is_expected.to be_able_to(:copy, Alchemy::Page)
|
@@ -237,7 +235,7 @@ describe Alchemy::Permissions do
|
|
237
235
|
end
|
238
236
|
|
239
237
|
context "An admin" do
|
240
|
-
let(:user) {
|
238
|
+
let(:user) { build(:alchemy_dummy_user, :as_admin) }
|
241
239
|
|
242
240
|
it "can check for alchemy updates" do
|
243
241
|
is_expected.to be_able_to(:update_check, :alchemy_admin_dashboard)
|
@@ -253,7 +251,7 @@ describe Alchemy::Permissions do
|
|
253
251
|
end
|
254
252
|
|
255
253
|
context "A logged in user without a role" do
|
256
|
-
let(:user) {
|
254
|
+
let(:user) { mock_model(Alchemy.user_class, alchemy_roles: []) }
|
257
255
|
|
258
256
|
it "can only see visible not restricted pages (like the guest role)" do
|
259
257
|
is_expected.to be_able_to(:see, visible_page)
|
data/spec/models/cell_spec.rb
CHANGED
@@ -10,6 +10,10 @@ module Alchemy
|
|
10
10
|
it "should return an Array" do
|
11
11
|
expect(Cell.definitions).to be_a(Array)
|
12
12
|
end
|
13
|
+
|
14
|
+
it "should allow erb generated definitions" do
|
15
|
+
expect(Cell.definitions.collect { |d| d['name']} ).to include('erb_cell')
|
16
|
+
end
|
13
17
|
end
|
14
18
|
|
15
19
|
describe '.definition_for' do
|
data/spec/models/content_spec.rb
CHANGED
@@ -22,6 +22,12 @@ module Alchemy
|
|
22
22
|
expect(Content.normalize_essence_type('EssenceText')).to eq("Alchemy::EssenceText")
|
23
23
|
end
|
24
24
|
end
|
25
|
+
|
26
|
+
context "passing non-namespaced essence type for an existing non-namespaced essence" do
|
27
|
+
it "should not add alchemy namespace" do
|
28
|
+
expect(Content.normalize_essence_type('DummyModel')).to eq("DummyModel")
|
29
|
+
end
|
30
|
+
end
|
25
31
|
end
|
26
32
|
|
27
33
|
describe '#normalized_essence_type' do
|
data/spec/models/element_spec.rb
CHANGED
@@ -33,6 +33,10 @@ module Alchemy
|
|
33
33
|
end
|
34
34
|
|
35
35
|
describe '.definitions' do
|
36
|
+
it "should allow erb generated elements" do
|
37
|
+
expect(Element.definitions.collect { |el| el['name']} ).to include('erb_element')
|
38
|
+
end
|
39
|
+
|
36
40
|
context "without existing yml files" do
|
37
41
|
before { allow(File).to receive(:exists?).and_return(false) }
|
38
42
|
|
@@ -42,7 +46,8 @@ module Alchemy
|
|
42
46
|
end
|
43
47
|
|
44
48
|
context "without any definitions in elements.yml" do
|
45
|
-
|
49
|
+
# Yes, YAML.load returns false if an empty file exists.
|
50
|
+
before { allow(YAML).to receive(:load).and_return(false) }
|
46
51
|
|
47
52
|
it "should return an empty array" do
|
48
53
|
expect(Element.definitions).to eq([])
|