plugins_tests.rake
3.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
all_plugins = Dir.glob('plugins/*').map { |f| File.basename(f) } - ['template']
def enabled_plugins
Dir.glob('config/plugins/*').map { |f| File.basename(f) } - ['README']
end
disabled_plugins = all_plugins - enabled_plugins
task 'db:test:plugins:prepare' do
if Dir.glob('config/plugins/*/db/migrate/*.rb').empty?
puts "I: skipping database setup, enabled plugins have no migrations"
else
Rake::Task['db:test:prepare'].invoke
sh 'rake db:migrate RAILS_ENV=test SCHEMA=/dev/null'
end
end
def plugin_name(plugin)
"#{plugin} plugin"
end
def run_tests(name, files_glob)
files = Dir.glob(files_glob)
if files.empty?
puts "I: no tests to run (#{name})"
else
sh 'testrb', '-Itest', *files
end
end
def run_cucumber(name, profile, files_glob)
files = Dir.glob(files_glob)
if files.empty?
puts "I: no tests to run #{name}"
else
sh 'xvfb-run', 'ruby', '-S', 'cucumber', '--profile', profile, '--format', ENV['CUCUMBER_FORMAT'] || 'progress' , *features
end
end
def plugin_test_task(name, plugin, files_glob)
desc "Run #{name} tests for #{plugin_name(plugin)}"
task name => 'db:test:plugins:prepare' do |t|
run_tests t.name, files_glob
end
end
def plugin_cucumber_task(plugin, files_glob)
task :cucumber => 'db:test:plugins:prepare' do |t|
run_cucumber t.name, :default, files_blog
end
end
def plugin_selenium_task(plugin, files_glob)
task :selenium => 'db:test:plugins:prepare' do |t|
run_cucumber t.name, :selenium, files_glob
end
end
def test_sequence_task(name, plugin, *tasks)
desc "Run all tests for #{plugin_name(plugin)}"
task name do
failed = []
tasks.each do |task|
begin
Rake::Task['test:noosfero_plugins:' + task.to_s].invoke
rescue Exception => ex
puts ex
failed << task
end
end
unless failed.empty?
fail 'Tests failed: ' + failed.join(', ')
end
end
end
namespace :test do
namespace :noosfero_plugins do
all_plugins.each do |plugin|
namespace plugin do
plugin_test_task :units, plugin, "plugins/#{plugin}/test/unit/**/*.rb"
plugin_test_task :functionals, plugin, "plugins/#{plugin}/test/functional/**/*.rb"
plugin_test_task :integration, plugin, "plugins/#{plugin}/test/integration/**/*.rb"
plugin_cucumber_task plugin, "plugins/#{plugin}/features/**/*.feature"
plugin_selenium_task plugin, "plugins/#{plugin}/features/**/*.feature"
end
test_sequence_task(plugin, plugin, "#{plugin}:units", "#{plugin}:functionals", "#{plugin}:integration", "#{plugin}:cucumber", "#{plugin}:selenium") # FIXME missing cucumber and selenium
end
{ :units => :unit , :functionals => :functional , :integration => :integration }.each do |taskname,folder|
task taskname => 'db:test:plugins:prepare' do |t|
run_tests t.name, "plugins/{#{enabled_plugins.join(',')}}/test/#{folder}/**/*.rb"
end
end
task :cucumber => 'db:test:plugins:prepare' do |t|
run_cucumber t.name, :default, "plugins/{#{enabled_plugins.join(',')}}/features/**/*.features"
end
task :selenium => 'db:test:plugins:prepare' do |t|
run_cucumber t.name, :selenium, "plugins/{#{enabled_plugins.join(',')}}/features/**/*.features"
end
task :temp_enable_all_plugins do
sh './script/noosfero-plugins', 'enableall'
end
task :rollback_enable_all_plugins do
sh './script/noosfero-plugins', 'disable', *disabled_plugins
end
end
test_sequence_task(:noosfero_plugins, '*', :temp_enable_all_plugins, :units, :functionals, :integration, :cucumber, :selenium, :rollback_enable_all_plugins)
end