alchemy_cms 2.2.4 → 2.3.rc5
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.
- data/.gitignore +1 -1
- data/.travis.yml +3 -4
- data/Gemfile +1 -0
- data/README.md +10 -6
- data/alchemy_cms.gemspec +5 -2
- data/app/assets/images/alchemy/icons.png +0 -0
- data/app/assets/images/sassy-ie-overlay.png +0 -0
- data/app/assets/javascripts/alchemy/alchemy.base.js +50 -59
- data/app/assets/javascripts/alchemy/alchemy.buttons.js +14 -4
- data/app/assets/javascripts/alchemy/alchemy.datepicker.js +8 -2
- data/app/assets/javascripts/alchemy/alchemy.elements_window.js +11 -3
- data/app/assets/javascripts/alchemy/alchemy.gui.js.coffee +1 -1
- data/app/assets/javascripts/alchemy/alchemy.link_overlay.js.coffee +14 -1
- data/app/assets/javascripts/alchemy/alchemy.preview.js +1 -1
- data/app/assets/javascripts/alchemy/alchemy.preview_window.js +12 -4
- data/app/assets/javascripts/alchemy/alchemy.uploader.js +4 -1
- data/app/assets/javascripts/alchemy/alchemy.windows.js +18 -8
- data/app/assets/stylesheets/alchemy/_defaults.scss +84 -120
- data/app/assets/stylesheets/alchemy/alchemy.css +2 -2
- data/app/assets/stylesheets/alchemy/archive.css.scss +288 -0
- data/app/assets/stylesheets/alchemy/base.css.scss +95 -390
- data/app/assets/stylesheets/alchemy/dashboard.css.scss +4 -4
- data/app/assets/stylesheets/alchemy/elements.css.scss +83 -118
- data/app/assets/stylesheets/alchemy/flash.css.scss +1 -1
- data/app/assets/stylesheets/alchemy/form_elements.css.scss +528 -0
- data/app/assets/stylesheets/alchemy/frame.css.scss +13 -39
- data/app/assets/stylesheets/alchemy/icons.css.scss +217 -228
- data/app/assets/stylesheets/alchemy/jquery-ui.alchemy.css.scss +48 -50
- data/app/assets/stylesheets/alchemy/jquery.Jcrop.css.scss +1 -1
- data/app/assets/stylesheets/alchemy/login.css.scss +1 -5
- data/app/assets/stylesheets/alchemy/menubar.css.scss +19 -29
- data/app/assets/stylesheets/alchemy/pagination.css.scss +3 -4
- data/app/assets/stylesheets/alchemy/sitemap.css.scss +81 -81
- data/app/assets/stylesheets/alchemy/tables.css.scss +63 -57
- data/app/assets/stylesheets/alchemy/tinymce_dialog.css.scss +57 -57
- data/app/assets/stylesheets/alchemy/upload.css.scss +6 -6
- data/app/assets/stylesheets/tiny_mce/plugins/inlinepopups/skins/alchemy/window.css.scss +6 -10
- data/app/controllers/alchemy/admin/attachments_controller.rb +5 -4
- data/app/controllers/alchemy/admin/base_controller.rb +1 -9
- data/app/controllers/alchemy/admin/contents_controller.rb +4 -6
- data/app/controllers/alchemy/admin/elements_controller.rb +2 -2
- data/app/controllers/alchemy/admin/pages_controller.rb +2 -2
- data/app/controllers/alchemy/admin/pictures_controller.rb +74 -15
- data/app/controllers/alchemy/attachments_controller.rb +8 -2
- data/app/controllers/alchemy/base_controller.rb +47 -5
- data/app/controllers/alchemy/elements_controller.rb +1 -1
- data/app/controllers/alchemy/messages_controller.rb +12 -12
- data/app/controllers/alchemy/pages_controller.rb +5 -1
- data/app/controllers/alchemy/pictures_controller.rb +9 -4
- data/app/controllers/alchemy/user_sessions_controller.rb +2 -4
- data/app/helpers/alchemy/admin/base_helper.rb +98 -19
- data/app/helpers/alchemy/admin/contents_helper.rb +2 -2
- data/app/helpers/alchemy/admin/elements_helper.rb +2 -3
- data/app/helpers/alchemy/base_helper.rb +6 -5
- data/app/helpers/alchemy/elements_helper.rb +2 -2
- data/app/helpers/alchemy/essences_helper.rb +4 -5
- data/app/helpers/alchemy/pages_helper.rb +15 -79
- data/app/helpers/alchemy/url_helper.rb +67 -0
- data/app/mailers/alchemy/messages.rb +1 -1
- data/app/mailers/alchemy/notifications.rb +1 -1
- data/app/models/alchemy/attachment.rb +11 -2
- data/app/models/alchemy/cell.rb +20 -10
- data/app/models/alchemy/content.rb +4 -3
- data/app/models/alchemy/element.rb +170 -178
- data/app/models/alchemy/language/code.rb +4 -1
- data/app/models/alchemy/message.rb +19 -3
- data/app/models/alchemy/page.rb +45 -40
- data/app/models/alchemy/picture.rb +24 -2
- data/app/models/alchemy/user.rb +2 -3
- data/app/views/alchemy/admin/attachments/_archive_overlay.html.erb +12 -12
- data/app/views/alchemy/admin/attachments/_attachment.html.erb +1 -1
- data/app/views/alchemy/admin/attachments/create.js.erb +1 -0
- data/app/views/alchemy/admin/attachments/edit.html.erb +9 -3
- data/app/views/alchemy/admin/attachments/index.html.erb +3 -2
- data/app/views/alchemy/admin/contents/_missing.html.erb +1 -1
- data/app/views/alchemy/admin/contents/create.js.erb +54 -0
- data/app/views/alchemy/admin/contents/new.html.erb +9 -4
- data/app/views/alchemy/admin/elements/{_add_content.html.erb → _add_picture.html.erb} +4 -4
- data/app/views/alchemy/admin/elements/_elements_select.html.erb +2 -1
- data/app/views/alchemy/admin/elements/_new_element_form.html.erb +1 -1
- data/app/views/alchemy/admin/elements/{_picture_editor.html.erb → _picture_gallery_editor.html.erb} +7 -11
- data/app/views/alchemy/admin/elements/fold.js.erb +46 -0
- data/app/views/alchemy/admin/elements/index.html.erb +24 -24
- data/app/views/alchemy/admin/elements/list.js.erb +11 -9
- data/app/views/alchemy/admin/essence_files/assign.js.erb +3 -1
- data/app/views/alchemy/admin/essence_pictures/destroy.js.erb +28 -0
- data/app/views/alchemy/admin/pages/_contactform_links.html.erb +8 -6
- data/app/views/alchemy/admin/pages/_external_link.html.erb +11 -9
- data/app/views/alchemy/admin/pages/_file_link.html.erb +10 -8
- data/app/views/alchemy/admin/pages/_internal_link.html.erb +14 -10
- data/app/views/alchemy/admin/pages/_new_page_form.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_page.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_page_for_links.html.erb +32 -21
- data/app/views/alchemy/admin/pages/configure.html.erb +2 -2
- data/app/views/alchemy/admin/pages/configure_external.html.erb +13 -13
- data/app/views/alchemy/admin/pages/edit.html.erb +2 -2
- data/app/views/alchemy/admin/pages/index.html.erb +26 -24
- data/app/views/alchemy/admin/pages/link.html.erb +2 -5
- data/app/views/alchemy/admin/partials/_upload_form.html.erb +28 -12
- data/app/views/alchemy/admin/pictures/_archive.html.erb +54 -0
- data/app/views/alchemy/admin/pictures/_archive_overlay.html.erb +10 -7
- data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +21 -22
- data/app/views/alchemy/admin/pictures/_filter_bar.html.erb +31 -0
- data/app/views/alchemy/admin/pictures/_overlay_picture_list.html.erb +9 -0
- data/app/views/alchemy/admin/pictures/_picture.html.erb +36 -6
- data/app/views/alchemy/admin/pictures/_tag_list.html.erb +27 -0
- data/app/views/alchemy/admin/pictures/archive_overlay.js.erb +3 -1
- data/app/views/alchemy/admin/pictures/create.js.erb +4 -5
- data/app/views/alchemy/admin/pictures/edit.html.erb +26 -0
- data/app/views/alchemy/admin/pictures/edit_multiple.html.erb +39 -0
- data/app/views/alchemy/admin/pictures/index.html.erb +81 -70
- data/app/views/alchemy/admin/pictures/index.js.erb +3 -0
- data/app/views/alchemy/admin/pictures/new.html.erb +1 -0
- data/app/views/alchemy/admin/resources/index.html.erb +3 -1
- data/app/views/alchemy/admin/users/_table.html.erb +1 -1
- data/app/views/alchemy/admin/users/index.html.erb +27 -23
- data/app/views/alchemy/elements/_article_editor.html.erb +7 -2
- data/app/views/alchemy/elements/_bild_editor.html.erb +1 -1
- data/app/views/alchemy/elements/_bild_text_editor.html.erb +6 -1
- data/app/views/alchemy/elements/_bild_text_view.html.erb +3 -3
- data/app/views/alchemy/elements/_image_mosaic_editor.html.erb +1 -1
- data/app/views/alchemy/elements/_image_mosaic_view.html.erb +2 -2
- data/app/views/alchemy/elements/_intro_image_text_view.html.erb +4 -4
- data/app/views/alchemy/elements/_searchresult_editor.html.erb +4 -1
- data/app/views/alchemy/essences/_essence_boolean_editor.html.erb +1 -1
- data/app/views/alchemy/essences/_essence_picture_editor.html.erb +2 -3
- data/app/views/alchemy/essences/_essence_picture_tools.html.erb +1 -1
- data/app/views/alchemy/search/_form.html.erb +8 -0
- data/app/views/alchemy/search/_result.html.erb +3 -2
- data/app/views/alchemy/search/_results.html.erb +28 -0
- data/app/views/alchemy/user_sessions/leave.html.erb +4 -4
- data/app/views/alchemy/user_sessions/login.html.erb +1 -2
- data/app/views/layouts/alchemy/admin.html.erb +30 -10
- data/app/views/layouts/alchemy/login.html.erb +2 -39
- data/config/alchemy/elements.yml +1 -2
- data/config/alchemy/page_layouts.yml +8 -5
- data/config/authorization_rules.rb +27 -18
- data/config/initializers/localeapp.rb +9 -0
- data/config/locales/alchemy.de.yml +93 -56
- data/config/locales/alchemy.en.yml +73 -50
- data/config/routes.rb +3 -1
- data/db/migrate/20120704181529_add_upload_hash_to_alchemy_picture.rb +5 -0
- data/db/migrate/20120705214247_acts_as_taggable_on_migration.rb +28 -0
- data/db/migrate/20120728185830_add_cached_tag_list_to_alchemy_pictures.rb +5 -0
- data/db/migrate/20120831135441_set_alchemy_languages_country_code_default_to_empty_string.rb +9 -0
- data/lib/alchemy/capistrano.rb +2 -2
- data/lib/alchemy/essence.rb +14 -0
- data/lib/alchemy/page_layout.rb +0 -6
- data/lib/alchemy/resource.rb +9 -15
- data/lib/alchemy/upgrader.rb +18 -3
- data/lib/alchemy/version.rb +5 -1
- data/lib/alchemy_cms.rb +4 -1
- data/lib/rails/generators/alchemy/deploy_script/deploy_script_generator.rb +16 -6
- data/lib/rails/generators/alchemy/deploy_script/templates/deploy.rb.tt +17 -3
- data/lib/rails/generators/alchemy/elements/elements_generator.rb +6 -1
- data/lib/rails/generators/alchemy/elements/templates/editor.html.erb +10 -1
- data/lib/rails/generators/alchemy/elements/templates/view.html.erb +17 -18
- data/lib/rails/generators/alchemy/scaffold/files/pages.html.erb +4 -2
- data/lib/tasks/fleximage.rake +2 -2
- data/spec/controllers/admin/contents_controller_spec.rb +2 -2
- data/spec/controllers/admin/elements_controller_spec.rb +30 -1
- data/spec/controllers/admin/pages_controller_spec.rb +35 -18
- data/spec/controllers/admin/trash_controller_spec.rb +40 -16
- data/spec/controllers/attachments_controller_spec.rb +62 -0
- data/spec/controllers/base_controller_spec.rb +43 -42
- data/spec/controllers/elements_controller_spec.rb +30 -0
- data/spec/controllers/pages_controller_spec.rb +22 -5
- data/spec/controllers/pictures_controller_spec.rb +82 -0
- data/spec/dummy/app/models/event.rb +2 -1
- data/spec/dummy/config/database.yml +3 -2
- data/spec/dummy/db/schema.rb +51 -27
- data/spec/factories.rb +29 -8
- data/spec/helpers/admin/base_helper_spec.rb +134 -21
- data/spec/helpers/admin/contents_helper_spec.rb +2 -2
- data/spec/helpers/admin/elements_helper_spec.rb +17 -9
- data/spec/helpers/admin/essences_helper_spec.rb +7 -6
- data/spec/helpers/essences_helper_spec.rb +8 -7
- data/spec/helpers/pages_helper_spec.rb +208 -325
- data/spec/helpers/url_helper_spec.rb +171 -0
- data/spec/integration/admin/link_overlay_spec.rb +53 -0
- data/spec/integration/admin/modules_integration_spec.rb +22 -26
- data/spec/integration/admin/pages_controller_spec.rb +10 -19
- data/spec/integration/admin/picture_library_integration_spec.rb +52 -0
- data/spec/integration/admin/resources_integration_spec.rb +68 -75
- data/spec/integration/pages_controller_spec.rb +70 -61
- data/spec/integration/security_spec.rb +3 -5
- data/spec/integration/translation_integration_spec.rb +56 -0
- data/spec/libraries/essence_spec.rb +18 -0
- data/spec/libraries/resource_spec.rb +101 -79
- data/spec/libraries/resources_helper_spec.rb +3 -0
- data/spec/models/content_spec.rb +63 -60
- data/spec/models/element_spec.rb +203 -93
- data/spec/models/language_spec.rb +90 -65
- data/spec/models/page_layout_spec.rb +37 -0
- data/spec/models/page_spec.rb +181 -113
- data/spec/models/picture_spec.rb +73 -26
- data/spec/models/resource_spec.rb +52 -23
- data/spec/support/alchemy/specs_helpers.rb +2 -0
- data/spec/support/image.png +0 -0
- data/spec/{helpers/url_helpers_spec.rb → url_helpers_spec.rb} +0 -0
- data/vendor/assets/javascripts/jquery_plugins/jquery.selectBoxIt.js +1909 -0
- data/vendor/assets/javascripts/jquery_plugins/preloadCssImages.jQuery_v5.js +152 -0
- metadata +106 -33
- data/app/assets/stylesheets/alchemy/buttons.css.scss +0 -361
- data/app/assets/stylesheets/alchemy/jquery.sb.css.scss +0 -260
- data/app/views/alchemy/admin/contents/create.js.coffee +0 -49
- data/app/views/alchemy/admin/elements/fold.js.coffee +0 -37
- data/app/views/alchemy/admin/essence_pictures/destroy.js.coffee +0 -19
- data/app/views/alchemy/admin/pictures/_pictures_list.html.erb +0 -16
- data/app/views/alchemy/admin/pictures/update.js.erb +0 -3
- data/spec/dummy/config/locales/en.yml +0 -5
- data/spec/dummy/config/locales/fo.yml +0 -5
- data/spec/page_layout_spec.rb +0 -35
- data/vendor/assets/javascripts/jquery_plugins/jquery.in-place-edit.js +0 -172
- data/vendor/assets/javascripts/jquery_plugins/jquery.sb.min.js +0 -14
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
include Alchemy::BaseHelper
|
|
4
|
+
|
|
5
|
+
module Alchemy
|
|
6
|
+
describe UrlHelper do
|
|
7
|
+
|
|
8
|
+
before do
|
|
9
|
+
@page = mock_model(Page, :urlname => 'testpage', :language_code => 'en')
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
describe "#show_page_path_params" do
|
|
13
|
+
|
|
14
|
+
context "when multi_language" do
|
|
15
|
+
|
|
16
|
+
before do
|
|
17
|
+
helper.stub!(:multi_language?).and_return(true)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "should return a Hash with urlname and language_id parameter" do
|
|
21
|
+
helper.stub!(:multi_language?).and_return(true)
|
|
22
|
+
helper.show_page_path_params(@page).should include(:urlname => 'testpage', :lang => 'en')
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "should return a Hash with urlname, language_id and query parameter" do
|
|
26
|
+
helper.stub!(:multi_language?).and_return(true)
|
|
27
|
+
helper.show_page_path_params(@page, {:query => 'test'}).should include(:urlname => 'testpage', :lang => 'en', :query => 'test')
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
context "not multi_language" do
|
|
33
|
+
|
|
34
|
+
before do
|
|
35
|
+
helper.stub!(:multi_language?).and_return(false)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "should return a Hash with the urlname but without language_id parameter" do
|
|
39
|
+
helper.show_page_path_params(@page).should include(:urlname => 'testpage')
|
|
40
|
+
helper.show_page_path_params(@page).should_not include(:lang => 'en')
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "should return a Hash with urlname and query parameter" do
|
|
44
|
+
helper.show_page_path_params(@page, {:query => 'test'}).should include(:urlname => 'testpage', :query => 'test')
|
|
45
|
+
helper.show_page_path_params(@page).should_not include(:lang => 'en')
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
describe "#show_alchemy_page_path" do
|
|
53
|
+
|
|
54
|
+
context "when multi_language" do
|
|
55
|
+
|
|
56
|
+
before do
|
|
57
|
+
helper.stub!(:multi_language?).and_return(true)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it "should return the correct relative path string" do
|
|
61
|
+
helper.show_alchemy_page_path(@page).should == "/alchemy/#{@page.language_code}/testpage"
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it "should return the correct relative path string with additional parameters" do
|
|
65
|
+
helper.show_alchemy_page_path(@page, {:query => 'test'}).should == "/alchemy/#{@page.language_code}/testpage?query=test"
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
context "not multi_language" do
|
|
71
|
+
|
|
72
|
+
before do
|
|
73
|
+
helper.stub!(:multi_language?).and_return(false)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it "should return the correct relative path string" do
|
|
77
|
+
helper.show_alchemy_page_path(@page).should == "/alchemy/testpage"
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it "should return the correct relative path string with additional parameter" do
|
|
81
|
+
helper.show_alchemy_page_path(@page, {:query => 'test'}).should == "/alchemy/testpage?query=test"
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
describe "#show_alchemy_page_url" do
|
|
89
|
+
|
|
90
|
+
context "when multi_language" do
|
|
91
|
+
|
|
92
|
+
before do
|
|
93
|
+
helper.stub!(:multi_language?).and_return(true)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
it "should return the correct url string" do
|
|
97
|
+
helper.show_alchemy_page_url(@page).should == "http://#{helper.request.host}/alchemy/#{@page.language_code}/testpage"
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
it "should return the correct url string with additional parameters" do
|
|
101
|
+
helper.show_alchemy_page_url(@page, {:query => 'test'}).should == "http://#{helper.request.host}/alchemy/#{@page.language_code}/testpage?query=test"
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
context "not multi_language" do
|
|
107
|
+
|
|
108
|
+
before do
|
|
109
|
+
helper.stub!(:multi_language?).and_return(false)
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
it "should return the correct url string" do
|
|
113
|
+
helper.show_alchemy_page_url(@page).should == "http://#{helper.request.host}/alchemy/testpage"
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
it "should return the correct url string with additional parameter" do
|
|
117
|
+
helper.show_alchemy_page_url(@page, {:query => 'test'}).should == "http://#{helper.request.host}/alchemy/testpage?query=test"
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
describe 'picture path helpers' do
|
|
125
|
+
|
|
126
|
+
let(:picture) { mock_model(Picture, :urlname => 'cute_kitten', :id => 42) }
|
|
127
|
+
|
|
128
|
+
describe '#show_alchemy_picture_path' do
|
|
129
|
+
|
|
130
|
+
it "should return the correct relative path string" do
|
|
131
|
+
helper.show_alchemy_picture_path(picture).should == "/alchemy/pictures/42/show/cute_kitten.jpg"
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
describe '#show_alchemy_picture_url' do
|
|
137
|
+
|
|
138
|
+
it "should return the correct url string" do
|
|
139
|
+
helper.show_alchemy_picture_url(picture).should == "http://#{helper.request.host}/alchemy/pictures/42/show/cute_kitten.jpg"
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
describe '#show_picture_path_params' do
|
|
145
|
+
|
|
146
|
+
it "should return the correct params for rendering a picture" do
|
|
147
|
+
helper.show_picture_path_params(picture).should include(:name => 'cute_kitten', :format => 'jpg')
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
context "with additional params" do
|
|
151
|
+
|
|
152
|
+
it "should include these params" do
|
|
153
|
+
helper.show_picture_path_params(picture, {:format => 'png'}).should include(:name => 'cute_kitten', :format => 'png')
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
context "with additional params crop set to true" do
|
|
159
|
+
|
|
160
|
+
it "should include crop as parameter" do
|
|
161
|
+
helper.show_picture_path_params(picture, {:crop => true}).should include(:name => 'cute_kitten', :crop => 'crop')
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
end
|
|
171
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe "Link overlay" do
|
|
4
|
+
|
|
5
|
+
before do
|
|
6
|
+
authorize_as_admin
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
context "GUI" do
|
|
10
|
+
|
|
11
|
+
it "has a tab for linking internal pages" do
|
|
12
|
+
visit link_admin_pages_path
|
|
13
|
+
within('#overlay_tabs') { page.should have_content('Internal')}
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "has a tab for linking external pages" do
|
|
17
|
+
visit link_admin_pages_path
|
|
18
|
+
within('#overlay_tabs') { page.should have_content('External')}
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "has a tab for linking files" do
|
|
22
|
+
visit link_admin_pages_path
|
|
23
|
+
within('#overlay_tabs') { page.should have_content('File')}
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
context "linking internal pages" do
|
|
29
|
+
|
|
30
|
+
let(:lang_root) do
|
|
31
|
+
FactoryGirl.create(:language_root_page)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
before do
|
|
35
|
+
public_page = FactoryGirl.create(:public_page, :parent_id => lang_root.id)
|
|
36
|
+
public_page_2 = FactoryGirl.create(:public_page, :parent_id => lang_root.id)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "should have a tree of internal pages" do
|
|
40
|
+
visit link_admin_pages_path
|
|
41
|
+
page.should have_selector('ul#sitemap li a')
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it "should not have a link for pages that redirect to external" do
|
|
45
|
+
redirect = FactoryGirl.create(:page, :parent_id => lang_root.id, :name => 'Google', :urlname => 'http://www.google.com')
|
|
46
|
+
Alchemy::Page.any_instance.stub(:definition).and_return({'redirects_to_external' => true})
|
|
47
|
+
visit link_admin_pages_path
|
|
48
|
+
page.should_not have_selector('ul#sitemap li div[name="/http-www-google-com"] a')
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
end
|
|
@@ -1,34 +1,30 @@
|
|
|
1
|
-
|
|
2
|
-
unless ENV["CI"]
|
|
3
|
-
require 'spec_helper'
|
|
1
|
+
require 'spec_helper'
|
|
4
2
|
|
|
5
|
-
|
|
3
|
+
describe "Modules" do
|
|
6
4
|
|
|
7
|
-
|
|
5
|
+
context "A custom module with a main-apps controller" do
|
|
8
6
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
it "should have a button in main_navigation, pointing to the configured controller" do
|
|
16
|
-
Alchemy::Modules.register_module(
|
|
17
|
-
{
|
|
18
|
-
:name => 'events',
|
|
19
|
-
:navigation => {
|
|
20
|
-
:icon => 'icon events',
|
|
21
|
-
:name => 'Events',
|
|
22
|
-
:controller => '/admin/events',
|
|
23
|
-
:action => 'index'
|
|
24
|
-
}
|
|
25
|
-
})
|
|
26
|
-
visit '/alchemy/admin'
|
|
27
|
-
click_on 'Events'
|
|
28
|
-
page.should_not have_content('Upps!')
|
|
29
|
-
end
|
|
7
|
+
before do
|
|
8
|
+
load_authorization_rules
|
|
9
|
+
authorize_as_admin
|
|
10
|
+
end
|
|
30
11
|
|
|
12
|
+
it "should have a button in main_navigation, pointing to the configured controller" do
|
|
13
|
+
Alchemy::Modules.register_module(
|
|
14
|
+
{
|
|
15
|
+
:name => 'events',
|
|
16
|
+
:navigation => {
|
|
17
|
+
:icon => 'icon events',
|
|
18
|
+
:name => 'Events',
|
|
19
|
+
:controller => '/admin/events',
|
|
20
|
+
:action => 'index'
|
|
21
|
+
}
|
|
22
|
+
})
|
|
23
|
+
visit '/alchemy/admin'
|
|
24
|
+
click_on 'Events'
|
|
25
|
+
page.should_not have_content('Upps!')
|
|
31
26
|
end
|
|
32
27
|
|
|
33
28
|
end
|
|
29
|
+
|
|
34
30
|
end
|
|
@@ -3,23 +3,20 @@ require 'spec_helper'
|
|
|
3
3
|
module Alchemy
|
|
4
4
|
describe Admin::PagesController, :js => true do
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
let(:klingonian) { FactoryGirl.create(:klingonian) }
|
|
7
|
+
let(:german_root) { FactoryGirl.create(:language_root_page) }
|
|
8
|
+
let(:klingonian_root) { FactoryGirl.create(:language_root_page, :name => 'Klingonian', :language => klingonian) }
|
|
9
|
+
|
|
10
|
+
before do
|
|
11
|
+
german_root
|
|
12
|
+
authorize_as_admin
|
|
10
13
|
end
|
|
11
14
|
|
|
12
15
|
describe "language tree switching" do
|
|
13
16
|
|
|
14
|
-
before(:all) do
|
|
15
|
-
@language = FactoryGirl.create(:language)
|
|
16
|
-
end
|
|
17
|
-
|
|
18
17
|
context "in a multilangual environment" do
|
|
19
18
|
|
|
20
|
-
before
|
|
21
|
-
@klingonian_root = FactoryGirl.create(:language_root_page, :name => 'Klingonian')
|
|
22
|
-
end
|
|
19
|
+
before { klingonian_root }
|
|
23
20
|
|
|
24
21
|
it "one should be able to switch the language tree" do
|
|
25
22
|
visit('/alchemy/admin/pages')
|
|
@@ -27,14 +24,12 @@ module Alchemy
|
|
|
27
24
|
page.should have_selector('#sitemap .sitemap_pagename_link', :text => 'Klingonian')
|
|
28
25
|
end
|
|
29
26
|
|
|
30
|
-
after(:all) {
|
|
31
|
-
@klingonian_root.delete
|
|
32
|
-
}
|
|
33
|
-
|
|
34
27
|
end
|
|
35
28
|
|
|
36
29
|
context "with no language root page" do
|
|
37
30
|
|
|
31
|
+
before { klingonian }
|
|
32
|
+
|
|
38
33
|
it "it should display the form for creating language root" do
|
|
39
34
|
visit('/alchemy/admin/pages')
|
|
40
35
|
page.select 'Klingonian', :from => 'language'
|
|
@@ -43,10 +38,6 @@ module Alchemy
|
|
|
43
38
|
|
|
44
39
|
end
|
|
45
40
|
|
|
46
|
-
after(:all) {
|
|
47
|
-
@language.destroy
|
|
48
|
-
}
|
|
49
|
-
|
|
50
41
|
end
|
|
51
42
|
|
|
52
43
|
describe "flush complete page cache" do
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe "Picture Library", :js => true do
|
|
4
|
+
|
|
5
|
+
before do
|
|
6
|
+
authorize_as_admin
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
describe "Tagging" do
|
|
10
|
+
|
|
11
|
+
before do
|
|
12
|
+
picture = FactoryGirl.create(:picture, :tag_list => 'tag1', :name => 'TaggedWith1')
|
|
13
|
+
picture = FactoryGirl.create(:picture, :tag_list => 'tag2', :name => 'TaggedWith2')
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "it should be possible to filter tags by clicking on its name in the tag list" do
|
|
17
|
+
visit '/alchemy/admin/pictures'
|
|
18
|
+
click_on 'tag1 (1)'
|
|
19
|
+
page.should have_content 'TaggedWith1'
|
|
20
|
+
page.should_not have_content 'TaggedWith2'
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "it should be possible to undo tag filtering by clicking on an active tag name" do
|
|
24
|
+
visit '/alchemy/admin/pictures'
|
|
25
|
+
click_on 'tag1 (1)'
|
|
26
|
+
click_on 'tag2 (1)'
|
|
27
|
+
page.should have_content 'TaggedWith2'
|
|
28
|
+
click_on 'tag2 (1)'
|
|
29
|
+
page.should_not have_content 'TaggedWith2'
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
describe "Filter by tag" do
|
|
35
|
+
|
|
36
|
+
before do
|
|
37
|
+
FactoryGirl.create(:picture, :tag_list => 'bla')
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it "should list all applied tags" do
|
|
41
|
+
visit '/alchemy/admin/pictures'
|
|
42
|
+
page.should have_content 'bla'
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "should be possible to filter pictures by tag" do
|
|
46
|
+
visit '/alchemy/admin/pictures'
|
|
47
|
+
click_on 'bla (1)'
|
|
48
|
+
page.should have_content 'bla'
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -1,94 +1,87 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe "Resources" do
|
|
4
|
+
|
|
5
|
+
before do
|
|
6
|
+
load_authorization_rules
|
|
7
|
+
authorize_as_admin
|
|
8
|
+
Event.create!(:name => 'My Event',
|
|
9
|
+
:hidden_name => 'not shown',
|
|
10
|
+
:starts_at => DateTime.new(2012, 03, 02, 8, 15),
|
|
11
|
+
:ends_at => DateTime.new(2012, 03, 02, 19, 30),
|
|
12
|
+
:description => "something\nfancy",
|
|
13
|
+
:published => false,
|
|
14
|
+
:entrance_fee => 12.32)
|
|
15
|
+
Event.create!(:name => 'My second Event',
|
|
16
|
+
:starts_at => DateTime.new(2012, 03, 02, 8, 15),
|
|
17
|
+
:ends_at => DateTime.new(2012, 03, 02, 19, 30),
|
|
18
|
+
:description => "something\nfancy",
|
|
19
|
+
:published => false,
|
|
20
|
+
:entrance_fee => 12.32)
|
|
21
|
+
end
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
load_authorization_rules
|
|
25
|
-
create_admin_user
|
|
26
|
-
login_into_alchemy
|
|
27
|
-
}
|
|
23
|
+
describe "index view" do
|
|
28
24
|
|
|
29
|
-
|
|
25
|
+
it "should have a button for creating a new resource items" do
|
|
26
|
+
visit '/admin/events'
|
|
27
|
+
page.should have_selector('#toolbar div.button_with_label a.icon_button span.icon.create')
|
|
28
|
+
end
|
|
30
29
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
it "should list existing items" do
|
|
31
|
+
visit '/admin/events'
|
|
32
|
+
page.should have_content("My Event")
|
|
33
|
+
page.should have_content("something fancy")
|
|
34
|
+
page.should have_content("12.32")
|
|
35
|
+
end
|
|
35
36
|
|
|
36
|
-
|
|
37
|
-
visit '/admin/events'
|
|
38
|
-
page.should have_content("My Event")
|
|
39
|
-
page.should have_content("something fancy")
|
|
40
|
-
page.should have_content("12.32")
|
|
41
|
-
end
|
|
37
|
+
it "should list existing resource-items nicely formatted"
|
|
42
38
|
|
|
43
|
-
|
|
39
|
+
end
|
|
44
40
|
|
|
45
|
-
|
|
41
|
+
describe "form for creating and updating items" do
|
|
42
|
+
it "renders an input field according to the attribute's type"
|
|
43
|
+
end
|
|
46
44
|
|
|
47
|
-
|
|
48
|
-
it "renders an input field according to the attribute's type"
|
|
49
|
-
end
|
|
45
|
+
describe "create resource item" do
|
|
50
46
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
page.should have_content "My second event"
|
|
60
|
-
page.should have_content "2012-03-03"
|
|
61
|
-
end
|
|
47
|
+
context "when form filled with valid data" do
|
|
48
|
+
it "lists the new item" do
|
|
49
|
+
visit '/admin/events/new'
|
|
50
|
+
fill_in 'event_name', :with => 'My second event'
|
|
51
|
+
fill_in 'event_starts_at', :with => DateTime.new(2012, 03, 03, 20, 00)
|
|
52
|
+
click_on 'Save'
|
|
53
|
+
page.should have_content "My second event"
|
|
54
|
+
page.should have_content "2012-03-03"
|
|
62
55
|
end
|
|
56
|
+
end
|
|
63
57
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
end
|
|
71
|
-
it "lists invalid fields"
|
|
58
|
+
context "when form filled with invalid data" do
|
|
59
|
+
it "shows the form again" do
|
|
60
|
+
visit '/admin/events/new'
|
|
61
|
+
fill_in 'event_name', :with => '' #invalid!
|
|
62
|
+
click_on 'Save'
|
|
63
|
+
page.should have_selector "input#event_name"
|
|
72
64
|
end
|
|
73
|
-
|
|
65
|
+
it "lists invalid fields"
|
|
74
66
|
end
|
|
75
67
|
|
|
76
|
-
|
|
77
|
-
it "shows the updated value"
|
|
78
|
-
end
|
|
68
|
+
end
|
|
79
69
|
|
|
80
|
-
|
|
70
|
+
describe "updating an item" do
|
|
71
|
+
it "shows the updated value"
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
describe "destroying an item" do
|
|
81
75
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
end
|
|
87
|
-
click_on 'Yes'
|
|
88
|
-
page.should have_content "My Event"
|
|
89
|
-
page.should_not have_content "My second Event"
|
|
76
|
+
it "should'n be on the list anymore", :js => true do
|
|
77
|
+
visit '/admin/events'
|
|
78
|
+
within('tr', :text => 'My second Event') do
|
|
79
|
+
click_on 'Delete'
|
|
90
80
|
end
|
|
81
|
+
click_on 'Yes'
|
|
82
|
+
page.should have_content "My Event"
|
|
83
|
+
page.should_not have_content "My second Event"
|
|
91
84
|
end
|
|
92
|
-
|
|
93
85
|
end
|
|
86
|
+
|
|
94
87
|
end
|