Files
crono/spec/job_spec.rb
2015-03-07 18:05:47 +02:00

96 lines
2.5 KiB
Ruby

require "spec_helper"
class TestJob
def perform;end
end
class TestFailingJob
def perform
raise "Some error"
end
end
describe Crono::Job do
let(:period) { Crono::Period.new(2.day) }
let(:job) { Crono::Job.new(TestJob, period) }
let(:failing_job) { Crono::Job.new(TestFailingJob, period) }
it "should contain performer and period" do
expect(job.performer).to be TestJob
expect(job.period).to be period
end
describe "#perform" do
it "should run performer in separate thread" do
expect(job).to receive(:save)
thread = job.perform.join
expect(thread).to be_stop
job.send(:model).destroy
end
it "should save performin errors to log" do
thread = failing_job.perform.join
expect(thread).to be_stop
saved_log = Crono::CronoJob.find_by(job_id: failing_job.job_id).log
expect(saved_log).to include "Some error"
end
end
describe "#description" do
it "should return job identificator" do
expect(job.description).to be_eql("Perform TestJob every 2 days")
end
end
describe "#save" do
it "should save new job to DB" do
expect(Crono::CronoJob.where(job_id: job.job_id)).to_not exist
job.save
expect(Crono::CronoJob.where(job_id: job.job_id)).to exist
end
it "should update saved job" do
job.last_performed_at = Time.now
job.save
@crono_job = Crono::CronoJob.find_by(job_id: job.job_id)
expect(@crono_job.last_performed_at.utc.to_s).to be_eql job.last_performed_at.utc.to_s
end
it "should save and truncate job log" do
message = "test message"
job.send(:log, message)
job.save
expect(job.send(:model).reload.log).to include message
expect(job.job_log.string).to be_empty
end
end
describe "#load" do
before do
@saved_last_performed_at = job.last_performed_at = Time.now
job.save
end
it "should load last_performed_at from DB" do
@job = Crono::Job.new(TestJob, period)
@job.load
expect(@job.last_performed_at.utc.to_s).to be_eql @saved_last_performed_at.utc.to_s
end
end
describe "#log" do
it "should write log messages to both common and job log" do
message = "Test message"
expect(job.logger).to receive(:info).with(message)
expect(job.job_logger).to receive(:info).with(message)
job.send(:log, message)
end
it "should write job log to Job#job_log" do
message = "Test message"
job.send(:log, message)
expect(job.job_log.string).to include(message)
end
end
end