spud_core 0.8.13 → 0.8.15

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.
Files changed (67) hide show
  1. data/README.markdown +62 -0
  2. data/Rakefile +2 -14
  3. data/app/assets/javascripts/spud/admin/application.js +47 -18
  4. data/app/controllers/spud/admin/application_controller.rb +0 -2
  5. data/app/controllers/spud/application_controller.rb +19 -6
  6. data/app/controllers/spud/password_resets_controller.rb +37 -37
  7. data/app/controllers/spud/setup_controller.rb +2 -6
  8. data/app/helpers/spud/admin/application_helper.rb +22 -23
  9. data/app/views/layouts/spud/admin/detail.html.erb +3 -3
  10. data/app/views/spud/admin/dashboard/index.html.erb +1 -1
  11. data/lib/spud_core/configuration.rb +1 -0
  12. data/lib/spud_core/engine.rb +2 -2
  13. data/lib/spud_core/version.rb +1 -1
  14. data/spec/controllers/spud/admin/application_controller_spec.rb +49 -0
  15. data/spec/controllers/spud/admin/dashbord_controller_spec.rb +60 -0
  16. data/spec/controllers/spud/admin/users_controller_spec.rb +194 -0
  17. data/spec/controllers/spud/application_controller_spec.rb +49 -0
  18. data/spec/controllers/spud/password_reset_controller_spec.rb +93 -0
  19. data/spec/controllers/spud/setup_controller_spec.rb +56 -0
  20. data/spec/controllers/spud/sitemap_controllers_spec.rb +20 -0
  21. data/spec/controllers/spud/user_sessions_controller_spec.rb +53 -0
  22. data/spec/controllers/spud/users_controller_spec.rb +69 -0
  23. data/{test → spec}/dummy/README.rdoc +0 -0
  24. data/{test → spec}/dummy/Rakefile +0 -0
  25. data/{test → spec}/dummy/app/assets/javascripts/application.js +0 -0
  26. data/{test → spec}/dummy/app/assets/stylesheets/application.css +0 -0
  27. data/{test → spec}/dummy/app/controllers/application_controller.rb +0 -0
  28. data/{test → spec}/dummy/app/helpers/application_helper.rb +0 -0
  29. data/{test → spec}/dummy/app/views/layouts/application.html.erb +0 -0
  30. data/{test → spec}/dummy/config.ru +0 -0
  31. data/{test → spec}/dummy/config/application.rb +2 -0
  32. data/{test → spec}/dummy/config/boot.rb +0 -0
  33. data/{test → spec}/dummy/config/database.yml +0 -0
  34. data/{test → spec}/dummy/config/environment.rb +0 -0
  35. data/{test → spec}/dummy/config/environments/development.rb +0 -0
  36. data/{test → spec}/dummy/config/environments/production.rb +0 -0
  37. data/{test → spec}/dummy/config/environments/test.rb +0 -0
  38. data/{test → spec}/dummy/config/initializers/backtrace_silencers.rb +0 -0
  39. data/{test → spec}/dummy/config/initializers/inflections.rb +0 -0
  40. data/{test → spec}/dummy/config/initializers/mime_types.rb +0 -0
  41. data/{test → spec}/dummy/config/initializers/secret_token.rb +0 -0
  42. data/{test → spec}/dummy/config/initializers/session_store.rb +0 -0
  43. data/{test → spec}/dummy/config/initializers/wrap_parameters.rb +0 -0
  44. data/{test → spec}/dummy/config/locales/en.yml +0 -0
  45. data/{test → spec}/dummy/config/routes.rb +0 -0
  46. data/{test → spec}/dummy/db/schema.rb +11 -1
  47. data/spec/dummy/log/development.log +39 -0
  48. data/spec/dummy/log/test.log +54295 -0
  49. data/{test → spec}/dummy/public/404.html +0 -0
  50. data/{test → spec}/dummy/public/422.html +0 -0
  51. data/{test → spec}/dummy/public/500.html +0 -0
  52. data/{test → spec}/dummy/public/favicon.ico +0 -0
  53. data/{test → spec}/dummy/script/rails +0 -0
  54. data/spec/helpers/spud/admin/application_helper_spec.rb +150 -0
  55. data/spec/models/spud_user_spec.rb +27 -0
  56. data/spec/spec_helper.rb +40 -0
  57. data/spec/support/authlogic_helper.rb +2 -0
  58. metadata +220 -114
  59. data/README.rdoc +0 -3
  60. data/test/dummy/db/development.sqlite3 +0 -0
  61. data/test/dummy/db/test.sqlite3 +0 -0
  62. data/test/dummy/log/development.log +0 -46
  63. data/test/dummy/log/test.log +0 -17677
  64. data/test/fixtures/spud_user_settings.yml +0 -11
  65. data/test/functional/spud/password_resets_controller_test.rb +0 -7
  66. data/test/unit/helpers/spud/password_resets_helper_test.rb +0 -4
  67. data/test/unit/spud_user_settings_test.rb +0 -7
@@ -5,11 +5,11 @@
5
5
  </span>
6
6
  <h2>
7
7
  <%if @page_thumbnail%>
8
- <span class="thumb_wrapper"><%=image_tag(@page_thumbnail)%></span>
8
+ <span class="thumb_wrapper"><%=image_tag(@page_thumbnail,:hidpi_src => asset_path(@page_thumbnail.gsub(/\.png/,"@2x.png")))%></span>
9
9
  <%end%>
10
10
  <%=@page_name%>
11
11
  </h2>
12
-
12
+
13
13
  <div id="details">
14
14
  <%if content_for?(:detail_nav)%>
15
15
  <div id="detail_nav_wrapper">
@@ -28,4 +28,4 @@
28
28
  </div>
29
29
  </div>
30
30
  <%end%>
31
- <%= render :template => 'layouts/spud/admin/application' %>
31
+ <%= render :template => 'layouts/spud/admin/application' %>
@@ -3,7 +3,7 @@
3
3
  <%@admin_applications.each do |admin_application|%>
4
4
 
5
5
  <div class="admin_application" id="application_name_<%=admin_application[:name]%>"><a href="<%=admin_application[:url]%>">
6
- <div class="image_wrapper"><%=image_tag(admin_application[:thumbnail],:class=>"#{admin_application[:retina] == true ? 'replace-2x' : ''}")%></div>
6
+ <div class="image_wrapper"><%=image_tag(admin_application[:thumbnail],:hidpi_src=>hidpi_asset(admin_application[:thumbnail]))%></div>
7
7
  <span class="application_name"><%=admin_application[:name]%></span>
8
8
  </a>
9
9
  </div>
@@ -9,6 +9,7 @@ module Spud
9
9
  self.multisite_config = []
10
10
  self.from_address = "no-reply@spudengine.com"
11
11
  def self.site_config_for_host(host)
12
+
12
13
  configs = Spud::Core.multisite_config.select{|p| p[:hosts].include?(host)}
13
14
  if configs.blank?
14
15
  return nil
@@ -11,8 +11,8 @@ require 'will_paginate'
11
11
  module Spud
12
12
  module Core
13
13
  class Engine < ::Rails::Engine
14
- require 'spud_core/belongs_to_app'
15
- require 'spud_core/searchable'
14
+ require "#{root}/lib/spud_core/belongs_to_app"
15
+ require "#{root}/lib/spud_core/searchable"
16
16
 
17
17
  def self.require_model(model_name)
18
18
  require "#{root}/app/models/#{model_name}"
@@ -1,5 +1,5 @@
1
1
  module Spud
2
2
  module Core
3
- VERSION = "0.8.13"
3
+ VERSION = "0.8.15"
4
4
  end
5
5
  end
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spud::Admin::ApplicationController do
4
+
5
+
6
+ before :each do
7
+ activate_authlogic
8
+ @user = FactoryGirl.create(:spud_user)
9
+ @session = SpudUserSession.create(@user)
10
+ end
11
+
12
+ describe :require_admin_user do
13
+ controller(Spud::Admin::ApplicationController) do
14
+ def index
15
+ render :nothing => true
16
+ end
17
+ end
18
+ it "should respond successfully if the current user is a super admin" do
19
+ @user.update_attribute(:super_admin, true)
20
+ get :index
21
+
22
+ response.should be_success
23
+ end
24
+
25
+ it "should respond successfully if the current user has admin permissions" do
26
+ @user.spud_admin_permissions.create(:name => "pages", :access => true)
27
+ get :index
28
+
29
+ response.should be_success
30
+ end
31
+
32
+ it "should redirect to the login if the current user is not logged in" do
33
+ @session.destroy
34
+ get :index
35
+
36
+ response.should redirect_to(new_spud_user_session_url)
37
+ end
38
+
39
+ it "should redirect to the root for a user without administrative priviledges" do
40
+ @user.super_admin = false
41
+ @user.spud_admin_permissions = []
42
+ @user.save
43
+ get :index
44
+
45
+ response.should redirect_to(root_url)
46
+ end
47
+
48
+ end
49
+ end
@@ -0,0 +1,60 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spud::Admin::DashboardController do
4
+ before(:all) do
5
+ Spud::Core.configure do |config|
6
+ config.admin_applications = [
7
+ {name: "Blog", thumbnail: "/url/to/image", url: "/url/to/app", order: 0},
8
+ {name: "Settings", thumbnail: "/url/to/image", url: "/url/to/app", order: 0},
9
+ {name: "Pages", thumbnail: "/url/to/image", url: "/url/to/app", order: 0},
10
+ ]
11
+ end
12
+ end
13
+
14
+ before(:each) do
15
+ activate_authlogic
16
+ @user = FactoryGirl.create(:spud_user)
17
+ SpudUserSession.create(@user)
18
+ end
19
+
20
+ describe :index do
21
+ it "should display applications the current user has access to given that the current user is not a super admin" do
22
+ @user.super_admin = false
23
+ @user.spud_admin_permissions.build(FactoryGirl.attributes_for(:spud_admin_permission, :name => "Blog", :access => true))
24
+ @user.spud_admin_permissions.build(FactoryGirl.attributes_for(:spud_admin_permission, :name => "Pages", :access => true))
25
+ @user.save
26
+ get :index
27
+
28
+ assigns(:admin_applications).collect{|app| app[:name] }.should =~ @user.spud_admin_permissions.collect{|permission| permission.name }
29
+ end
30
+
31
+ it "should not display applications the current user does not have access to given that the current user is not a super admin" do
32
+ @user.super_admin = false
33
+ @user.spud_admin_permissions.build(FactoryGirl.attributes_for(:spud_admin_permission, :name => "Blog", :access => true))
34
+ @user.spud_admin_permissions.build(FactoryGirl.attributes_for(:spud_admin_permission, :name => "Pages", :access => true))
35
+ @user.save
36
+ get :index
37
+
38
+ assigns(:admin_applications).collect{|app| app[:name] }.should_not include(:settings)
39
+ end
40
+
41
+ it "should display all the applications despite the users permissions given the current user is a super admin" do
42
+ @user.super_admin = true
43
+ @user.spud_admin_permissions.build(FactoryGirl.attributes_for(:spud_admin_permission, :name => "Blog", :access => true))
44
+ @user.save
45
+ get :index
46
+
47
+ assigns(:admin_applications).collect{|app| app[:name] }.should =~ Spud::Core.admin_applications.collect{|app| app[:name] }
48
+ end
49
+
50
+ it "should display applications in order of user preference if available" do
51
+ @user.super_admin = true
52
+ @user.save
53
+ @user.spud_user_settings.create(:key => "app_order",:value => "Pages,Settings")
54
+ get :index
55
+
56
+ assigns(:admin_applications).collect{|app| app[:name] }.should =~ ["Pages","Settings","Blog"]
57
+
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,194 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spud::Admin::UsersController do
4
+ before(:each) do
5
+ activate_authlogic
6
+ @user = SpudUserSession.create(FactoryGirl.build(:spud_user, :super_admin => true))
7
+ end
8
+
9
+ describe :index do
10
+ it "should return an array of users" do
11
+ 2.times {|x| FactoryGirl.create(:spud_user) }
12
+ get :index
13
+
14
+ assigns(:users).count.should be > 1
15
+ end
16
+
17
+ it "should not return any users if there are no users" do
18
+ get :index
19
+
20
+ assigns(:users).count.should == 1 # the currently logged in user is the only user
21
+ end
22
+
23
+ it "should not allow access to users with NO permissions" do
24
+ SpudUserSession.create(FactoryGirl.build(:spud_user, :super_admin => false))
25
+ get :index
26
+
27
+ response.should redirect_to(root_url)
28
+ end
29
+
30
+ it "should allow access to users with the correct permissions" do
31
+ u = FactoryGirl.create(:spud_user, :super_admin => false)
32
+ u.spud_admin_permissions << FactoryGirl.build(:spud_admin_permission, :name => "Users", :access => true)
33
+ SpudUserSession.create(u)
34
+ get :index
35
+
36
+ response.should be_success
37
+ end
38
+
39
+ it "should not allow access to users without permission and redirect to root_url if the user has no permissions" do
40
+ u = FactoryGirl.create(:spud_user, :super_admin => false)
41
+ u.spud_admin_permissions << []
42
+ SpudUserSession.create(u)
43
+ get :index
44
+
45
+ response.should redirect_to(root_url)
46
+ end
47
+
48
+ it "should not allow access to users without permission and redirect to root_url if the users has no other admin modules" do
49
+ u = FactoryGirl.create(:spud_user, :super_admin => false)
50
+ u.spud_admin_permissions << [
51
+ FactoryGirl.build(:spud_admin_permission, :name => "Users", :access => false)
52
+ ]
53
+ SpudUserSession.create(u)
54
+ get :index
55
+
56
+ response.should redirect_to(root_url)
57
+ end
58
+
59
+ it "should not allow access to users without permission and redirect to admin_root if the users has other admin modules" do
60
+ u = FactoryGirl.create(:spud_user, :super_admin => false)
61
+ u.spud_admin_permissions << [
62
+ FactoryGirl.build(:spud_admin_permission, :name => "Users", :access => false),
63
+ FactoryGirl.build(:spud_admin_permission, :name => "App2", :access => true)
64
+ ]
65
+ SpudUserSession.create(u)
66
+ get :index
67
+
68
+ response.should redirect_to(spud_admin_root_url)
69
+ end
70
+ end
71
+
72
+ describe :show do
73
+ it "should respond successfully" do
74
+ user = FactoryGirl.create(:spud_user)
75
+ get :show, :id => user.id
76
+
77
+ response.should be_success
78
+ end
79
+
80
+ it "should show the user" do
81
+ user = FactoryGirl.create(:spud_user)
82
+ get :show, :id => user.id
83
+
84
+ assigns(:user).id.should == user.id
85
+ end
86
+ end
87
+
88
+ describe :new do
89
+ it "should respond successfully" do
90
+ get :new, :format => :js
91
+
92
+ response.should be_success
93
+ end
94
+
95
+ it "should build a user object for the form" do
96
+ get :new, :format => :js
97
+
98
+ assigns(:user).should_not be_blank
99
+ end
100
+ end
101
+
102
+ describe :create do
103
+ context "HTML format" do
104
+ it "should create a new user with a valid form submission" do
105
+ lambda {
106
+ post :create, :spud_user => FactoryGirl.attributes_for(:spud_user)
107
+ }.should change(SpudUser, :count).by(1)
108
+ response.should be_redirect
109
+ end
110
+
111
+ it "should not create a user with an invalid form entry" do
112
+ lambda {
113
+ post :create, :spud_user => FactoryGirl.attributes_for(:spud_user, :email => nil)
114
+ }.should_not change(SpudUser, :count)
115
+ flash[:error].should_not be_blank
116
+ end
117
+ end
118
+
119
+ context "JS format" do
120
+ it "should create a new user with a valid form submission" do
121
+ lambda {
122
+ post :create, :spud_user => FactoryGirl.attributes_for(:spud_user), :format => :js
123
+ }.should change(SpudUser, :count).by(1)
124
+ response.should be_success
125
+ end
126
+
127
+ it "should not create a user with an invalid form entry" do
128
+ lambda {
129
+ post :create, :spud_user => FactoryGirl.attributes_for(:spud_user, :email => nil), :format => :js
130
+ }.should_not change(SpudUser, :count)
131
+ response.should_not be_success
132
+ end
133
+
134
+ end
135
+ end
136
+
137
+ describe :edit do
138
+ context "HTML format" do
139
+ it "should load the correct user for the edit form" do
140
+ user = FactoryGirl.create(:spud_user)
141
+ get :edit, :id => user.id
142
+
143
+ assigns(:user).id.should == user.id
144
+ end
145
+ end
146
+
147
+ context "JS format" do
148
+ it "should load the correct user for the edit form" do
149
+ user = FactoryGirl.create(:spud_user)
150
+ get :edit, :id => user.id, :format => :js
151
+
152
+ assigns(:user).id.should == user.id
153
+ end
154
+
155
+ end
156
+
157
+ end
158
+
159
+ describe :update do
160
+ it "should update the email when the first name attribute is changed" do
161
+ user = FactoryGirl.create(:spud_user)
162
+ new_name = "Adam"
163
+ lambda {
164
+ put :update, :id => user.id, :spud_user => user.attributes.merge!(:first_name => new_name)
165
+ user.reload
166
+ }.should change(user, :first_name).to(new_name)
167
+ end
168
+
169
+ it "should redirect to the admin users after a successful update" do
170
+ user = FactoryGirl.create(:spud_user)
171
+ put :update, :id => user.id, :spud_user => user.attributes.merge!(:first_name => "Adam")
172
+
173
+ response.should redirect_to(spud_admin_users_url)
174
+ end
175
+ end
176
+
177
+ describe :destroy do
178
+ it "should destroy the user" do
179
+ user = FactoryGirl.create(:spud_user)
180
+ lambda {
181
+ delete :destroy, :id => user.id
182
+ }.should change(SpudUser, :count).by(-1)
183
+ response.should be_redirect
184
+ end
185
+
186
+ it "should destroy the user with the wrong id" do
187
+ user = FactoryGirl.create(:spud_user)
188
+ lambda {
189
+ delete :destroy, :id => "23532"
190
+ }.should_not change(SpudUser, :count)
191
+ response.should be_redirect
192
+ end
193
+ end
194
+ end
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spud::ApplicationController do
4
+
5
+
6
+ before :each do
7
+ activate_authlogic
8
+ @user = FactoryGirl.create(:spud_user)
9
+ @session = SpudUserSession.create(@user)
10
+ end
11
+
12
+
13
+
14
+ describe :current_site_name do
15
+ controller(Spud::ApplicationController) do
16
+ def index
17
+ render :nothing => true
18
+ end
19
+ end
20
+ it "should return config site name if multisite is disabled" do
21
+ Spud::Core.configure do |config|
22
+ config.site_name = "Test Site"
23
+ end
24
+ @controller.current_site_name.should == 'Test Site'
25
+ end
26
+
27
+ it "should return config site name if multisite is enabled but multisite name is blank" do
28
+ Spud::Core.configure do |config|
29
+ config.site_name = "Test Site"
30
+ config.multisite_mode_enabled = true
31
+ end
32
+ @controller.current_site_name.should == 'Test Site'
33
+ end
34
+
35
+ it "should return multisite name if multisite is enabled" do
36
+ Spud::Core.configure do |config|
37
+ config.site_name = "Test Site"
38
+ config.multisite_mode_enabled = true
39
+ config.multisite_config += [{:hosts => ["test.host"],:site_name =>"Site B"}]
40
+ end
41
+
42
+ # puts request.host_with_port
43
+ # helper.request = {:host_with_port => "example.com"}
44
+ @controller.request = request
45
+ @controller.current_site_name.should == 'Site B'
46
+ end
47
+
48
+ end
49
+ end
@@ -0,0 +1,93 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spud::PasswordResetsController do
4
+ let(:user) { FactoryGirl.build(:spud_user, :id => 1) }
5
+
6
+ context :get do
7
+ describe :new do
8
+ it "should return success" do
9
+ get :new
10
+ response.should be_success
11
+ end
12
+ end
13
+
14
+ describe :edit do
15
+ context "with a valid id" do
16
+ before(:all) do
17
+ SpudUser.stubs(:find_using_perishable_token).returns(user)
18
+ end
19
+
20
+ it "should render the edit form" do
21
+ get :edit, :id => 1
22
+ response.should be_success
23
+ end
24
+ end
25
+
26
+ context "with an invalid id" do
27
+ before(:all) do
28
+ SpudUser.stubs(:find_using_perishable_token).returns(nil)
29
+ end
30
+
31
+ it "should redirect to the login form" do
32
+ get :edit, :id => user.id
33
+ response.should redirect_to(new_spud_user_session_url)
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ context :post do
40
+
41
+ describe :create do
42
+ context "with a valid user email address submitted" do
43
+ before(:each) do
44
+ user.perishable_token = "jfdlsafhbkvabuadfbds"
45
+ SpudUser.stubs(:find_by_email).returns(user)
46
+ end
47
+
48
+ it "should trigger the password notificiation" do
49
+ Spud::CoreMailer.expects(:forgot_password_notification).returns(stub(:deliver))
50
+ post :create, :email => user.email
51
+ end
52
+
53
+ it "should redirect to the login form" do
54
+ post :create, :email => user.email
55
+ response.should redirect_to(new_spud_user_session_url)
56
+ end
57
+ end
58
+
59
+ context "with an invalid user email address submitted" do
60
+ before(:each) do
61
+ SpudUser.stubs(:find_by_email).returns(nil)
62
+ end
63
+ it "should re-render the password reset form" do
64
+ post :create, :email => "invalid@email.com"
65
+ response.should render_template("new")
66
+ end
67
+ end
68
+ end
69
+
70
+ describe :update do
71
+ let(:valid_data) { {:id => user.id, :spud_user => {:password => "password", :password_confirmation => "password"}}}
72
+ let(:invalid_data) { {:id => user.id, :spud_user => {:password => "password", :password_confirmation => "drowssap"}}}
73
+
74
+ before(:each) do
75
+ SpudUser.stubs(:find_using_perishable_token).returns(user)
76
+ end
77
+
78
+ context "with valid password entry" do
79
+ it "should save and redirect to the login form" do
80
+ post :update, valid_data
81
+ response.should redirect_to(new_spud_user_session_url)
82
+ end
83
+ end
84
+
85
+ context "with an invalid password entry" do
86
+ it "should re-render the password form" do
87
+ post :update, invalid_data
88
+ response.should render_template("edit")
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end