lib/tasks/landable/pgtap.rake in landable-1.8.0 vs lib/tasks/landable/pgtap.rake in landable-1.9.0.rc1

- old
+ new

@@ -2,22 +2,41 @@ namespace :pgtap do def has_pgprove? @@has_prove ||= Kernel.system('which pg_prove > /dev/null') end + def has_pgconfig? + @@has_pgconfig ||= Kernel.system('which pg_config > /dev/null') + end + + def has_pgtap? + has_pgtap = false + + if has_pgconfig? + sharedir = "#{`pg_config | grep SHAREDIR | awk {' print $3 '}`.strip}/extension/pgtap.control" + if File.file?("#{sharedir}") + has_pgtap = true + end + end + + has_pgtap + end + desc "Run PGTap unit tests" task :run, [:test_file] => [ :environment ] do |t, args| dbdir = "#{Rails.root}/../../db" tests = args[:test_file] ? args[:test_file] : "*.sql" - if not has_pgprove? - puts "\nPGTap not installed. Skipping DB unit tests" - puts "Reference 'http://pgtap.org/documentation.html#installation' for installation instructions." - else + if has_pgprove? and has_pgtap? # Load pgtap functions into database. Will not complain if already loaded. - ActiveRecord::Base.connection.execute(IO.read("#{dbdir}/pgtap/pgtap.sql")) + ActiveRecord::Base.connection.execute("CREATE EXTENSION IF NOT EXISTS pgtap;") + + # Runs the tests. Wrapped pg_prove call in shell script due to issues with return values sh "cd #{Rails.root}/../../script && ./pgtap" + else + puts "\nPGTap and/or pg_prove not installed. Skipping DB unit tests" + puts "Reference 'http://pgtap.org/documentation.html#installation' for installation instructions." end end end task :pgtap => 'pgtap:run'