Skip to content

Commit

Permalink
Updates to the backend test structure
Browse files Browse the repository at this point in the history
* Moved specific backend tests to a backend directory
* Conditionally testing mongo adapter
* Renamed mongo to mongo_mapper since there are other mongo ORMs
  • Loading branch information
zbelzer committed Feb 18, 2010
1 parent a00f01e commit 4096c47
Show file tree
Hide file tree
Showing 14 changed files with 98 additions and 58 deletions.
2 changes: 1 addition & 1 deletion README.textile
Expand Up @@ -51,7 +51,7 @@ You can change the backend in an initializer:

<pre>
# config/initializers/delayed_job.rb
Delayed::Worker.backend = :mongo
Delayed::Worker.backend = :mongo_mapper
</pre>

h2. Upgrading to 1.8
Expand Down
2 changes: 1 addition & 1 deletion Rakefile
Expand Up @@ -32,7 +32,7 @@ task :default => :spec
desc 'Run the specs'
Spec::Rake::SpecTask.new(:spec) do |t|
t.libs << 'lib'
t.pattern = 'spec/**/*_spec.rb'
t.pattern = 'spec/*_spec.rb'
t.verbose = true
end
task :spec => :check_dependencies
Expand Down
@@ -1,6 +1,6 @@
require 'mongo_mapper'

module MongoMapper
module ::MongoMapper
module Document
module ClassMethods
def load_for_delayed_job(id)
Expand All @@ -18,9 +18,9 @@ def dump_for_delayed_job

module Delayed
module Backend
module Mongo
module MongoMapper
class Job
include MongoMapper::Document
include ::MongoMapper::Document
include Delayed::Backend::Base
set_collection_name 'delayed_jobs'

Expand All @@ -37,7 +37,7 @@ class Job
before_save :set_default_run_at

def self.db_time_now
MongoMapper.time_class.now.utc
::MongoMapper.time_class.now.utc
end

def self.find_available(worker_name, limit = 5, max_run_time = Worker.max_run_time)
Expand Down Expand Up @@ -107,4 +107,4 @@ def set_default_run_at
end
end
end
end
end
2 changes: 1 addition & 1 deletion lib/delayed/performable_method.rb
Expand Up @@ -59,4 +59,4 @@ def dump(obj)
end
end
end
end
end
11 changes: 10 additions & 1 deletion lib/delayed_job.rb
@@ -1,3 +1,5 @@
require 'active_support'

require File.dirname(__FILE__) + '/delayed/message_sending'
require File.dirname(__FILE__) + '/delayed/performable_method'
require File.dirname(__FILE__) + '/delayed/backend/base'
Expand All @@ -6,7 +8,14 @@
Object.send(:include, Delayed::MessageSending)
Module.send(:include, Delayed::MessageSending::ClassMethods)

Delayed::Worker.backend = :active_record
if defined?(ActiveRecord)
Delayed::Worker.backend = :active_record
elsif defined?(MongoMapper)
Delayed::Worker.backend = :mongo_mapper
else
$stderr.puts "Could not decide on a backend, defaulting to active_record"
Delayed::Worker.backend = :active_record
end

if defined?(Merb::Plugins)
Merb::Plugins.add_rakefiles File.dirname(__FILE__) / 'delayed' / 'tasks'
Expand Down
@@ -1,4 +1,5 @@
require 'spec_helper'
require 'delayed/backend/active_record'

describe Delayed::Job do
before(:all) do
Expand Down
13 changes: 5 additions & 8 deletions spec/mongo_job_spec.rb → spec/backend/mongo_mapper_job_spec.rb
@@ -1,13 +1,10 @@
require 'spec_helper'

require 'delayed/backend/mongo'
require 'delayed/backend/mongo_mapper'

MongoMapper.connection = Mongo::Connection.new nil, nil, :logger => ActiveRecord::Base.logger
MongoMapper.database = 'delayed_job'

describe Delayed::Backend::Mongo::Job do
describe Delayed::Backend::MongoMapper::Job do
before(:all) do
@backend = Delayed::Backend::Mongo::Job
@backend = Delayed::Backend::MongoMapper::Job
end

before(:each) do
Expand All @@ -24,7 +21,7 @@ def read(story)
end

class MongoStory
include MongoMapper::Document
include ::MongoMapper::Document
key :text, String

def tell
Expand Down Expand Up @@ -59,4 +56,4 @@ def tell
job.payload_object.perform.should == 'Epilog: Once upon a time…'
end
end
end
end
File renamed without changes.
6 changes: 3 additions & 3 deletions spec/delayed_method_spec.rb
Expand Up @@ -27,7 +27,7 @@
story.whatever(1, 5)

Delayed::Job.count.should == 1
job = Delayed::Job.find(:first)
job = Delayed::Job.first
job.payload_object.class.should == Delayed::PerformableMethod
job.payload_object.method.should == :whatever_without_send_later
job.payload_object.args.should == [1, 5]
Expand All @@ -42,9 +42,9 @@
end

it "should schedule the job in the future" do
time = 1.hour.from_now
time = 1.hour.from_now.utc.to_time
job = "string".send_at(time, :length)
job.run_at.should == time
job.run_at.to_i.should == time.to_i
end

it "should store payload as PerformableMethod" do
Expand Down
5 changes: 1 addition & 4 deletions spec/performable_method_spec.rb
Expand Up @@ -39,7 +39,4 @@ def read(story)
p.args.should == ["LOAD;Story;#{story.id}"]
p.perform.should == 'Epilog: Once upon...'
end



end
end
33 changes: 33 additions & 0 deletions spec/setup/active_record.rb
@@ -0,0 +1,33 @@
require 'active_record'

ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => ':memory:')
ActiveRecord::Base.logger = DELAYED_JOB_LOGGER
ActiveRecord::Migration.verbose = false

ActiveRecord::Schema.define do

create_table :delayed_jobs, :force => true do |table|
table.integer :priority, :default => 0
table.integer :attempts, :default => 0
table.text :handler
table.string :last_error
table.datetime :run_at
table.datetime :locked_at
table.string :locked_by
table.datetime :failed_at
table.timestamps
end

create_table :stories, :force => true do |table|
table.string :text
end

end

# Purely useful for test cases...
class Story < ActiveRecord::Base
def tell; text; end
def whatever(n, _); tell*n; end

handle_asynchronously :whatever
end
13 changes: 13 additions & 0 deletions spec/setup/mongo_mapper.rb
@@ -0,0 +1,13 @@
MongoMapper.connection = Mongo::Connection.new nil, nil, :logger => DELAYED_JOB_LOGGER
MongoMapper.database = 'delayed_job'

unless defined?(Story)
class Story
include ::MongoMapper::Document
def tell; text; end
def whatever(n, _); tell*n; end
def self.count; end

handle_asynchronously :whatever
end
end
56 changes: 23 additions & 33 deletions spec/spec_helper.rb
Expand Up @@ -2,42 +2,32 @@

require 'rubygems'
require 'spec'
require 'active_record'
require 'delayed_job'

logger = Logger.new('/tmp/dj.log')
ActiveRecord::Base.logger = logger
Delayed::Worker.logger = logger
ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => ':memory:')
ActiveRecord::Migration.verbose = false

ActiveRecord::Schema.define do

create_table :delayed_jobs, :force => true do |table|
table.integer :priority, :default => 0
table.integer :attempts, :default => 0
table.text :handler
table.string :last_error
table.datetime :run_at
table.datetime :locked_at
table.string :locked_by
table.datetime :failed_at
table.timestamps
end

create_table :stories, :force => true do |table|
table.string :text
require 'logger'

backends_available = []
%w(active_record mongo_mapper).each do |backend|
begin
require backend
backends_available << backend
rescue LoadError => e
$stderr.puts "The backend '#{backend}' is not available. Skipping tests"
end

end

# Purely useful for test cases...
class Story < ActiveRecord::Base
def tell; text; end
def whatever(n, _); tell*n; end

handle_asynchronously :whatever
if backends_available.empty?
raise LoadError, "Cannot run delayed_job specs. No backends available"
end

require 'delayed_job'
require 'sample_jobs'
require 'shared_backend_spec'
require 'backend/shared_backend_spec'

DELAYED_JOB_LOGGER = Logger.new('/tmp/dj.log')
Delayed::Worker.logger = DELAYED_JOB_LOGGER

DEFAULT_BACKEND = backends_available.first.to_sym

backends_available.each do |backend|
require "setup/#{backend}"
require "backend/#{backend}_job_spec"
end
2 changes: 1 addition & 1 deletion spec/worker_spec.rb
Expand Up @@ -11,7 +11,7 @@ def job_create(opts = {})

before(:each) do
# Make sure backend is set to active record
Delayed::Worker.backend = :active_record
Delayed::Worker.backend = DEFAULT_BACKEND

@worker = Delayed::Worker.new(:max_priority => nil, :min_priority => nil, :quiet => true)

Expand Down

0 comments on commit 4096c47

Please sign in to comment.