browsercms_s3 3.0.4 → 3.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +1 -0
- data/app/controllers/cms/content_controller.rb +22 -17
- data/app/controllers/cms/pages_controller.rb +17 -15
- data/app/controllers/cms/sessions_controller.rb +17 -10
- data/app/helpers/cms/menu_helper.rb +1 -1
- data/app/models/group.rb +13 -2
- data/app/models/guest_user.rb +9 -3
- data/app/models/page.rb +0 -11
- data/app/views/cms/blocks/index.html.erb +1 -0
- data/app/views/cms/content/show.html.erb +2 -2
- data/browsercms.gemspec +6 -4
- data/lib/cms/authentication/controller.rb +26 -7
- data/public/javascripts/cms/content_library.js +36 -0
- data/test/functional/cms/content_controller_test.rb +2 -2
- data/test/functional/cms/pages_controller_test.rb +7 -0
- data/test/functional/cms/sessions_controller_test.rb +26 -2
- data/test/test_helper.rb +1 -1
- data/test/unit/models/group_test.rb +6 -0
- data/test/unit/models/user_test.rb +2 -2
- metadata +3 -2
data/README.markdown
CHANGED
@@ -50,6 +50,7 @@ The user documentation and guides for this version of the application can be fou
|
|
50
50
|
|
51
51
|
1. http://browsercms.org/doc/guides/html/index.html - User guides and manuals that cover the features and general functionality of the project. (Found locally at doc/guides/html/index.html)
|
52
52
|
2. http://browsercms.org/doc/app/index.html - The RDoc API documenation (locally at doc/app/index.html)
|
53
|
+
3. http://wiki.github.com/browsermedia/browsercms - The project wiki
|
53
54
|
|
54
55
|
## Modifying the source
|
55
56
|
If you want to experiment with the source code, the BrowserCMS project can bootstrap itself as a web application. This allows developers who want to contribute to the project to easily alter and test changes. To run the application itself, do the following:
|
@@ -58,7 +58,7 @@ class Cms::ContentController < Cms::ApplicationController
|
|
58
58
|
# if caching is not enabled
|
59
59
|
def render_page
|
60
60
|
@_page_route.execute(self) if @_page_route
|
61
|
-
prepare_connectables_for_render
|
61
|
+
prepare_connectables_for_render
|
62
62
|
render :layout => @page.layout, :action => 'show'
|
63
63
|
end
|
64
64
|
|
@@ -95,7 +95,7 @@ class Cms::ContentController < Cms::ApplicationController
|
|
95
95
|
@template.instance_variable_set("#{v}", nil)
|
96
96
|
end
|
97
97
|
|
98
|
-
prepare_connectables_for_render
|
98
|
+
prepare_connectables_for_render
|
99
99
|
render :layout => @page.layout, :template => 'cms/content/show', :status => status
|
100
100
|
else
|
101
101
|
handle_server_error(exception)
|
@@ -105,23 +105,28 @@ class Cms::ContentController < Cms::ApplicationController
|
|
105
105
|
# If any of the page's connectables (portlets, etc) are renderable, they may have a render method
|
106
106
|
# which does "controller" stuff, so we need to get that run before rendering the page.
|
107
107
|
def prepare_connectables_for_render
|
108
|
-
|
109
|
-
@page.
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
108
|
+
|
109
|
+
@_connectors = @page.connectors.for_page_version(@page.version)
|
110
|
+
@_connectables = @_connectors.map(&:connectable_with_deleted)
|
111
|
+
unless (logged_in? && current_user.able_to?(:administrate, :edit_content, :publish_content))
|
112
|
+
worst_exception = nil
|
113
|
+
@_connectables.each do |c|
|
114
|
+
begin
|
115
|
+
c.prepare_to_render(self)
|
116
|
+
rescue
|
117
|
+
logger.debug "THROWN EXCEPTION by connectable #{c}: #{$!}"
|
118
|
+
case $!
|
119
|
+
when ActiveRecord::RecordNotFound
|
120
|
+
raise
|
121
|
+
when Cms::Errors::AccessDenied
|
122
|
+
worst_exception = $!
|
123
|
+
else
|
124
|
+
c.render_exception = $!
|
125
|
+
end
|
121
126
|
end
|
122
127
|
end
|
123
|
-
|
124
|
-
|
128
|
+
raise worst_exception if worst_exception
|
129
|
+
end
|
125
130
|
end
|
126
131
|
|
127
132
|
# ----- Before Filters -------------------------------------------------------
|
@@ -1,5 +1,5 @@
|
|
1
1
|
class Cms::PagesController < Cms::BaseController
|
2
|
-
|
2
|
+
|
3
3
|
before_filter :set_toolbar_tab
|
4
4
|
before_filter :load_section, :only => [:new, :create]
|
5
5
|
before_filter :load_page, :only => [:versions, :version, :revert_to, :destroy]
|
@@ -18,7 +18,7 @@ class Cms::PagesController < Cms::BaseController
|
|
18
18
|
def show
|
19
19
|
redirect_to Page.find(params[:id]).path
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
def create
|
23
23
|
@page = Page.new(params[:page])
|
24
24
|
@page.section = @section
|
@@ -38,7 +38,7 @@ class Cms::PagesController < Cms::BaseController
|
|
38
38
|
render :action => "edit"
|
39
39
|
end
|
40
40
|
rescue ActiveRecord::StaleObjectError => e
|
41
|
-
@other_version = @page.class.find(@page.id)
|
41
|
+
@other_version = @page.class.find(@page.id)
|
42
42
|
render :action => "edit"
|
43
43
|
end
|
44
44
|
|
@@ -55,7 +55,7 @@ class Cms::PagesController < Cms::BaseController
|
|
55
55
|
end
|
56
56
|
end
|
57
57
|
end
|
58
|
-
|
58
|
+
|
59
59
|
#status actions
|
60
60
|
{:publish => "published", :hide => "hidden", :archive => "archived"}.each do |status, verb|
|
61
61
|
define_method status do
|
@@ -74,25 +74,27 @@ class Cms::PagesController < Cms::BaseController
|
|
74
74
|
end
|
75
75
|
end
|
76
76
|
end
|
77
|
-
|
77
|
+
|
78
78
|
def version
|
79
79
|
@page = @page.as_of_version(params[:version])
|
80
80
|
@show_toolbar = true
|
81
81
|
@show_page_toolbar = true
|
82
|
+
@_connectors = @page.connectors.for_page_version(@page.version)
|
83
|
+
@_connectables = @_connectors.map(&:connectable_with_deleted)
|
82
84
|
render :layout => @page.layout, :template => 'cms/content/show'
|
83
|
-
end
|
84
|
-
|
85
|
+
end
|
86
|
+
|
85
87
|
def revert_to
|
86
88
|
if @page.revert_to(params[:version])
|
87
89
|
flash[:notice] = "Page '#{@page.name}' was reverted to version #{params[:version]}"
|
88
90
|
end
|
89
|
-
|
91
|
+
|
90
92
|
respond_to do |format|
|
91
93
|
format.html { redirect_to @page.path }
|
92
94
|
format.js { render :template => 'cms/shared/show_notice' }
|
93
|
-
end
|
95
|
+
end
|
94
96
|
end
|
95
|
-
|
97
|
+
|
96
98
|
private
|
97
99
|
def strip_publish_params
|
98
100
|
unless current_user.able_to?(:publish_content)
|
@@ -105,17 +107,17 @@ class Cms::PagesController < Cms::BaseController
|
|
105
107
|
@page = Page.find(params[:id])
|
106
108
|
raise Cms::Errors::AccessDenied unless current_user.able_to_edit?(@page)
|
107
109
|
end
|
108
|
-
|
110
|
+
|
109
111
|
def load_draft_page
|
110
112
|
load_page
|
111
113
|
@page = @page.as_of_draft_version
|
112
114
|
end
|
113
|
-
|
115
|
+
|
114
116
|
def load_section
|
115
117
|
@section = Section.find(params[:section_id])
|
116
118
|
raise Cms::Errors::AccessDenied unless current_user.able_to_edit?(@section)
|
117
119
|
end
|
118
|
-
|
120
|
+
|
119
121
|
def hide_toolbar
|
120
122
|
@hide_page_toolbar = true
|
121
123
|
end
|
@@ -123,9 +125,9 @@ class Cms::PagesController < Cms::BaseController
|
|
123
125
|
def set_toolbar_tab
|
124
126
|
@toolbar_tab = :sitemap
|
125
127
|
end
|
126
|
-
|
128
|
+
|
127
129
|
def load_templates
|
128
130
|
@templates = PageTemplate.options
|
129
131
|
end
|
130
|
-
|
132
|
+
|
131
133
|
end
|
@@ -3,11 +3,11 @@ class Cms::SessionsController < Cms::ApplicationController
|
|
3
3
|
|
4
4
|
before_filter :redirect_to_cms_site, :only => [:new]
|
5
5
|
layout "cms/login"
|
6
|
-
|
6
|
+
|
7
7
|
def new
|
8
|
-
|
8
|
+
|
9
9
|
end
|
10
|
-
|
10
|
+
|
11
11
|
def create
|
12
12
|
logout_keeping_session!
|
13
13
|
user = User.authenticate(params[:login], params[:password])
|
@@ -21,7 +21,7 @@ class Cms::SessionsController < Cms::ApplicationController
|
|
21
21
|
handle_remember_cookie! new_cookie_flag
|
22
22
|
flash[:notice] = "Logged in successfully"
|
23
23
|
if params[:success_url] # Coming from login portlet
|
24
|
-
redirect_to(
|
24
|
+
redirect_to((!params[:success_url].blank? && params[:success_url]) || session[:return_to] || "/")
|
25
25
|
session[:return_to] = nil
|
26
26
|
else
|
27
27
|
redirect_back_or_default(cms_home_url)
|
@@ -30,7 +30,7 @@ class Cms::SessionsController < Cms::ApplicationController
|
|
30
30
|
note_failed_signin
|
31
31
|
@login = params[:login]
|
32
32
|
@remember_me = params[:remember_me]
|
33
|
-
flash[:login_error] = "Log in failed"
|
33
|
+
flash[:login_error] = "Log in failed"
|
34
34
|
if params[:success_url] # Coming from login portlet
|
35
35
|
if params[:success_url].blank?
|
36
36
|
success_url = session[:return_to] || "/"
|
@@ -42,23 +42,30 @@ class Cms::SessionsController < Cms::ApplicationController
|
|
42
42
|
flash[:success_url] = success_url
|
43
43
|
redirect_to request.referrer
|
44
44
|
else
|
45
|
-
render :action => "new"
|
46
|
-
end
|
45
|
+
render :action => "new"
|
46
|
+
end
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
50
|
def destroy
|
51
|
+
logout_user
|
52
|
+
redirect_back_or_default("/")
|
53
|
+
end
|
54
|
+
|
55
|
+
protected
|
56
|
+
|
57
|
+
# Pulled this out as a separate method so that modules (like bcms_cas) can override/alias destroy and
|
58
|
+
# not have a redirect happen as a side effect.
|
59
|
+
def logout_user
|
51
60
|
logout_killing_session!
|
52
61
|
cookies.delete :openSectionNodes
|
53
62
|
flash[:notice] = "You have been logged out."
|
54
|
-
redirect_back_or_default("/")
|
55
63
|
end
|
56
64
|
|
57
|
-
protected
|
58
65
|
# Track failed login attempts
|
59
66
|
def note_failed_signin
|
60
67
|
flash[:error] = "Couldn't log you in as '#{params[:login]}'"
|
61
68
|
logger.warn "Failed login for '#{params[:login]}' from #{request.remote_ip} at #{Time.now.utc}"
|
62
69
|
end
|
63
|
-
|
70
|
+
|
64
71
|
end
|
@@ -22,7 +22,7 @@ module Cms
|
|
22
22
|
# * <tt>:children</tt> - An array of hashes containing the child menu items. This is where the
|
23
23
|
# tree structure comes in.
|
24
24
|
def render_menu(options = {})
|
25
|
-
options[:items] ||= menu_items
|
25
|
+
options[:items] ||= menu_items(options)
|
26
26
|
options[:partial] ||= "cms/menus/menu"
|
27
27
|
options[:id] ||= "menu"
|
28
28
|
options[:class] ||= "menu"
|
data/app/models/group.rb
CHANGED
@@ -1,5 +1,11 @@
|
|
1
|
+
#
|
2
|
+
# A group represents a collection of permissions. Each User can be assigned to one or more groups, and the sum of
|
3
|
+
# their permissions from all groups combined represents what they can do.
|
4
|
+
#
|
1
5
|
class Group < ActiveRecord::Base
|
2
|
-
|
6
|
+
|
7
|
+
GUEST_CODE = "guest"
|
8
|
+
|
3
9
|
has_many :user_group_memberships
|
4
10
|
has_many :users, :through => :user_group_memberships
|
5
11
|
|
@@ -26,5 +32,10 @@ class Group < ActiveRecord::Base
|
|
26
32
|
def cms_access?
|
27
33
|
group_type && group_type.cms_access?
|
28
34
|
end
|
29
|
-
|
35
|
+
|
36
|
+
# Finds the guest group, which is a special group that represents public non-logged in users.
|
37
|
+
def self.guest
|
38
|
+
with_code(GUEST_CODE).first
|
39
|
+
end
|
40
|
+
|
30
41
|
end
|
data/app/models/guest_user.rb
CHANGED
@@ -1,7 +1,13 @@
|
|
1
|
+
#
|
2
|
+
# Guests are a special user that represents a non-logged in user. The main reason to create an explicit
|
3
|
+
# instance of this type of user is so that the permissions a Guest user can have can be set via the Admin interface.
|
4
|
+
#
|
5
|
+
# Every request that a non-logged in user makes will use this User's permissions to determine what they can/can't do.
|
6
|
+
#
|
1
7
|
class GuestUser < User
|
2
|
-
|
8
|
+
|
3
9
|
def initialize(attributes={})
|
4
|
-
super({:login =>
|
10
|
+
super({:login => Group::GUEST_CODE, :first_name => "Anonymous", :last_name => "User"}.merge(attributes))
|
5
11
|
@guest = true
|
6
12
|
end
|
7
13
|
|
@@ -18,7 +24,7 @@ class GuestUser < User
|
|
18
24
|
end
|
19
25
|
|
20
26
|
def group
|
21
|
-
@group ||= Group.
|
27
|
+
@group ||= Group.guest
|
22
28
|
end
|
23
29
|
|
24
30
|
def groups
|
data/app/models/page.rb
CHANGED
@@ -151,17 +151,6 @@ class Page < ActiveRecord::Base
|
|
151
151
|
def delete_connectors
|
152
152
|
connectors.for_page_version(version).all.each{|c| c.destroy }
|
153
153
|
end
|
154
|
-
|
155
|
-
def connectables_by_connector
|
156
|
-
@connectables_by_connector ||= connectors.for_page_version(version).inject({}) do |mem, connector|
|
157
|
-
connectable = connector.connectable_with_deleted
|
158
|
-
if connectable.class.versioned?
|
159
|
-
connectable = connectable.as_of_version(connector.connectable_version)
|
160
|
-
end
|
161
|
-
mem[connector] = connectable
|
162
|
-
mem
|
163
|
-
end
|
164
|
-
end
|
165
154
|
|
166
155
|
#This is done to let copy_connectors know which version to pull from
|
167
156
|
#copy_connectors will get called later as an after_update callback
|
@@ -12,9 +12,9 @@
|
|
12
12
|
<iframe src="<%=h cms_toolbar_path(:page_id => @page.id, :page_version => @page.version, :mode => @mode, :page_toolbar => @show_page_toolbar ? 1 : 0) %>" width="100%" height="<%= @show_page_toolbar ? 159 : 100 %>px" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" name="cms_toolbar"></iframe>
|
13
13
|
<% end %>
|
14
14
|
|
15
|
-
<% @
|
15
|
+
<% @_connectors.each_with_index do |connector, i| %>
|
16
16
|
<% content_for(connector.container.to_sym) do %>
|
17
|
-
<%= render_connector_and_connectable(connector,
|
17
|
+
<%= render_connector_and_connectable(connector, @_connectables[i]) %>
|
18
18
|
<% end %>
|
19
19
|
<% end %>
|
20
20
|
|
data/browsercms.gemspec
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{browsercms}
|
8
|
-
s.version = "3.0.
|
8
|
+
s.version = "3.0.5"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["BrowserMedia"]
|
12
|
-
s.date = %q{2009-
|
12
|
+
s.date = %q{2009-11-09}
|
13
13
|
s.email = %q{github@browsermedia.com}
|
14
14
|
s.extra_rdoc_files = [
|
15
15
|
"LICENSE.txt",
|
@@ -1172,6 +1172,7 @@ Gem::Specification.new do |s|
|
|
1172
1172
|
"public/images/cms/usercontrols_bg.png",
|
1173
1173
|
"public/images/cms/usercontrols_bg_cap.png",
|
1174
1174
|
"public/javascripts/cms/application.js",
|
1175
|
+
"public/javascripts/cms/content_library.js",
|
1175
1176
|
"public/javascripts/cms/editor.js",
|
1176
1177
|
"public/javascripts/cms/sitemap.js",
|
1177
1178
|
"public/javascripts/jquery-ui.js",
|
@@ -1315,3 +1316,4 @@ Gem::Specification.new do |s|
|
|
1315
1316
|
else
|
1316
1317
|
end
|
1317
1318
|
end
|
1319
|
+
|
@@ -1,3 +1,27 @@
|
|
1
|
+
#
|
2
|
+
# Defines the authentication behavior for controllers in BrowserCMS. It can be added to any controller that needs to
|
3
|
+
# hook into the BrowserCMS Authentication behavior like so:
|
4
|
+
#
|
5
|
+
# class MySuperSecureController < ApplicationController
|
6
|
+
# include Cms::Authentication::Controller
|
7
|
+
#
|
8
|
+
# It is based off Restful_Authentication, and adds in behavior to deal with several concepts specific to BrowserCMS.
|
9
|
+
#
|
10
|
+
# (Note: 10/8/09 - I was comparing this to a very old version of the generated code from Restful_Authentication,
|
11
|
+
# so some of the following items may be 'stock' to that. (Especially #2)
|
12
|
+
#
|
13
|
+
# 1. Guests - These represents users that are not logged in. What guests can see and do can be modified via the CMS UI. Guests
|
14
|
+
# are not considered to be 'logged in'.
|
15
|
+
# 2. 'Current' User - The currently logged in user is stored in a thread local, and can be accessed anywhere via 'User.current'.
|
16
|
+
# This allows model code to easily record which user is making changes to records, for versioning, etc.
|
17
|
+
#
|
18
|
+
# 3. 'Admin' Access Denied Page - If users try to access a protected controller, they are redirected to the CMS administration Login page
|
19
|
+
# which may be different than the 'front end' user login page. (Cms::Controller handles that differently)
|
20
|
+
#
|
21
|
+
#
|
22
|
+
# To Dos: It appears as though we are storing the 'current' user in two places, @current_user and User.current. This is probably not DRY, but
|
23
|
+
# more testing would be needed.
|
24
|
+
#
|
1
25
|
module Cms
|
2
26
|
module Authentication
|
3
27
|
module Controller
|
@@ -12,6 +36,7 @@ module Cms
|
|
12
36
|
# If the user is not logged in, this will be set to the guest user, which represents a public
|
13
37
|
# user, who will likely have more limited permissions
|
14
38
|
def current_user
|
39
|
+
# Note: We have disabled basic_http_auth
|
15
40
|
@current_user ||= begin
|
16
41
|
User.current = (login_from_session || login_from_cookie || User.guest)
|
17
42
|
end
|
@@ -61,7 +86,7 @@ module Cms
|
|
61
86
|
|
62
87
|
# Redirect as appropriate when an access request fails.
|
63
88
|
#
|
64
|
-
# The default action is to redirect to the login screen.
|
89
|
+
# The default action is to redirect to the BrowserCMS admin login screen.
|
65
90
|
#
|
66
91
|
# Override this method in your controllers if you want to have special
|
67
92
|
# behavior in case the user is not authorized
|
@@ -73,11 +98,6 @@ module Cms
|
|
73
98
|
store_location
|
74
99
|
redirect_to cms_login_path
|
75
100
|
end
|
76
|
-
# format.any doesn't work in rails version < http://dev.rubyonrails.org/changeset/8987
|
77
|
-
# you may want to change format.any to e.g. format.any(:js, :xml)
|
78
|
-
# format.any do
|
79
|
-
# request_http_basic_authentication 'Web Password'
|
80
|
-
# end
|
81
101
|
end
|
82
102
|
end
|
83
103
|
|
@@ -162,7 +182,6 @@ module Cms
|
|
162
182
|
|
163
183
|
# Cookies shouldn't be allowed to persist past their freshness date,
|
164
184
|
# and they should be changed at each login
|
165
|
-
|
166
185
|
def valid_remember_cookie?
|
167
186
|
return nil unless User.current
|
168
187
|
(User.current.remember_token?) &&
|
@@ -0,0 +1,36 @@
|
|
1
|
+
jQuery(function($){
|
2
|
+
|
3
|
+
//----- Helper Functions -----------------------------------------------------
|
4
|
+
//In all of this code, we are defining functions that we use later
|
5
|
+
//None of this actually manipulates the DOM in any way
|
6
|
+
|
7
|
+
//This is used to get the id part of an elementId
|
8
|
+
//For example, if you have section_node_5,
|
9
|
+
//you pass this 'section_node_5', 'section_node'
|
10
|
+
//and this returns 5
|
11
|
+
var getId = function(elementId, s) {
|
12
|
+
return elementId.replace(s,'')
|
13
|
+
}
|
14
|
+
|
15
|
+
|
16
|
+
var nodeOnDoubleClick = function() {
|
17
|
+
if($('#edit_button').hasClass('disabled')) {
|
18
|
+
//$('#view_button').click()
|
19
|
+
location.href = $('#view_button')[0].href
|
20
|
+
} else {
|
21
|
+
//$('#edit_button').click()
|
22
|
+
location.href = $('#edit_button')[0].href
|
23
|
+
}
|
24
|
+
}
|
25
|
+
|
26
|
+
var addNodeOnDoubleClick = function() {
|
27
|
+
$('#blocks tr').dblclick(nodeOnDoubleClick)
|
28
|
+
}
|
29
|
+
|
30
|
+
//----- Init -----------------------------------------------------------------
|
31
|
+
//In other words, stuff that happens when the page loads
|
32
|
+
//This is where we actually manipulate the DOM, fire events, etc.
|
33
|
+
|
34
|
+
addNodeOnDoubleClick()
|
35
|
+
|
36
|
+
})
|
@@ -230,7 +230,7 @@ class Cms::ContentCachingEnabledControllerTest < ActionController::TestCase
|
|
230
230
|
ActionController::Base.perform_caching = true
|
231
231
|
@page = Factory(:page, :section => root_section, :name => "Test Page", :path => "/page", :publish_on_save => true)
|
232
232
|
@registered_user = Factory(:user)
|
233
|
-
@registered_user.groups << Group.
|
233
|
+
@registered_user.groups << Group.guest
|
234
234
|
end
|
235
235
|
|
236
236
|
def teardown
|
@@ -315,7 +315,7 @@ class Cms::ContentCachingDisabledControllerTest < ActionController::TestCase
|
|
315
315
|
ActionController::Base.perform_caching = false
|
316
316
|
@page = Factory(:page, :section => root_section, :name => "Test Page", :path => "/page", :publish_on_save => true)
|
317
317
|
@registered_user = Factory(:user)
|
318
|
-
@registered_user.groups << Group.
|
318
|
+
@registered_user.groups << Group.guest
|
319
319
|
end
|
320
320
|
|
321
321
|
def test_guest_user_views_page_on_public_site
|
@@ -66,6 +66,13 @@ class Cms::PagesControllerTest < ActionController::TestCase
|
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
69
|
+
def test_version
|
70
|
+
create_page
|
71
|
+
@page.update_attributes(:name => "V2")
|
72
|
+
get :version, :id => @page.to_param, :version => 1
|
73
|
+
assert_response :success
|
74
|
+
end
|
75
|
+
|
69
76
|
def test_revert_to
|
70
77
|
create_page
|
71
78
|
@page.update_attributes(:name => "V2")
|
@@ -2,6 +2,9 @@ require File.join(File.dirname(__FILE__), '/../../test_helper')
|
|
2
2
|
|
3
3
|
class Cms::SessionsControllerTest < ActionController::TestCase
|
4
4
|
include Cms::ControllerTestHelper
|
5
|
+
def teardown
|
6
|
+
User.current = nil
|
7
|
+
end
|
5
8
|
|
6
9
|
def test_not_redirected_to_cms_site_if_public_site
|
7
10
|
@request.host = "foo.com"
|
@@ -19,6 +22,22 @@ class Cms::SessionsControllerTest < ActionController::TestCase
|
|
19
22
|
assert_select "title", "CMS Login"
|
20
23
|
end
|
21
24
|
|
25
|
+
def test_return_to
|
26
|
+
user = Factory(:user)
|
27
|
+
expected_url = "/expected_url"
|
28
|
+
|
29
|
+
post :create, {:success_url => "", :login => user.login, :password => "password"}, {:return_to => expected_url }
|
30
|
+
assert_redirected_to(expected_url)
|
31
|
+
end
|
32
|
+
def test_success_url_overrides_return_to
|
33
|
+
user = Factory(:user)
|
34
|
+
expected_url = "/expected_url"
|
35
|
+
|
36
|
+
post :create, {:success_url => expected_url, :login => user.login, :password => "password"}, {:return_to => "/somewhere_else" }
|
37
|
+
|
38
|
+
assert_redirected_to(expected_url)
|
39
|
+
end
|
40
|
+
|
22
41
|
end
|
23
42
|
|
24
43
|
class Cms::SessionsControllerCacheEnabledTest < ActionController::TestCase
|
@@ -48,5 +67,10 @@ class Cms::SessionsControllerCacheEnabledTest < ActionController::TestCase
|
|
48
67
|
log @response.body
|
49
68
|
assert_select "title", "CMS Login"
|
50
69
|
end
|
51
|
-
|
52
|
-
|
70
|
+
|
71
|
+
test "destroy" do
|
72
|
+
Cms::SessionsController.any_instance.expects(:logout_user)
|
73
|
+
delete :destroy
|
74
|
+
assert_redirected_to "/"
|
75
|
+
end
|
76
|
+
end
|
data/test/test_helper.rb
CHANGED
@@ -4,4 +4,10 @@ class GroupTest < ActiveSupport::TestCase
|
|
4
4
|
def test_valid
|
5
5
|
assert Factory.build(:group).valid?
|
6
6
|
end
|
7
|
+
|
8
|
+
test "Find guest group via method" do
|
9
|
+
expected = Group.find_by_code(Group::GUEST_CODE)
|
10
|
+
assert_not_nil expected, "Validates that our fixture code is loading a guest user into the database."
|
11
|
+
assert_equal expected, Group.guest
|
12
|
+
end
|
7
13
|
end
|
@@ -72,7 +72,7 @@ end
|
|
72
72
|
class UserPermissionsTest < ActiveSupport::TestCase
|
73
73
|
def setup
|
74
74
|
@user = Factory(:user)
|
75
|
-
@guest_group = Group.
|
75
|
+
@guest_group = Group.guest
|
76
76
|
end
|
77
77
|
|
78
78
|
def test_user_permissions
|
@@ -210,7 +210,7 @@ end
|
|
210
210
|
class GuestUserTest < ActiveSupport::TestCase
|
211
211
|
def setup
|
212
212
|
@user = User.guest
|
213
|
-
@guest_group = Group.
|
213
|
+
@guest_group = Group.guest
|
214
214
|
@public_page = Factory(:page, :section => root_section)
|
215
215
|
@protected_section = Factory(:section, :parent => root_section)
|
216
216
|
@protected_page = Factory(:page, :section => @protected_section)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: browsercms_s3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anthony Underwood
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-10
|
12
|
+
date: 2009-11-10 00:00:00 +00:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -1179,6 +1179,7 @@ files:
|
|
1179
1179
|
- public/images/cms/usercontrols_bg.png
|
1180
1180
|
- public/images/cms/usercontrols_bg_cap.png
|
1181
1181
|
- public/javascripts/cms/application.js
|
1182
|
+
- public/javascripts/cms/content_library.js
|
1182
1183
|
- public/javascripts/cms/editor.js
|
1183
1184
|
- public/javascripts/cms/sitemap.js
|
1184
1185
|
- public/javascripts/jquery-ui.js
|