refinerycms-testing 1.0.11 → 2.0.0
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/.rspec +2 -1
- data/lib/generators/refinery/testing/templates/Guardfile +30 -0
- data/lib/generators/refinery/testing/templates/spec/spec_helper.rb +52 -0
- data/lib/generators/refinery/testing/testing_generator.rb +14 -0
- data/lib/refinery/tasks/testing.rake +51 -0
- data/lib/refinery/testing.rb +33 -0
- data/lib/refinery/testing/controller_macros.rb +8 -0
- data/lib/refinery/testing/controller_macros/authentication.rb +43 -0
- data/lib/refinery/testing/controller_macros/methods.rb +33 -0
- data/lib/refinery/testing/railtie.rb +31 -0
- data/lib/refinery/testing/request_macros.rb +7 -0
- data/lib/refinery/testing/request_macros/authentication.rb +63 -0
- data/lib/refinery/testing/url_helper.rb +9 -0
- data/lib/refinerycms-testing.rb +1 -50
- data/refinerycms-testing.gemspec +19 -51
- metadata +191 -169
- data/config/cucumber.yml +0 -11
- data/features/step_definitions/web_steps.rb +0 -227
- data/features/support/env.rb +0 -63
- data/features/support/factories.rb +0 -1
- data/features/support/negative_expectations_helper.rb +0 -57
- data/features/support/paths.rb +0 -92
- data/lib/gemspec.rb +0 -50
- data/lib/generators/refinerycms_testing_generator.rb +0 -28
- data/lib/generators/templates/features/support/paths.rb +0 -19
- data/lib/tasks/cucumber.rake +0 -53
- data/lib/tasks/rcov.rake +0 -47
- data/spec/rcov.opts +0 -2
- data/spec/spec_helper.rb +0 -83
- data/spec/support/refinery/controller_macros.rb +0 -27
data/.rspec
CHANGED
@@ -0,0 +1,30 @@
|
|
1
|
+
extensions = Dir[File.expand_path('../vendor/extensions/*', __FILE__)]
|
2
|
+
|
3
|
+
guard 'spork', :wait => 60, :cucumber => false, :rspec_env => { 'RAILS_ENV' => 'test' } do
|
4
|
+
watch('config/application.rb')
|
5
|
+
watch('config/environment.rb')
|
6
|
+
watch(%r{^config/environments/.+\.rb$})
|
7
|
+
watch(%r{^config/initializers/.+\.rb$})
|
8
|
+
watch('spec/spec_helper.rb')
|
9
|
+
watch(%r{^spec/support/.+\.rb$})
|
10
|
+
|
11
|
+
extensions.each do |extension|
|
12
|
+
watch(%r{^#{extension}/spec/support/.+\.rb$})
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
guard 'rspec', :version => 2, :spec_paths => extensions.map{|e| "#{e}/spec"},
|
17
|
+
:cli => (File.read('.rspec').split("\n").join(' ') if File.exists?('.rspec')) do
|
18
|
+
extensions.each do |extension|
|
19
|
+
watch(%r{^#{extension}/spec/.+_spec\.rb$})
|
20
|
+
watch(%r{^#{extension}/app/(.+)\.rb$}) { |m| "#{extension}/spec/#{m[1]}_spec.rb" }
|
21
|
+
watch(%r{^#{extension}/lib/(.+)\.rb$}) { |m| "#{extension}/spec/lib/#{m[1]}_spec.rb" }
|
22
|
+
watch(%r{^#{extension}/app/controllers/(.+)_(controller)\.rb$}) { |m| ["#{extension}/spec/routing/#{m[1]}_routing_spec.rb", "#{extension}/spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "#{extension}/spec/requests/#{m[1]}_spec.rb"] }
|
23
|
+
watch(%r{^#{extension}/spec/support/(.+)\.rb$}) { "#{extension}/spec" }
|
24
|
+
watch("#{extension}/spec/spec_helper.rb") { "#{extension}/spec" }
|
25
|
+
watch("#{extension}/config/routes.rb") { "#{extension}/spec/routing" }
|
26
|
+
watch("#{extension}/app/controllers/application_controller.rb") { "#{extension}/spec/controllers" }
|
27
|
+
# Capybara request specs
|
28
|
+
watch(%r{^#{extension}/app/views/(.+)/.*\.(erb|haml)$}) { |m| "#{extension}/spec/requests/#{m[1]}_spec.rb" }
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
ENGINE_RAILS_ROOT = File.join(File.dirname(__FILE__), '../') unless defined?(ENGINE_RAILS_ROOT)
|
2
|
+
|
3
|
+
def setup_environment
|
4
|
+
# Configure Rails Environment
|
5
|
+
ENV["RAILS_ENV"] ||= 'test'
|
6
|
+
|
7
|
+
require File.expand_path("../../config/environment", __FILE__)
|
8
|
+
|
9
|
+
require 'rspec/rails'
|
10
|
+
require 'capybara/rspec'
|
11
|
+
|
12
|
+
Rails.backtrace_cleaner.remove_silencers!
|
13
|
+
|
14
|
+
RSpec.configure do |config|
|
15
|
+
config.mock_with :rspec
|
16
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
17
|
+
config.filter_run :focus => true
|
18
|
+
config.run_all_when_everything_filtered = true
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def each_run
|
23
|
+
Rails.cache.clear
|
24
|
+
ActiveSupport::Dependencies.clear
|
25
|
+
FactoryGirl.reload
|
26
|
+
|
27
|
+
# Requires supporting files with custom matchers and macros, etc,
|
28
|
+
# in ./support/ and its subdirectories including factories.
|
29
|
+
([ENGINE_RAILS_ROOT, Rails.root.to_s].uniq | ::Refinery::Plugins.registered.pathnames).map{|p|
|
30
|
+
Dir[File.join(p, 'spec', 'support', '**', '*.rb').to_s]
|
31
|
+
}.flatten.sort.each do |support_file|
|
32
|
+
require support_file
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# If spork is available in the Gemfile it'll be used but we don't force it.
|
37
|
+
unless (begin; require 'spork'; rescue LoadError; nil end).nil?
|
38
|
+
Spork.prefork do
|
39
|
+
# Loading more in this block will cause your tests to run faster. However,
|
40
|
+
# if you change any configuration or code from libraries loaded here, you'll
|
41
|
+
# need to restart spork for it take effect.
|
42
|
+
setup_environment
|
43
|
+
end
|
44
|
+
|
45
|
+
Spork.each_run do
|
46
|
+
# This code will be run each time you run your specs.
|
47
|
+
each_run
|
48
|
+
end
|
49
|
+
else
|
50
|
+
setup_environment
|
51
|
+
each_run
|
52
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
namespace :refinery do
|
2
|
+
namespace :testing do
|
3
|
+
desc "Generates a dummy app for testing"
|
4
|
+
task :dummy_app => [:setup_dummy_app, :setup_extension, "extension:setup"]
|
5
|
+
|
6
|
+
task :setup_dummy_app do
|
7
|
+
require 'refinerycms'
|
8
|
+
|
9
|
+
params = %w(--quiet)
|
10
|
+
params << "--database=#{ENV['DB']}" if ENV['DB']
|
11
|
+
|
12
|
+
Refinery::DummyGenerator.start params
|
13
|
+
|
14
|
+
Refinery::CmsGenerator.start %w[--quiet --fresh-installation]
|
15
|
+
end
|
16
|
+
|
17
|
+
# This task is a hook to allow extensions to pass configuration
|
18
|
+
# Just define this inside your extension's Rakefile or a .rake file
|
19
|
+
# and pass arbitrary code. Example:
|
20
|
+
#
|
21
|
+
# namespace :refinery do
|
22
|
+
# namespace :testing do
|
23
|
+
# task :setup_extension do
|
24
|
+
# require 'refinerycms-my-extension'
|
25
|
+
# Refinery::MyEngineGenerator.start %w[--quiet]
|
26
|
+
# end
|
27
|
+
# end
|
28
|
+
# end
|
29
|
+
task :setup_extension do
|
30
|
+
end
|
31
|
+
|
32
|
+
desc "Remove the dummy app used for testing"
|
33
|
+
task :clean_dummy_app do
|
34
|
+
path = Refinery::Testing::Railtie.target_extension_path.join('spec', 'dummy')
|
35
|
+
|
36
|
+
path.rmtree if path.exist?
|
37
|
+
end
|
38
|
+
|
39
|
+
namespace :extension do
|
40
|
+
desc "Initialize the testing environment"
|
41
|
+
task :setup => [:init_test_database]
|
42
|
+
|
43
|
+
task :init_test_database do
|
44
|
+
task_params = [%Q{ bundle exec rake -f #{Refinery::Testing::Railtie.target_extension_path.join('Rakefile')} }]
|
45
|
+
task_params << %Q{ app:db:test:prepare }
|
46
|
+
|
47
|
+
system task_params.join(' ')
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'refinerycms-core'
|
2
|
+
require 'rspec-rails'
|
3
|
+
require 'factory_girl_rails'
|
4
|
+
|
5
|
+
module Refinery
|
6
|
+
autoload :TestingGenerator, 'generators/refinery/testing/testing_generator'
|
7
|
+
|
8
|
+
module Testing
|
9
|
+
class << self
|
10
|
+
def root
|
11
|
+
@root ||= Pathname.new(File.expand_path('../../../', __FILE__))
|
12
|
+
end
|
13
|
+
|
14
|
+
# Load the factories of all currently loaded extensions
|
15
|
+
def load_factories
|
16
|
+
Refinery.extensions.each do |extension_const|
|
17
|
+
if extension_const.respond_to?(:factory_paths)
|
18
|
+
extension_const.send(:factory_paths).each do |path|
|
19
|
+
FactoryGirl.definition_file_paths << path
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
FactoryGirl.find_definitions
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
require 'refinery/testing/railtie'
|
28
|
+
require 'refinery/testing/url_helper'
|
29
|
+
|
30
|
+
autoload :ControllerMacros, 'refinery/testing/controller_macros'
|
31
|
+
autoload :RequestMacros, 'refinery/testing/request_macros'
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Testing
|
3
|
+
module ControllerMacros
|
4
|
+
module Authentication
|
5
|
+
def self.extended(base)
|
6
|
+
base.send(:include, Devise::TestHelpers)
|
7
|
+
end
|
8
|
+
|
9
|
+
def login_user
|
10
|
+
before(:each) do
|
11
|
+
@user = FactoryGirl.create(:user)
|
12
|
+
@request.env["devise.mapping"] = Devise.mappings[:admin]
|
13
|
+
sign_in @user
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def login_refinery_user
|
18
|
+
before(:each) do
|
19
|
+
@refinery_user = FactoryGirl.create(:refinery_user)
|
20
|
+
@request.env["devise.mapping"] = Devise.mappings[:admin]
|
21
|
+
sign_in @refinery_user
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def login_refinery_superuser
|
26
|
+
before(:each) do
|
27
|
+
@refinery_superuser = FactoryGirl.create(:refinery_superuser)
|
28
|
+
@request.env["devise.mapping"] = Devise.mappings[:admin]
|
29
|
+
sign_in @refinery_superuser
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def login_refinery_translator
|
34
|
+
before(:each) do
|
35
|
+
@refinery_translator = FactoryGirl.create(:refinery_translator)
|
36
|
+
@request.env["devise.mapping"] = Devise.mappings[:admin]
|
37
|
+
sign_in @refinery_translator
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Testing
|
3
|
+
module ControllerMacros
|
4
|
+
module Methods
|
5
|
+
def get(action, parameters = nil, session = nil, flash = nil)
|
6
|
+
process_refinery_action(action, parameters, session, flash, "GET")
|
7
|
+
end
|
8
|
+
|
9
|
+
# Executes a request simulating POST HTTP method and set/volley the response
|
10
|
+
def post(action, parameters = nil, session = nil, flash = nil)
|
11
|
+
process_refinery_action(action, parameters, session, flash, "POST")
|
12
|
+
end
|
13
|
+
|
14
|
+
# Executes a request simulating PUT HTTP method and set/volley the response
|
15
|
+
def put(action, parameters = nil, session = nil, flash = nil)
|
16
|
+
process_refinery_action(action, parameters, session, flash, "PUT")
|
17
|
+
end
|
18
|
+
|
19
|
+
# Executes a request simulating DELETE HTTP method and set/volley the response
|
20
|
+
def delete(action, parameters = nil, session = nil, flash = nil)
|
21
|
+
process_refinery_action(action, parameters, session, flash, "DELETE")
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def process_refinery_action(action, parameters = nil, session = nil, flash = nil, method = "GET")
|
27
|
+
parameters ||= {}
|
28
|
+
process(action, parameters.merge!(:use_route => :refinery), session, flash, method)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Testing
|
3
|
+
class Railtie < Rails::Railtie
|
4
|
+
railtie_name :refinerycms_testing
|
5
|
+
|
6
|
+
class << self
|
7
|
+
attr_reader :target_extension_path # :nodoc:
|
8
|
+
alias_method :target_engine_path, :target_extension_path
|
9
|
+
|
10
|
+
# Loads Rake tasks to assist with manipulating dummy applications for testing extensions. Takes
|
11
|
+
# a string representing the path to your application or extension.
|
12
|
+
#
|
13
|
+
# This function should be used in the Rakefile of your application or extension
|
14
|
+
#
|
15
|
+
# Example:
|
16
|
+
# Refinery::Testing::Railtie.load_dummy_tasks(File.dirname(__FILE__))
|
17
|
+
#
|
18
|
+
# Refinery::Testing::Railtie.load_dummy_tasks('/users/reset/code/mynew_app')
|
19
|
+
def load_dummy_tasks(app_root)
|
20
|
+
@target_extension_path = Pathname.new(app_root.to_s)
|
21
|
+
load 'refinery/tasks/testing.rake'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
config.after_initialize do
|
26
|
+
Refinery.register_extension(Refinery::Testing)
|
27
|
+
Testing.load_factories
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Testing
|
3
|
+
module RequestMacros
|
4
|
+
module Authentication
|
5
|
+
def login_refinery_user
|
6
|
+
before do
|
7
|
+
password = '123456'
|
8
|
+
refinery_user = FactoryGirl.create(:refinery_user, {
|
9
|
+
:username => "refinerycms",
|
10
|
+
:password => password,
|
11
|
+
:password_confirmation => password,
|
12
|
+
:email => "refinerycms@refinerycms.com"
|
13
|
+
})
|
14
|
+
|
15
|
+
visit refinery.new_refinery_user_session_path
|
16
|
+
|
17
|
+
fill_in "Login", :with => refinery_user.username
|
18
|
+
fill_in "Password", :with => password
|
19
|
+
|
20
|
+
click_button "Sign in"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def login_refinery_superuser
|
25
|
+
before(:each) do
|
26
|
+
password = '123456'
|
27
|
+
refinery_superuser = FactoryGirl.create(:refinery_superuser, {
|
28
|
+
:username => "refinerycms",
|
29
|
+
:password => password,
|
30
|
+
:password_confirmation => password,
|
31
|
+
:email => "refinerycms@refinerycms.com"
|
32
|
+
})
|
33
|
+
|
34
|
+
visit refinery.new_refinery_user_session_path
|
35
|
+
|
36
|
+
fill_in "Login", :with => refinery_superuser.username
|
37
|
+
fill_in "Password", :with => password
|
38
|
+
|
39
|
+
click_button "Sign in"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def login_refinery_translator
|
44
|
+
before do
|
45
|
+
password = '123456'
|
46
|
+
FactoryGirl.create(:refinery_user)
|
47
|
+
user = FactoryGirl.create(:refinery_translator, {
|
48
|
+
:password => password,
|
49
|
+
:password_confirmation => password
|
50
|
+
})
|
51
|
+
|
52
|
+
visit refinery.new_refinery_user_session_path
|
53
|
+
|
54
|
+
fill_in "Login", :with => user.username
|
55
|
+
fill_in "Password", :with => password
|
56
|
+
|
57
|
+
click_button "Sign in"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
data/lib/refinerycms-testing.rb
CHANGED
@@ -1,50 +1 @@
|
|
1
|
-
require '
|
2
|
-
require 'rspec-rails'
|
3
|
-
|
4
|
-
module Refinery
|
5
|
-
module Testing
|
6
|
-
|
7
|
-
class << self
|
8
|
-
attr_accessor :root
|
9
|
-
def root
|
10
|
-
@root ||= Pathname.new(File.expand_path('../../', __FILE__))
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
class Engine < ::Rails::Engine
|
15
|
-
|
16
|
-
initializer 'serve static assets' do |app|
|
17
|
-
app.middleware.insert_after ::ActionDispatch::Static, ::ActionDispatch::Static, "#{root}/public"
|
18
|
-
end
|
19
|
-
|
20
|
-
config.before_configuration do
|
21
|
-
::Refinery::Application.module_eval do
|
22
|
-
def load_tasks
|
23
|
-
super
|
24
|
-
|
25
|
-
# To get specs from all Refinery engines, not just those in Rails.root/spec/
|
26
|
-
::RSpec::Core::RakeTask.module_eval do
|
27
|
-
def pattern
|
28
|
-
[@pattern] | ::Refinery::Plugins.registered.pathnames.map{|p|
|
29
|
-
p.join('spec', '**', '*_spec.rb').to_s
|
30
|
-
}
|
31
|
-
end
|
32
|
-
end if defined?(::RSpec::Core::RakeTask)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
config.after_initialize do
|
38
|
-
::Refinery::Plugin.register do |plugin|
|
39
|
-
plugin.pathname = root
|
40
|
-
plugin.name = 'refinerycms_testing_plugin'
|
41
|
-
plugin.version = ::Refinery.version
|
42
|
-
plugin.hide_from_menu = true
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
::Refinery.engines << 'testing'
|
1
|
+
require 'refinery/testing'
|