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 | end | 4 | end |
5 | +disabled_plugins = all_plugins - enabled_plugins | ||
13 | 6 | ||
14 | task 'db:test:plugins:prepare' do | 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 | end | 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 | end | 67 | end |
52 | - task plugin_name => dependencies | ||
53 | end | 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 | end | 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 | end | 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 | end | 92 | end |
74 | - Rake::Task['test:noosfero_plugins:rollback_temp_enable_plugins'].invoke | ||
75 | end | 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 | end | 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 | end | 105 | end |
100 | 106 | ||
107 | + task :rollback_enable_all_plugins do | ||
108 | + sh './script/noosfero-plugins', 'disable', *disabled_plugins | ||
109 | + end | ||
101 | end | 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 | end | 114 | end |
106 | - |