diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..29fee4a --- /dev/null +++ b/.travis.yml @@ -0,0 +1,12 @@ +language: ruby +before_script: + - psql -c 'create database queue_classic_test;' -U postgres +env: + global: + - QC_DATABASE_URL="postgres://postgres@localhost/queue_classic_test" +rvm: + - 2.2.0 +before_install: + - gem update --system +addons: + postgresql: 9.3 diff --git a/Gemfile b/Gemfile index 65ab8ab..c77447b 100644 --- a/Gemfile +++ b/Gemfile @@ -2,3 +2,7 @@ source 'https://rubygems.org' # Specify your gem's dependencies in queue_classic-later.gemspec gemspec + +group :test do + gem 'minitest', '~> 5.6.1' +end diff --git a/Rakefile b/Rakefile index 2995527..281e394 100644 --- a/Rakefile +++ b/Rakefile @@ -1 +1,13 @@ +$:.unshift("lib") + require "bundler/gem_tasks" +require "rake/testtask" +require "queue_classic-later" + +task :default => ['test'] +Rake::TestTask.new do |t| + t.libs << 'test' + t.test_files = FileList['spec/**/*_test.rb'] + t.verbose = true + t.warning = true +end diff --git a/queue_classic-later.gemspec b/queue_classic-later.gemspec index 272484c..d2bce02 100644 --- a/queue_classic-later.gemspec +++ b/queue_classic-later.gemspec @@ -16,4 +16,5 @@ Gem::Specification.new do |gem| gem.require_paths = ["lib"] gem.add_dependency "queue_classic", "~> 3.0" + gem.add_development_dependency "rake" end diff --git a/spec/later_test.rb b/spec/later_test.rb new file mode 100644 index 0000000..8957181 --- /dev/null +++ b/spec/later_test.rb @@ -0,0 +1,29 @@ +$: << File.expand_path("spec") + +require "spec_helper" +require "queue_classic/later" +include QC::Later::QueueExtensions + +class QueueTest < QCTest + + def test_enqueue_in + time_completed = Time.now + 2 + enqueue_in(1, "Kernel.puts", "hello world 1") + assert_equal(1, num_jobs) + + QC::Later.tick while Time.now < time_completed + + assert_equal(0, num_jobs) + end + + def test_enqueue_at + time_completed = Time.now + 2 + enqueue_at(time_completed-1, "Kernel.puts", "hello ","world 2") + assert_equal(1, num_jobs) + + QC::Later.tick while Time.now < time_completed + + assert_equal(0, num_jobs) + end + +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb new file mode 100644 index 0000000..37588d7 --- /dev/null +++ b/spec/spec_helper.rb @@ -0,0 +1,70 @@ +require 'rubygems' + +require 'bundler' +Bundler.setup :default, :test +ENV["DATABASE_URL"] ||= "postgres:///queue_classic_test" + +require "minitest/autorun" + +class QCTest < Minitest::Test + + def setup + init_db + QC::Later::Setup.create + end + + def teardown + QC::Later::Setup.drop + QC.delete_all + end + + def init_db + c = QC::ConnAdapter.new + c.execute("SET client_min_messages TO 'warning'") + QC::Setup.drop(c.connection) + QC::Setup.create(c.connection) + # c.execute(File.read('./test/helper.sql')) + c.disconnect + end + + def capture_stderr_output + original_stderr = $stderr + $stderr = StringIO.new + yield + $stderr.string + ensure + $stderr = original_stderr + end + + def capture_debug_output + original_debug = ENV['DEBUG'] + original_stdout = $stdout + + ENV['DEBUG'] = "true" + $stdout = StringIO.new + yield + $stdout.string + ensure + ENV['DEBUG'] = original_debug + $stdout = original_stdout + end + + def with_env(temporary_environment) + original_environment = {} + temporary_environment.each do |name, value| + original_environment[name] = ENV[name] + ENV[name] = value + end + yield + ensure + original_environment.each { |name, value| ENV[name] = value } + end + + def execute(s) + QC.default_conn_adapter.execute(s) + end + + def num_jobs + execute("SELECT COUNT(*) FROM #{QC::Later::TABLE_NAME}")["count"].to_i + end +end