plugins_tests.rake
4.13 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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
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 plugin_enabled?(plugin)
File.exist?(File.join('config', 'plugins', plugin))
end
def plugin_disabled_warning(plugin)
puts "E: you should enable #{plugin} plugin before running it's tests!"
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.to_s, '--format', ENV['CUCUMBER_FORMAT'] || 'progress' , *files
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|
if plugin_enabled?(plugin)
run_tests t.name, files_glob
else
plugin_disabled_warning(plugin)
end
end
end
def plugin_cucumber_task(name, plugin, files_glob)
desc "Run #{name} tests for #{plugin_name(plugin)}"
task name => 'db:test:plugins:prepare' do |t|
if plugin_enabled?(plugin)
run_cucumber t.name, plugin, files_glob
else
plugin_disabled_warning(plugin)
end
end
end
def plugin_selenium_task(name, plugin, files_glob)
desc "Run #{name} tests for #{plugin_name(plugin)}"
task name => 'db:test:plugins:prepare' do |t|
if plugin_enabled?(plugin)
run_cucumber t.name, "#{plugin}_selenium", files_glob
else
plugin_disabled_warning(plugin)
end
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 :cucumber, plugin, "plugins/#{plugin}/features/**/*.feature"
plugin_selenium_task :selenium, plugin, "plugins/#{plugin}/features/**/*.feature"
end
test_sequence_task(plugin, plugin, "#{plugin}:units", "#{plugin}:functionals", "#{plugin}:integration", "#{plugin}:cucumber", "#{plugin}: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(',')}}/test/features/**/*.features"
end
task :selenium => 'db:test:plugins:prepare' do |t|
run_cucumber t.name, :selenium, "plugins/{#{enabled_plugins.join(',')}}/test/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