alchemy_cms 2.8.3 → 2.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (152) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +3 -2
  3. data/README.md +108 -25
  4. data/alchemy_cms.gemspec +0 -1
  5. data/app/assets/stylesheets/alchemy/archive.scss +2 -2
  6. data/app/assets/stylesheets/alchemy/base.scss +0 -37
  7. data/app/assets/stylesheets/alchemy/elements.scss +1 -1
  8. data/app/assets/stylesheets/alchemy/flash.scss +1 -1
  9. data/app/assets/stylesheets/alchemy/form_elements.scss +1 -1
  10. data/app/assets/stylesheets/alchemy/icon-font.css.scss +40 -40
  11. data/app/assets/stylesheets/alchemy/icons.scss +4 -32
  12. data/app/assets/stylesheets/alchemy/jquery-ui.scss +4 -4
  13. data/app/assets/stylesheets/alchemy/menubar.css.scss +20 -12
  14. data/app/assets/stylesheets/alchemy/modules.scss +0 -4
  15. data/app/assets/stylesheets/alchemy/search.scss +1 -1
  16. data/app/assets/stylesheets/alchemy/sitemap.scss +1 -1
  17. data/app/assets/stylesheets/tiny_mce/plugins/inlinepopups/skins/alchemy-tinymce-dialog/window.css.scss +3 -3
  18. data/app/controllers/alchemy/admin/base_controller.rb +12 -8
  19. data/app/controllers/alchemy/admin/dashboard_controller.rb +10 -5
  20. data/app/controllers/alchemy/admin/elements_controller.rb +1 -1
  21. data/app/controllers/alchemy/admin/essence_pictures_controller.rb +8 -1
  22. data/app/controllers/alchemy/admin/layoutpages_controller.rb +1 -1
  23. data/app/controllers/alchemy/admin/pages_controller.rb +11 -6
  24. data/app/controllers/alchemy/admin/resources_controller.rb +2 -2
  25. data/app/controllers/alchemy/admin/users_controller.rb +1 -1
  26. data/app/controllers/alchemy/base_controller.rb +71 -37
  27. data/app/controllers/alchemy/elements_controller.rb +1 -1
  28. data/app/controllers/alchemy/pages_controller.rb +9 -3
  29. data/app/controllers/alchemy/pictures_controller.rb +1 -0
  30. data/app/helpers/alchemy/admin/base_helper.rb +2 -10
  31. data/app/helpers/alchemy/admin/pages_helper.rb +1 -1
  32. data/app/helpers/alchemy/base_helper.rb +1 -1
  33. data/app/helpers/alchemy/pages_helper.rb +1 -1
  34. data/app/models/alchemy/attachment.rb +3 -4
  35. data/app/models/alchemy/cell.rb +1 -1
  36. data/app/models/alchemy/content.rb +3 -4
  37. data/app/models/alchemy/element.rb +5 -6
  38. data/app/models/alchemy/folded_page.rb +1 -1
  39. data/app/models/alchemy/language.rb +1 -1
  40. data/app/models/alchemy/message.rb +1 -7
  41. data/app/models/alchemy/page.rb +12 -10
  42. data/app/models/alchemy/page/{cells.rb → page_cells.rb} +2 -2
  43. data/app/models/alchemy/page/{elements.rb → page_elements.rb} +2 -2
  44. data/app/models/alchemy/page/{naming.rb → page_naming.rb} +1 -1
  45. data/app/models/alchemy/page/{natures.rb → page_natures.rb} +3 -3
  46. data/app/models/alchemy/page/{scopes.rb → page_scopes.rb} +3 -3
  47. data/app/models/alchemy/page/page_users.rb +33 -0
  48. data/app/models/alchemy/picture.rb +3 -3
  49. data/app/models/alchemy/site.rb +2 -2
  50. data/app/views/alchemy/admin/dashboard/_locked_pages.html.erb +1 -1
  51. data/app/views/alchemy/admin/dashboard/_recent_pages.html.erb +1 -1
  52. data/app/views/alchemy/admin/dashboard/_sites.html.erb +1 -1
  53. data/app/views/alchemy/admin/dashboard/index.html.erb +10 -4
  54. data/app/views/alchemy/admin/pages/_page.html.erb +1 -1
  55. data/app/views/alchemy/admin/pages/update.js.erb +1 -1
  56. data/app/views/alchemy/{user_sessions → base}/leave.html.erb +2 -2
  57. data/app/views/alchemy/base/permission_denied.js.erb +3 -2
  58. data/app/views/layouts/alchemy/admin.html.erb +6 -3
  59. data/config/alchemy/config.yml +1 -11
  60. data/config/alchemy/modules.yml +0 -12
  61. data/config/locales/alchemy.de.yml +3 -40
  62. data/config/locales/alchemy.en.yml +2 -22
  63. data/config/routes.rb +2 -27
  64. data/db/migrate/20130827094554_alchemy_two_point_six.rb +0 -31
  65. data/lib/alchemy/auth_accessors.rb +54 -0
  66. data/lib/alchemy/capistrano.rb +5 -17
  67. data/lib/alchemy/engine.rb +7 -7
  68. data/lib/alchemy/errors.rb +6 -0
  69. data/lib/alchemy/essence.rb +2 -2
  70. data/lib/alchemy/seeder.rb +1 -1
  71. data/lib/alchemy/tasks/helpers.rb +83 -0
  72. data/lib/alchemy/test_support/auth_helpers.rb +35 -0
  73. data/lib/alchemy/test_support/controller_requests.rb +37 -0
  74. data/{spec/support → lib/alchemy/test_support}/factories.rb +7 -28
  75. data/{spec/support/alchemy → lib/alchemy/test_support}/integration_helpers.rb +9 -36
  76. data/lib/alchemy/upgrader.rb +8 -7
  77. data/lib/alchemy/upgrader/two_point_nine.rb +33 -0
  78. data/lib/alchemy/userstamp.rb +10 -0
  79. data/lib/alchemy/version.rb +1 -3
  80. data/lib/rails/templates/alchemy.rb +1 -0
  81. data/lib/tasks/alchemy/db.rake +5 -5
  82. data/spec/controllers/admin/attachments_controller_spec.rb +3 -3
  83. data/spec/controllers/admin/dashboard_controller_spec.rb +55 -34
  84. data/spec/controllers/admin/elements_controller_spec.rb +1 -1
  85. data/spec/controllers/admin/essence_pictures_controller_spec.rb +22 -6
  86. data/spec/controllers/admin/pages_controller_spec.rb +41 -58
  87. data/spec/controllers/admin/resources_controller_spec.rb +30 -5
  88. data/spec/controllers/admin/trash_controller_spec.rb +1 -1
  89. data/spec/controllers/attachments_controller_spec.rb +26 -44
  90. data/spec/controllers/base_controller_spec.rb +8 -33
  91. data/spec/controllers/elements_controller_spec.rb +1 -1
  92. data/spec/controllers/pages_controller_spec.rb +7 -15
  93. data/spec/controllers/pictures_controller_spec.rb +44 -5
  94. data/spec/dummy/app/controllers/application_controller.rb +9 -1
  95. data/spec/dummy/app/models/user.rb +14 -0
  96. data/spec/dummy/db/migrate/20130827094554_alchemy_two_point_six.rb +0 -31
  97. data/spec/dummy/db/schema.rb +0 -31
  98. data/spec/features/admin/language_tree_feature_spec.rb +34 -0
  99. data/spec/features/admin/pages_controller_spec.rb +1 -1
  100. data/spec/features/pages_controller_spec.rb +5 -12
  101. data/spec/features/picture_security_spec.rb +2 -2
  102. data/spec/features/security_spec.rb +6 -45
  103. data/spec/features/translation_integration_spec.rb +11 -20
  104. data/spec/{support → fixtures}/80x60.png +0 -0
  105. data/spec/support/image with spaces.png b/data/spec/fixtures/image with → spaces.png +0 -0
  106. data/spec/{support → fixtures}/image.png +0 -0
  107. data/spec/{support → fixtures}/image2.PNG +0 -0
  108. data/spec/{support → fixtures}/image3.jpeg +0 -0
  109. data/spec/helpers/admin/base_helper_spec.rb +31 -43
  110. data/spec/helpers/admin/pages_helper_spec.rb +4 -2
  111. data/spec/helpers/base_helper_spec.rb +10 -3
  112. data/spec/helpers/pages_helper_spec.rb +32 -22
  113. data/spec/models/attachment_spec.rb +1 -1
  114. data/spec/models/element_spec.rb +33 -57
  115. data/spec/models/message_spec.rb +0 -16
  116. data/spec/models/page_spec.rb +62 -26
  117. data/spec/models/picture_spec.rb +5 -5
  118. data/spec/spec_helper.rb +13 -4
  119. data/spec/tasks/helpers_spec.rb +213 -0
  120. metadata +33 -75
  121. data/app/controllers/alchemy/passwords_controller.rb +0 -35
  122. data/app/controllers/alchemy/user_sessions_controller.rb +0 -67
  123. data/app/controllers/alchemy/users_controller.rb +0 -46
  124. data/app/mailers/alchemy/notifications.rb +0 -33
  125. data/app/models/alchemy/page/users.rb +0 -25
  126. data/app/models/alchemy/user.rb +0 -183
  127. data/app/views/alchemy/admin/users/_table.html.erb +0 -69
  128. data/app/views/alchemy/admin/users/_user.html.erb +0 -39
  129. data/app/views/alchemy/admin/users/edit.html.erb +0 -6
  130. data/app/views/alchemy/admin/users/index.html.erb +0 -58
  131. data/app/views/alchemy/admin/users/new.html.erb +0 -6
  132. data/app/views/alchemy/notifications/admin_user_created.de.text.erb +0 -15
  133. data/app/views/alchemy/notifications/admin_user_created.en.text.erb +0 -15
  134. data/app/views/alchemy/notifications/registered_user_created.de.text.erb +0 -13
  135. data/app/views/alchemy/notifications/registered_user_created.en.text.erb +0 -13
  136. data/app/views/alchemy/notifications/reset_password_instructions.de.text.erb +0 -8
  137. data/app/views/alchemy/notifications/reset_password_instructions.en.text.erb +0 -8
  138. data/app/views/alchemy/passwords/edit.html.erb +0 -35
  139. data/app/views/alchemy/passwords/new.html.erb +0 -30
  140. data/app/views/alchemy/user_sessions/new.html.erb +0 -48
  141. data/app/views/alchemy/users/new.html.erb +0 -14
  142. data/config/initializers/devise.rb +0 -242
  143. data/config/locales/devise.de.yml +0 -58
  144. data/config/locales/devise.en.yml +0 -60
  145. data/lib/rails/generators/alchemy/devise/devise_generator.rb +0 -29
  146. data/spec/controllers/admin/users_controller_spec.rb +0 -132
  147. data/spec/controllers/passwords_controller_spec.rb +0 -16
  148. data/spec/controllers/user_sessions_controller_spec.rb +0 -22
  149. data/spec/controllers/users_controller_spec.rb +0 -66
  150. data/spec/mailers/notifications_spec.rb +0 -67
  151. data/spec/models/user_spec.rb +0 -252
  152. data/spec/support/alchemy/controller_helpers.rb +0 -35
@@ -0,0 +1,54 @@
1
+ # Provides authentication accessors.
2
+ #
3
+ # Alchemy has some defaults for user model name and login logout path names:
4
+ #
5
+ # +Alchemy.user_class_name+ defaults to +'User'+
6
+ # +Alchemy.login_path defaults to +'/login'+
7
+ # +Alchemy.logout_path defaults to +'/admin/logout'+
8
+ #
9
+ # Anyway, you can tell Alchemy about your authentication model configuration:
10
+ #
11
+ # 1. Your user class name - @see: Alchemy.user_class
12
+ # 2. The path to the login form - @see: Alchemy.login_path
13
+ # 3. The path to the logout method - @see: Alchemy.logout_path
14
+ #
15
+ # == Example
16
+ #
17
+ # # config/initializers/alchemy.rb
18
+ # Alchemy.user_class_name = 'Admin'
19
+ # Alchemy.login_path = '/auth/login'
20
+ # Alchemy.logout_path = '/auth/logout'
21
+ #
22
+ # If you don't have your own user model or don't want to provide one,
23
+ # add the `alchemy-devise` gem into your App's Gemfile.
24
+ #
25
+ module Alchemy
26
+ mattr_accessor :user_class_name, :login_path, :logout_path
27
+
28
+ # Defaults
29
+ #
30
+ @@user_class_name = 'User'
31
+ @@login_path = '/login'
32
+ @@logout_path = '/logout'
33
+
34
+ # Returns the user class
35
+ #
36
+ # Set your App's user class to Alchemy.user_class_name in an initializer.
37
+ #
38
+ # Defaults to +User+
39
+ #
40
+ # == Example
41
+ #
42
+ # # config/initializers/alchemy.rb
43
+ # Alchemy.user_class_name = 'Admin'
44
+ #
45
+ def self.user_class
46
+ @@user_class ||= begin
47
+ if @@user_class_name.is_a?(String)
48
+ @@user_class_name.constantize
49
+ else
50
+ raise 'Alchemy.user_class_name must be a String, not a Class.'
51
+ end
52
+ end
53
+ end
54
+ end
@@ -1,6 +1,9 @@
1
1
  # This recipe contains Capistrano recipes for handling the uploads, ferret index and picture cache files while deploying your application.
2
2
  # It also contains a ferret:rebuild_index task to rebuild the index after deploying your application.
3
3
  require 'fileutils'
4
+ require 'alchemy/tasks/helpers'
5
+
6
+ include Alchemy::Tasks::Helpers
4
7
 
5
8
  ::Capistrano::Configuration.instance(:must_exist).load do
6
9
 
@@ -100,7 +103,7 @@ EOF
100
103
  database
101
104
  end
102
105
 
103
- desc "Imports the database into your local development machine."
106
+ desc "Imports the server database into your local development machine."
104
107
  task :database, :roles => [:db], :only => {:primary => true} do
105
108
  require 'spinner'
106
109
  server = find_servers_for_task(current_task).first
@@ -147,23 +150,8 @@ EOF
147
150
  def db_import_cmd(server)
148
151
  dump_cmd = "cd #{current_path} && #{rake} RAILS_ENV=#{fetch(:rails_env, 'production')} alchemy:db:dump"
149
152
  sql_stream = "ssh -p #{fetch(:port, 22)} #{user}@#{server} '#{dump_cmd}'"
150
- "#{sql_stream} | mysql #{mysql_credentials} #{database_config['database']}"
153
+ "#{sql_stream} | #{database_import_command(database_config['adapter'])} 1>/dev/null 2>&1"
151
154
  end
152
-
153
- def mysql_credentials
154
- mysql_credentials = []
155
- if database_config['username']
156
- mysql_credentials << "--user='#{database_config['username']}'"
157
- end
158
- if database_config['password']
159
- mysql_credentials << "--password='#{database_config['password']}'"
160
- end
161
- if (host = database_config['host']) && (host != 'localhost')
162
- mysql_credentials << "--host='#{host}'"
163
- end
164
- mysql_credentials.join(' ')
165
- end
166
-
167
155
  end
168
156
 
169
157
  end
@@ -2,7 +2,6 @@
2
2
  require 'coffee-rails'
3
3
  require 'compass-rails'
4
4
  require 'declarative_authorization'
5
- require 'devise'
6
5
  require 'dynamic_form'
7
6
  require 'jquery-rails'
8
7
  require 'jquery-ui-rails'
@@ -10,9 +9,11 @@ require 'kaminari'
10
9
  require 'rails3-jquery-autocomplete'
11
10
  require 'sass-rails'
12
11
  require 'sassy-buttons'
12
+ require 'userstamp'
13
13
 
14
14
  # Require globally used Alchemy mixins
15
15
  require 'alchemy/auth/engine'
16
+ require 'alchemy/auth_accessors'
16
17
  require 'alchemy/config'
17
18
  require 'alchemy/errors'
18
19
  require 'alchemy/essence'
@@ -26,6 +27,7 @@ require 'alchemy/mount_point'
26
27
  require 'alchemy/name_conversions'
27
28
  require 'alchemy/page_layout'
28
29
  require 'alchemy/picture_attributes'
30
+ require 'alchemy/resource'
29
31
  require 'alchemy/tinymce'
30
32
 
31
33
  # Require hacks
@@ -37,7 +39,6 @@ require File.join(File.dirname(__FILE__), '../middleware/flash_session_cookie')
37
39
 
38
40
  module Alchemy
39
41
  class Engine < Rails::Engine
40
-
41
42
  isolate_namespace Alchemy
42
43
  engine_name 'alchemy'
43
44
  config.mount_at = '/'
@@ -65,11 +66,6 @@ module Alchemy
65
66
  )
66
67
  end
67
68
 
68
- # filter sensitive information during logging
69
- initializer "alchemy.params.filter" do |app|
70
- app.config.filter_parameters += [:password, :password_confirmation]
71
- end
72
-
73
69
  initializer "alchemy.add_authorization_rules" do
74
70
  Alchemy::Auth::Engine.get_instance.load(File.join(File.dirname(__FILE__), '../..', 'config/authorization_rules.rb'))
75
71
  end
@@ -78,5 +74,9 @@ module Alchemy
78
74
  ApplicationController.send(:include, Alchemy::LanguageHelpers)
79
75
  end
80
76
 
77
+ config.after_initialize do
78
+ require 'alchemy/userstamp'
79
+ end
80
+
81
81
  end
82
82
  end
@@ -56,4 +56,10 @@ module Alchemy
56
56
  end
57
57
  end
58
58
 
59
+ class NoCurrentUserFoundError < StandardError
60
+ # Raised if no current_user is found to authorize against.
61
+ def message
62
+ "You need to provide a current_user method in your ApplicationController that returns the current authenticated user."
63
+ end
64
+ end
59
65
  end
@@ -32,7 +32,7 @@ module Alchemy #:nodoc:
32
32
  attr_accessor :validation_errors
33
33
  attr_accessible :ingredient
34
34
  include Alchemy::Essence::InstanceMethods
35
- stampable(:stamper_class_name => 'Alchemy::User')
35
+ stampable stamper_class_name: Alchemy.user_class_name
36
36
  validate :essence_validations, :on => :update
37
37
  has_many :contents, :as => :essence
38
38
  has_many :elements, :through => :contents
@@ -106,7 +106,7 @@ module Alchemy #:nodoc:
106
106
  case description['validate_format_as']
107
107
  when 'email'
108
108
  then
109
- matcher = Devise.email_regexp
109
+ matcher = Alchemy::Config.get(:email_regexp)
110
110
  when 'url'
111
111
  then
112
112
  matcher = /^[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/ix
@@ -2,7 +2,7 @@ require "alchemy/shell"
2
2
 
3
3
  module Alchemy
4
4
  class Seeder
5
- extend Shell
5
+ extend Alchemy::Shell
6
6
 
7
7
  class << self
8
8
 
@@ -0,0 +1,83 @@
1
+ module Alchemy
2
+ module Tasks
3
+ module Helpers
4
+
5
+ def database_dump_command(adapter)
6
+ database_command(adapter, 'dump')
7
+ end
8
+
9
+ def database_import_command(adapter)
10
+ database_command(adapter, 'import')
11
+ end
12
+
13
+ def database_config
14
+ raise "Could not find #{database_config_file}!" if !File.exists?(database_config_file)
15
+ @database_config ||= begin
16
+ config_file = YAML.load_file(database_config_file)
17
+ config_file.fetch(environment)
18
+ rescue KeyError
19
+ raise "Database configuration for #{environment} not found!"
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ def database_command(adapter, action='import')
26
+ case adapter.to_s
27
+ when /mysql/
28
+ "#{mysql_command(mysql_command_for(action))} #{database_config['database']}"
29
+ when /postgresql/
30
+ "#{postgres_command(postgres_command_for(action))} #{database_config['database']}"
31
+ else
32
+ raise ArgumentError, "Alchemy only supports #{action}ing MySQL and PostgreSQL databases. #{adapter} is not supported."
33
+ end
34
+ end
35
+
36
+ def mysql_command(cmd='mysql')
37
+ command = [cmd]
38
+ if database_config['username']
39
+ command << "--user='#{database_config['username']}'"
40
+ end
41
+ if database_config['password']
42
+ command << "--password='#{database_config['password']}'"
43
+ end
44
+ if (host = database_config['host']) && (host != 'localhost')
45
+ command << "--host='#{host}'"
46
+ end
47
+ command.join(' ')
48
+ end
49
+
50
+ def postgres_command(cmd='psql')
51
+ command = []
52
+ if database_config['password']
53
+ command << "PGPASSWORD='#{database_config['password']}'"
54
+ end
55
+ command << cmd
56
+ if database_config['username']
57
+ command << "--username='#{database_config['username']}'"
58
+ end
59
+ if (host = database_config['host']) && (host != 'localhost')
60
+ command << "--host='#{host}'"
61
+ end
62
+ command.join(' ')
63
+ end
64
+
65
+ def mysql_command_for(action)
66
+ action == 'import' ? 'mysql' : 'mysqldump'
67
+ end
68
+
69
+ def postgres_command_for(action)
70
+ action == 'import' ? 'psql' : 'pg_dump --clean'
71
+ end
72
+
73
+ def database_config_file
74
+ "./config/database.yml"
75
+ end
76
+
77
+ def environment
78
+ ENV['RAILS_ENV'] || 'development'
79
+ end
80
+
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,35 @@
1
+ module Alchemy
2
+ module TestSupport
3
+
4
+ # Helpers for authentication
5
+ #
6
+ module AuthHelpers
7
+
8
+ def sign_in(user = admin_user)
9
+ controller.stub current_alchemy_user: user
10
+ end
11
+
12
+ def registered_user
13
+ mock_user([:registered])
14
+ end
15
+
16
+ def author_user
17
+ mock_user([:author])
18
+ end
19
+
20
+ def editor_user
21
+ mock_user([:editor])
22
+ end
23
+
24
+ def admin_user
25
+ mock_user([:admin])
26
+ end
27
+
28
+ def mock_user(roles)
29
+ mock_model(Alchemy.user_class, alchemy_roles: roles.map(&:to_sym), role_symbols: roles.map(&:to_sym))
30
+ end
31
+
32
+ end
33
+
34
+ end
35
+ end
@@ -0,0 +1,37 @@
1
+ # Based on spree commerce controller hacks.
2
+ # https://github.com/spree/spree/blob/master/core/spec/support/controller_hacks.rb
3
+ # Thanks!
4
+
5
+ module Alchemy
6
+ module TestSupport
7
+ module ControllerRequests
8
+
9
+ def get(action, parameters = nil, session = nil, flash = nil)
10
+ process_alchemy_action(action, parameters, session, flash, "GET")
11
+ end
12
+
13
+ # Executes a request simulating POST HTTP method and set/volley the response
14
+ def post(action, parameters = nil, session = nil, flash = nil)
15
+ process_alchemy_action(action, parameters, session, flash, "POST")
16
+ end
17
+
18
+ # Executes a request simulating PUT HTTP method and set/volley the response
19
+ def put(action, parameters = nil, session = nil, flash = nil)
20
+ process_alchemy_action(action, parameters, session, flash, "PUT")
21
+ end
22
+
23
+ # Executes a request simulating DELETE HTTP method and set/volley the response
24
+ def delete(action, parameters = nil, session = nil, flash = nil)
25
+ process_alchemy_action(action, parameters, session, flash, "DELETE")
26
+ end
27
+
28
+ private
29
+
30
+ def process_alchemy_action(action, parameters = nil, session = nil, flash = nil, method = "GET")
31
+ parameters ||= {}
32
+ process(action, parameters.merge!(:use_route => :alchemy), session, flash, method)
33
+ end
34
+
35
+ end
36
+ end
37
+ end
@@ -1,32 +1,5 @@
1
1
  FactoryGirl.define do
2
2
 
3
- factory :user, :class => 'Alchemy::User' do
4
- firstname "John"
5
- lastname "Doe"
6
- email 'john@doe.com'
7
- login "jdoe"
8
- password 's3cr3t'
9
- password_confirmation 's3cr3t'
10
- language 'en'
11
-
12
- factory :admin_user do
13
- roles 'admin'
14
- end
15
-
16
- factory :registered_user do
17
- roles 'registered'
18
- end
19
-
20
- factory :author_user do
21
- roles 'author'
22
- end
23
-
24
- factory :editor_user do
25
- roles 'editor'
26
- end
27
-
28
- end
29
-
30
3
  factory :language, :class => 'Alchemy::Language' do
31
4
  name 'Deutsch'
32
5
  code 'de'
@@ -105,7 +78,7 @@ FactoryGirl.define do
105
78
  end
106
79
 
107
80
  factory :picture, :class => 'Alchemy::Picture' do
108
- image_file File.new(File.expand_path('../image.png', __FILE__))
81
+ image_file File.new(File.expand_path('../../../../spec/fixtures/image.png', __FILE__))
109
82
  name 'image'
110
83
  image_file_name 'image.png'
111
84
  upload_hash Time.now.hash
@@ -125,4 +98,10 @@ FactoryGirl.define do
125
98
  name 'A Site'
126
99
  host 'domain.com'
127
100
  end
101
+
102
+ factory :attachment, :class => 'Alchemy::Attachment' do
103
+ file File.new(File.expand_path('../../../../spec/fixtures/image.png', __FILE__))
104
+ name 'image'
105
+ file_name 'image.png'
106
+ end
128
107
  end
@@ -1,7 +1,7 @@
1
1
  require 'declarative_authorization/maintenance'
2
2
 
3
3
  module Alchemy
4
- module Specs
4
+ module TestSupport
5
5
 
6
6
  # Helpers for integration specs
7
7
  #
@@ -10,31 +10,19 @@ module Alchemy
10
10
  module IntegrationHelpers
11
11
  include ::Authorization::TestHelper
12
12
 
13
- # Shortcut method for:
13
+ # Used in Capybara features specs. Stubs the current_alchemy_user
14
14
  #
15
- # * create_admin_user
16
- # * login_into_alchemy
15
+ # It mocks an admin user, but you can pass in a user object that would be used as stub.
17
16
  #
18
- def authorize_as_admin
19
- create_admin_user
20
- login_into_alchemy
21
- end
22
-
23
- # Capybara actions to login into Alchemy Backend
24
- #
25
- # You should have a admin user before loggin in.
26
- #
27
- # See: create_admin_user method
28
- #
29
- def login_into_alchemy
17
+ def authorize_as_admin(user=nil)
30
18
  # Ensure that phantomjs has always the same browser language.
31
19
  if Capybara.current_driver == :poltergeist
32
20
  page.driver.headers = { 'Accept-Language' => 'en' }
33
21
  end
34
- visit login_path
35
- fill_in('user_login', :with => 'jdoe')
36
- fill_in('user_password', :with => 's3cr3t')
37
- click_on('Login')
22
+ if !user
23
+ user = mock_model('DummyUser', alchemy_roles: %w(admin), role_symbols: [:admin], language: 'en')
24
+ end
25
+ ApplicationController.any_instance.stub(:current_user).and_return(user)
38
26
  end
39
27
 
40
28
  # Load additional authorization_rules for specs.
@@ -43,21 +31,7 @@ module Alchemy
43
31
  #
44
32
  def load_authorization_rules
45
33
  instance = Alchemy::Auth::Engine.get_instance
46
- instance.load(File.join(File.dirname(__FILE__), '../../dummy', 'config/authorization_rules.rb'))
47
- end
48
-
49
- # Creates an admin user in a way it works
50
- #
51
- # You should create it once in a before block
52
- #
53
- # === Example:
54
- #
55
- # before do
56
- # create_admin_user
57
- # end
58
- #
59
- def create_admin_user
60
- FactoryGirl.create(:admin_user)
34
+ instance.load(File.join(File.dirname(__FILE__), '../../../spec/dummy', 'config/authorization_rules.rb'))
61
35
  end
62
36
 
63
37
  # Capybara actions to create a new element.
@@ -73,7 +47,6 @@ module Alchemy
73
47
  click_button 'Add'
74
48
  end
75
49
  end
76
-
77
50
  end
78
51
 
79
52
  end