Navigation Menu

Skip to content

Commit

Permalink
Cleanup of the tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Bertg committed Aug 31, 2011
1 parent 508a5b9 commit 0de07a5
Show file tree
Hide file tree
Showing 4 changed files with 106 additions and 95 deletions.
126 changes: 66 additions & 60 deletions test/base_delayed_paperclip_test.rb
@@ -1,17 +1,14 @@
module BaseDelayedPaperclipTest
def setup
super
DelayedPaperclip.options[:url_with_processing] = true
reset_dummy
end

def test_normal_paperclip_functioning
build_dummy_table(false)
reset_class "Dummy", false

reset_dummy :with_processed => false
Paperclip::Attachment.any_instance.expects(:post_process)

dummy = Dummy.new(:image => File.open("#{ROOT}/test/fixtures/12k.png"))

assert !dummy.image.delay_processing?
assert dummy.image.post_processing
assert dummy.save
Expand All @@ -20,105 +17,114 @@ def test_normal_paperclip_functioning

def test_delayed_paperclip_functioning
build_dummy_table(false)
reset_class "Dummy", true

reset_class "Dummy", :with_processed => true
Paperclip::Attachment.any_instance.expects(:post_process).never

dummy = Dummy.new(:image => File.open("#{ROOT}/test/fixtures/12k.png"))

assert dummy.image.delay_processing?
assert !dummy.image.post_processing
assert dummy.save
assert File.exists?(dummy.image.path)
assert File.exists?(dummy.image.path), "Path #{dummy.image.path} should exist"
end

def test_enqueue_job_if_source_changed
@dummy.image = File.open("#{RAILS_ROOT}/test/fixtures/12k.png")

dummy = Dummy.new(:image => File.open("#{ROOT}/test/fixtures/12k.png"))
dummy.image = File.open("#{RAILS_ROOT}/test/fixtures/12k.png")
original_job_count = jobs_count
@dummy.save

dummy.save
assert_equal original_job_count + 1, jobs_count
end

def test_processing_column_kept_intact
@dummy = reset_dummy(true)

Paperclip::Attachment.any_instance.stubs(:reprocess!).raises(StandardError.new('oops'))

@dummy.save!
assert @dummy.image_processing?
dummy = Dummy.new(:image => File.open("#{RAILS_ROOT}/test/fixtures/12k.png"))
dummy.save!
assert dummy.image_processing?
process_jobs
assert @dummy.image_processing?
assert @dummy.reload.image_processing?
assert dummy.image_processing?
assert dummy.reload.image_processing?
end


def test_processing_true_when_new_image_added
@dummy = reset_dummy(true)

assert !@dummy.image_processing?
assert @dummy.new_record?
@dummy.save!
assert @dummy.reload.image_processing?
dummy = Dummy.new(:image => File.open("#{RAILS_ROOT}/test/fixtures/12k.png"))
assert !dummy.image_processing?
assert dummy.new_record?
dummy.save!
assert dummy.reload.image_processing?
end

def test_processed_true_when_delayed_jobs_completed
@dummy = reset_dummy(true)
@dummy.save!

dummy = Dummy.new(:image => File.open("#{RAILS_ROOT}/test/fixtures/12k.png"))
dummy.save!
process_jobs

@dummy.reload
assert !@dummy.image_processing?, "Image should no longer be processing"
dummy.reload
assert !dummy.image_processing?, "Image should no longer be processing"
end

def test_unprocessed_image_returns_missing_url
@dummy = reset_dummy(true)
@dummy.save!

assert_equal "/images/original/missing.png", @dummy.image.url
dummy = Dummy.new(:image => File.open("#{RAILS_ROOT}/test/fixtures/12k.png"))
dummy.save!
assert_equal "/images/original/missing.png", dummy.image.url
process_jobs
dummy.reload
assert_match /\/system\/images\/1\/original\/12k.png/, dummy.image.url
end

def test_unprocessed_image_not_returning_missing_url_if_turrned_of_globally
DelayedPaperclip.options[:url_with_processing] = false
reset_dummy :with_processed => false
dummy = Dummy.new(:image => File.open("#{RAILS_ROOT}/test/fixtures/12k.png"))
dummy.save!
assert_match /\/system\/images\/1\/original\/12k.png/, dummy.image.url
process_jobs
dummy.reload
assert_match /\/system\/images\/1\/original\/12k.png/, dummy.image.url
end

@dummy.reload
assert_match(/\/system\/images\/1\/original\/12k.png/, @dummy.image.url)
def test_unprocessed_image_not_returning_missing_url_if_turrned_of_on_instance
reset_dummy :with_processed => false, :url_with_processing => false
dummy = Dummy.new(:image => File.open("#{RAILS_ROOT}/test/fixtures/12k.png"))
dummy.save!
assert_match(/\/system\/images\/1\/original\/12k.png/, dummy.image.url)
process_jobs
dummy.reload
assert_match(/\/system\/images\/1\/original\/12k.png/, dummy.image.url)
end

def test_original_url_when_no_processing_column
@dummy = reset_dummy(false)
@dummy.save!

assert_match(/\/system\/images\/1\/original\/12k.png/, @dummy.image.url)
reset_dummy :with_processed => false
dummy = Dummy.new(:image => File.open("#{RAILS_ROOT}/test/fixtures/12k.png"))
dummy.save!
assert_match(/\/system\/images\/1\/original\/12k.png/, dummy.image.url)
end

def test_original_url_if_image_changed
@dummy.image = File.open("#{RAILS_ROOT}/test/fixtures/12k.png")
@dummy.save!

assert_match(/system\/images\/.*original.*/, @dummy.image.url)
dummy = Dummy.new(:image => File.open("#{RAILS_ROOT}/test/fixtures/12k.png"))
dummy.save!
dummy.image = File.open("#{RAILS_ROOT}/test/fixtures/12k.png")
dummy.save!
assert_equal '/images/original/missing.png', dummy.image.url
process_jobs
assert_match(/system\/images\/.*original.*/, dummy.reload.image.url)
end

def test_missing_url_if_image_hasnt_changed
@dummy = reset_dummy(true)
@dummy.save!

assert_match(/images\/.*missing.*/, @dummy.image.url)
dummy = Dummy.new(:image => File.open("#{RAILS_ROOT}/test/fixtures/12k.png"))
dummy.save!
assert_match(/images\/.*missing.*/, dummy.image.url)
end

def test_should_not_blow_up_if_dsl_unused
reset_class "Dummy", false
@dummy = Dummy.new(:image => File.open("#{RAILS_ROOT}/test/fixtures/12k.png"))

assert @dummy.image.url
reset_dummy :with_processed => false
dummy = Dummy.new(:image => File.open("#{RAILS_ROOT}/test/fixtures/12k.png"))
assert dummy.image.url
end

def test_after_callback_is_functional
@dummy_class.send(:define_method, :done_processing) { puts 'done' }
@dummy_class.after_image_post_process :done_processing
Dummy.send(:define_method, :done_processing) { puts 'done' }
Dummy.after_image_post_process :done_processing
Dummy.any_instance.expects(:done_processing)

@dummy.save!
dummy = Dummy.new(:image => File.open("#{RAILS_ROOT}/test/fixtures/12k.png"))
dummy.save!
process_jobs
end
end
20 changes: 17 additions & 3 deletions test/delayed_paperclip_test.rb
Expand Up @@ -22,11 +22,25 @@ def jobs_count
end

def test_perform_job
@dummy.image = File.open("#{RAILS_ROOT}/test/fixtures/12k.png")
dummy = Dummy.new(:image => File.open("#{RAILS_ROOT}/test/fixtures/12k.png"))
dummy.image = File.open("#{RAILS_ROOT}/test/fixtures/12k.png")
Paperclip::Attachment.any_instance.expects(:reprocess!)

@dummy.save!
dummy.save!
Delayed::Job.last.payload_object.perform
end

def build_delayed_jobs
ActiveRecord::Base.connection.create_table :delayed_jobs, :force => true do |table|
table.integer :priority, :default => 0 # Allows some jobs to jump to the front of the queue
table.integer :attempts, :default => 0 # Provides for retries, but still fail eventually.
table.text :handler # YAML-encoded string of the object that will do work
table.string :last_error # reason for last failure (See Note below)
table.datetime :run_at # When to run. Could be Time.now for immediately, or sometime in the future.
table.datetime :locked_at # Set when a client is working on this object
table.datetime :failed_at # Set when all retries have failed (actually, by default, the record is deleted instead)
table.string :locked_by # Who is working on this object (if locked)
table.timestamps
end
end

end
7 changes: 4 additions & 3 deletions test/resque_paperclip_test.rb
Expand Up @@ -22,10 +22,11 @@ def jobs_count
end

def test_perform_job
@dummy.image = File.open("#{RAILS_ROOT}/test/fixtures/12k.png")
dummy = Dummy.new(:image => File.open("#{RAILS_ROOT}/test/fixtures/12k.png"))
dummy.image = File.open("#{RAILS_ROOT}/test/fixtures/12k.png")
Paperclip::Attachment.any_instance.expects(:reprocess!)
@dummy.save!
DelayedPaperclip::Jobs::Resque.perform(@dummy.class.name, @dummy.id, :image)
dummy.save!
DelayedPaperclip::Jobs::Resque.perform(dummy.class.name, dummy.id, :image)
end

end
48 changes: 19 additions & 29 deletions test/test_helper.rb
Expand Up @@ -26,24 +26,15 @@ def setup
ActiveRecord::Base.logger = Logger.new(File.dirname(__FILE__) + "/debug.log")
ActiveRecord::Base.establish_connection(config['test'])

def reset_dummy(with_processed = false)
build_dummy_table(with_processed)

reset_class "Dummy"

@dummy = Dummy.new(:image => File.open("#{ROOT}/test/fixtures/12k.png"))
end

def reset_class class_name, include_process = true
Object.send(:remove_const, class_name) rescue nil
klass = Object.const_set(class_name, Class.new(ActiveRecord::Base))
klass.class_eval do
include Paperclip::Glue
has_attached_file :image
process_in_background :image if include_process
end
klass.reset_column_information
@dummy_class = klass
# def reset_dummy(options = {})
# reset_dummy(options)
# Dummy.new(:image => File.open("#{RAILS_ROOT}/test/fixtures/12k.png"))
# end

def reset_dummy(options = {})
options[:with_processed] = true unless options.key?(:with_processed)
build_dummy_table(options[:with_processed])
reset_class("Dummy", options)
end

def build_dummy_table(with_processed)
Expand All @@ -56,16 +47,15 @@ def build_dummy_table(with_processed)
end
end

def build_delayed_jobs
ActiveRecord::Base.connection.create_table :delayed_jobs, :force => true do |table|
table.integer :priority, :default => 0 # Allows some jobs to jump to the front of the queue
table.integer :attempts, :default => 0 # Provides for retries, but still fail eventually.
table.text :handler # YAML-encoded string of the object that will do work
table.string :last_error # reason for last failure (See Note below)
table.datetime :run_at # When to run. Could be Time.now for immediately, or sometime in the future.
table.datetime :locked_at # Set when a client is working on this object
table.datetime :failed_at # Set when all retries have failed (actually, by default, the record is deleted instead)
table.string :locked_by # Who is working on this object (if locked)
table.timestamps
def reset_class(class_name, options)
ActiveRecord::Base.send(:include, Paperclip::Glue)
Object.send(:remove_const, class_name) rescue nil
klass = Object.const_set(class_name, Class.new(ActiveRecord::Base))
klass.class_eval do
include Paperclip::Glue
has_attached_file :image
process_in_background :image, options if options[:with_processed]
end
klass.reset_column_information
klass
end

0 comments on commit 0de07a5

Please sign in to comment.