Skip to content

Commit

Permalink
Adding more tests
Browse files Browse the repository at this point in the history
  • Loading branch information
hlascelles committed Apr 29, 2018
1 parent 7064b99 commit c757640
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 22 deletions.
7 changes: 3 additions & 4 deletions lib/que/scheduler/migrations.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ module Que
module Scheduler
module Migrations
AUDIT_TABLE_NAME = Que::Scheduler::Audit::TABLE_NAME
TABLE_COMMENT = %{
TABLE_COMMENT = %(
SELECT description FROM pg_class
LEFT JOIN pg_description ON pg_description.objoid = pg_class.oid
WHERE relname = '#{AUDIT_TABLE_NAME}'
}
)

class << self
def migrate!(version:)
Expand All @@ -33,8 +33,7 @@ def db_version
private

def execute_step(number, direction)
sql = "#{__dir__}/migrations/#{number}/#{direction}.sql"
out = Que.execute(IO.read(sql))
Que.execute(IO.read("#{__dir__}/migrations/#{number}/#{direction}.sql"))
return unless number >= (direction == :up ? 2 : 3)
Que.execute "COMMENT ON TABLE que_scheduler_audit IS '#{number}'"
end
Expand Down
30 changes: 22 additions & 8 deletions spec/que/scheduler/audit_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,34 @@
job_id = 1234
executed_at = Time.zone.now.change(usec: 0)
next_run_at = (Time.zone.now + 1.hour).change(usec: 0)
missed_jobs = [
{ job_class: HalfHourlyTestJob, queue: 'some_queue' },
{ job_class: HalfHourlyTestJob, priority: 80 },
{ job_class: DailyTestJob, queue: 'some_queue' }
]
result = Que::Scheduler::EnqueueingCalculator::Result.new(
missed_jobs: { HalfHourlyTestJob => [] }, job_dictionary: []
missed_jobs: missed_jobs, job_dictionary: []
)
described_class.append(job_id, executed_at, result, next_run_at)

audit = Que.execute('select * from que_scheduler_audit')
expect(audit.count).to eq(1)
expected_hash = {
'scheduler_job_id' => job_id,
'executed_at' => executed_at,
'next_run_at' => next_run_at,
'jobs_enqueued' => '{"HalfHourlyTestJob": []}',
}
expect(audit).to eq([expected_hash])
expect(audit.first['scheduler_job_id']).to eq(job_id)
expect(audit.first['executed_at']).to eq(executed_at)
expect(audit.first['next_run_at']).to eq(next_run_at)
db_jobs = JSON.parse(audit.first['jobs_enqueued'])
expect(db_jobs.count).to eq(3)
expect(db_jobs.first).to eq(
'job_class' => 'HalfHourlyTestJob',
'queue' => 'some_queue'
)
expect(db_jobs).to eq(
[
{ 'job_class' => 'HalfHourlyTestJob', 'queue' => 'some_queue' },
{ 'job_class' => 'HalfHourlyTestJob', 'priority' => 80 },
{ 'job_class' => 'DailyTestJob', 'queue' => 'some_queue' }
]
)
end
end
end
28 changes: 24 additions & 4 deletions spec/que/scheduler/enqueueing_calculator_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -94,10 +94,30 @@
# Time as an argument.
{ job_class: DailyTestJob, args: [Time.zone.parse('2017-10-08T06:10:00')] },
{ job_class: DailyTestJob, args: [Time.zone.parse('2017-10-09T06:10:00')] },
{ job_class: TwiceDailyTestJob, args: [Time.zone.parse('2017-10-08T11:10:00')], queue: 'backlog', priority: 35 },
{ job_class: TwiceDailyTestJob, args: [Time.zone.parse('2017-10-08T16:10:00')], queue: 'backlog', priority: 35 },
{ job_class: TwiceDailyTestJob, args: [Time.zone.parse('2017-10-09T11:10:00')], queue: 'backlog', priority: 35 },
{ job_class: TwiceDailyTestJob, args: [Time.zone.parse('2017-10-09T16:10:00')], queue: 'backlog', priority: 35 }
{
job_class: TwiceDailyTestJob,
args: [Time.zone.parse('2017-10-08T11:10:00')],
queue: 'backlog',
priority: 35,
},
{
job_class: TwiceDailyTestJob,
args: [Time.zone.parse('2017-10-08T16:10:00')],
queue: 'backlog',
priority: 35,
},
{
job_class: TwiceDailyTestJob,
args: [Time.zone.parse('2017-10-09T11:10:00')],
queue: 'backlog',
priority: 35,
},
{
job_class: TwiceDailyTestJob,
args: [Time.zone.parse('2017-10-09T16:10:00')],
queue: 'backlog',
priority: 35,
}
]
)
end
Expand Down
15 changes: 10 additions & 5 deletions spec/que/scheduler/migrations_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,29 @@
RSpec.describe Que::Scheduler::Migrations do
describe '.migrate!' do
it 'migrates up and down versions' do
::Que::Scheduler::SchedulerJob.enqueue # Readd the job that was removed by the rspec before all
# Readd the job that was removed by the rspec before all
::Que::Scheduler::SchedulerJob.enqueue
described_class.db_version
expect(described_class.db_version).to eq(2)
expect(ActiveRecord::Base.connection.table_exists?(Que::Scheduler::Audit::TABLE_NAME)).to be true
expect(audit_table_exists?).to be true
described_class.migrate!(version: 1)
expect(described_class.db_version).to eq(1)
expect(jobs_by_class(Que::Scheduler::SchedulerJob).count).to eq(1)
expect(ActiveRecord::Base.connection.table_exists?(Que::Scheduler::Audit::TABLE_NAME)).to be false
expect(audit_table_exists?).to be false
described_class.migrate!(version: 0)
expect(described_class.db_version).to eq(0)
expect(jobs_by_class(Que::Scheduler::SchedulerJob).count).to eq(0)
described_class.migrate!(version: 1)
expect(described_class.db_version).to eq(1)
expect(jobs_by_class(Que::Scheduler::SchedulerJob).count).to eq(1)
expect(ActiveRecord::Base.connection.table_exists?(Que::Scheduler::Audit::TABLE_NAME)).to be false
expect(audit_table_exists?).to be false
described_class.migrate!(version: 2)
expect(described_class.db_version).to eq(2)
expect(ActiveRecord::Base.connection.table_exists?(Que::Scheduler::Audit::TABLE_NAME)).to be true
expect(audit_table_exists?).to be true
end

def audit_table_exists?
ActiveRecord::Base.connection.table_exists?(Que::Scheduler::Audit::TABLE_NAME)
end
end
end
3 changes: 2 additions & 1 deletion spec/que/scheduler/scheduler_job_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,8 @@ def run_test(initial_job_args, to_be_scheduled)
expect_itself_enqueued
all_enqueued = Que.job_stats.map do |job|
job.symbolize_keys.slice(:job_class)
end.reject { |row| row[:job_class] == 'Que::Scheduler::SchedulerJob' }
end
all_enqueued.reject! { |row| row[:job_class] == 'Que::Scheduler::SchedulerJob' }
expect(all_enqueued).to eq(to_be_scheduled)
end
end
Expand Down

0 comments on commit c757640

Please sign in to comment.