plugins_tests.rake 1.63 KB
def define_task(test, plugins_folder='plugins', plugin = '*')
  test_files = Dir.glob(File.join(Rails.root, plugins_folder, plugin, 'test', test[:folder], '**', '*_test.rb'))
  desc 'Runs ' + (plugin != '*' ? plugin : 'plugins') + ' ' + test[:name] + ' tests'
  Rake::TestTask.new(test[:name].to_sym) do |t|
    t.test_files = test_files
    t.verbose = true
  end
end

namespace :test do
  namespace :noosfero_plugins do
    tasks = [
      {:name => :available, :folder => 'plugins'},
      {:name => :enabled, :folder => File.join('config', 'plugins')}
    ]
    tests = [
      {:name => 'units', :folder => 'unit'},
      {:name => 'functionals', :folder => 'functional'},
      {:name => 'integration', :folder => 'integration'}
    ]

    tasks.each do |t|
      namespace t[:name] do
        tests.each do |test|
          define_task(test, t[:folder])
        end
      end
    end

    plugins = Dir.glob(File.join(Rails.root, 'plugins', '*')).map {|path| File.basename(path)}

    plugins.each do |plugin_name|
      namespace plugin_name do
        tests.each do |test|
          define_task(test, 'plugins', plugin_name)
        end
      end

      dependencies = []
      tests.each do |test|
        dependencies << plugin_name+':'+test[:name]
      end
      task plugin_name => dependencies
    end

    task :units => 'available:units'
    task :functionals => 'available:functionals'
    task :integration => 'available:integration'
    task :available => [:units, :functionals, :integration]
    task :enabled => ['enabled:units', 'enabled:functionals', 'enabled:integration']

  end

  task :noosfero_plugins => 'noosfero_plugins:available'

end