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