Skip to content

Commit

Permalink
Namespace support modules
Browse files Browse the repository at this point in the history
  • Loading branch information
hlascelles committed Dec 8, 2018
1 parent a4b63f2 commit 493002b
Show file tree
Hide file tree
Showing 9 changed files with 71 additions and 51 deletions.
5 changes: 3 additions & 2 deletions .hound.yml
Expand Up @@ -2,7 +2,8 @@ fail_on_violations: true
ruby:
config_file: .rubocop.yml
reek:
enabled: true
config_file: .reek.yml
# Have to disable reek as Hound requires a higher version than we can provide, as it would mean
# losing support for older versions of ruby.
enabled: false
shellcheck:
enabled: true
4 changes: 4 additions & 0 deletions CHANGELOG.md
@@ -1,3 +1,7 @@
## Unreleased

- Namespace support modules [#54](https://github.com/hlascelles/que-scheduler/pull/54)

## 3.2.2 (2018-08-01)

[Commits](https://github.com/hlascelles/que-scheduler/compare/v3.2.1...v3.2.2)
Expand Down
3 changes: 3 additions & 0 deletions quality.sh
Expand Up @@ -2,6 +2,9 @@
set -euo pipefail

cd $(dirname $0)
echo "Running fasterer..."
bundle exec fasterer
echo "Running rubocop..."
bundle exec rubocop
echo "Running reek..."
bundle exec reek
2 changes: 1 addition & 1 deletion spec/que/scheduler/enqueueing_calculator_spec.rb
Expand Up @@ -136,7 +136,7 @@ def run_test_with_times(last_time, as_time, expect_scheduled)
)
out = QSSP.parse(::Que::Scheduler.schedule.values, scheduler_job_args)
exp = Que::Scheduler::EnqueueingCalculator::Result.new(
missed_jobs: hash_to_enqueues(expect_scheduled), job_dictionary: all_keys
missed_jobs: HashSupport.hash_to_enqueues(expect_scheduled), job_dictionary: all_keys
)
expect(out.missed_jobs).to eq(exp.missed_jobs)
expect(out.job_dictionary).to eq(exp.job_dictionary)
Expand Down
4 changes: 2 additions & 2 deletions spec/que/scheduler/scheduler_job_args_spec.rb
Expand Up @@ -4,7 +4,7 @@
RSpec.describe Que::Scheduler::SchedulerJobArgs do
it 'should prepare default args' do
Timecop.freeze do
mock_db_time_now
DbSupport.mock_db_time_now
args = described_class.build(nil)
expect(args.last_run_time).to eq(Time.zone.now)
expect(args.as_time).to eq(Time.zone.now)
Expand All @@ -18,7 +18,7 @@

def attempt_parse(options)
Timecop.freeze do
mock_db_time_now
DbSupport.mock_db_time_now
args = described_class.build(options)
expect(args.last_run_time.iso8601).to eq(last_time.iso8601)
expect(args.as_time).to eq(Time.zone.now)
Expand Down
14 changes: 8 additions & 6 deletions spec/que/scheduler/scheduler_job_spec.rb
Expand Up @@ -7,8 +7,8 @@
QS = Que::Scheduler
PARSER = QS::EnqueueingCalculator
RESULT = QS::EnqueueingCalculator::Result
let(:default_queue) { column_default('que_jobs', 'queue').split(':').first[1..-2] }
let(:default_priority) { column_default('que_jobs', 'priority').to_i }
let(:default_queue) { DbSupport.column_default('que_jobs', 'queue').split(':').first[1..-2] }
let(:default_priority) { DbSupport.column_default('que_jobs', 'priority').to_i }
let(:run_time) { Time.zone.parse('2017-11-08T13:50:32') }
let(:full_dictionary) { ::Que::Scheduler.schedule.keys }

Expand All @@ -20,7 +20,7 @@
end

before(:each) do
mock_db_time_now
DbSupport.mock_db_time_now
end

describe '#run' do
Expand Down Expand Up @@ -67,12 +67,14 @@ def run_test(initial_job_args, to_be_scheduled)

describe '#enqueue_required_jobs' do
def test_enqueued(overdue_dictionary)
result = RESULT.new(missed_jobs: hash_to_enqueues(overdue_dictionary), job_dictionary: [])
result = RESULT.new(
missed_jobs: HashSupport.hash_to_enqueues(overdue_dictionary), job_dictionary: []
)
described_class.new({}).enqueue_required_jobs(result, [])
end

def expect_one_result(args, queue, priority)
jobs = jobs_by_class(HalfHourlyTestJob)
jobs = DbSupport.jobs_by_class(HalfHourlyTestJob)
expect(jobs.count).to eq(1)
one_result = jobs.first
expect(one_result['args'] || []).to eq(JSON.parse(args.to_json))
Expand Down Expand Up @@ -171,7 +173,7 @@ def expect_one_result(args, queue, priority)
end

def expect_itself_enqueued
itself_jobs = jobs_by_class(QS::SchedulerJob)
itself_jobs = DbSupport.jobs_by_class(QS::SchedulerJob)
expect(itself_jobs.count).to eq(1)
hash = itself_jobs.first.to_h
expect(hash['queue']).to eq('')
Expand Down
2 changes: 1 addition & 1 deletion spec/spec_helper.rb
Expand Up @@ -35,7 +35,7 @@
expect(Que.execute('select * from que_scheduler_audit_enqueued').count).to eq(0)
end
config.before(:suite) do
setup_db
DbSupport.setup_db
end
config.around(:each) do |example|
DatabaseCleaner.cleaning do
Expand Down
80 changes: 43 additions & 37 deletions spec/support/db_support.rb
@@ -1,44 +1,50 @@
require 'active_record'

def setup_db
testing_db = 'que_scheduler_testing'
db_config = {
adapter: 'postgresql',
database: testing_db,
username: 'postgres',
password: ENV.fetch('DB_PASSWORD'),
host: ENV.fetch('DB_HOST', '127.0.0.1'),
port: ENV.fetch('DB_PORT', 5432),
reconnect: true,
}
ActiveRecord::Base.establish_connection(db_config.merge(database: 'postgres'))
conn = ActiveRecord::Base.connection
if conn.execute("SELECT 1 from pg_database WHERE datname='#{testing_db}';").count > 0
conn.execute("DROP DATABASE #{testing_db}")
end
conn.execute("CREATE DATABASE #{testing_db}")
module DbSupport
class << self
RSpec::Mocks::Syntax.enable_expect(self)

ActiveRecord::Base.establish_connection(db_config)
Que.mode = :off
Que.connection = ActiveRecord
Que.migrate!(version: 3)
Que::Scheduler::Migrations.migrate!(version: Que::Scheduler::Migrations::MAX_VERSION)
Que.execute("set timezone TO '#{::Time.zone.tzinfo.identifier}';")
end
def setup_db
testing_db = 'que_scheduler_testing'
db_config = {
adapter: 'postgresql',
database: testing_db,
username: 'postgres',
password: ENV.fetch('DB_PASSWORD'),
host: ENV.fetch('DB_HOST', '127.0.0.1'),
port: ENV.fetch('DB_PORT', 5432),
reconnect: true,
}
ActiveRecord::Base.establish_connection(db_config.merge(database: 'postgres'))
conn = ActiveRecord::Base.connection
if conn.execute("SELECT 1 from pg_database WHERE datname='#{testing_db}';").count > 0
conn.execute("DROP DATABASE #{testing_db}")
end
conn.execute("CREATE DATABASE #{testing_db}")

def jobs_by_class(clazz)
Que.execute("SELECT * FROM que_jobs where job_class = '#{clazz}'")
end
ActiveRecord::Base.establish_connection(db_config)
Que.mode = :off
Que.connection = ActiveRecord
Que.migrate!(version: 3)
Que::Scheduler::Migrations.migrate!(version: Que::Scheduler::Migrations::MAX_VERSION)
Que.execute("set timezone TO '#{::Time.zone.tzinfo.identifier}';")
end

def column_default(table, column_name)
Que.execute(%{
SELECT column_name, column_default
FROM information_schema.columns
WHERE (table_schema, table_name, column_name) = ('public', '#{table}', '#{column_name}')
}).first.fetch('column_default')
end
def jobs_by_class(clazz)
Que.execute("SELECT * FROM que_jobs where job_class = '#{clazz}'")
end

def column_default(table, column_name)
Que.execute(%{
SELECT column_name, column_default
FROM information_schema.columns
WHERE (table_schema, table_name, column_name) = ('public', '#{table}', '#{column_name}')
}).first.fetch('column_default')
end

def mock_db_time_now
# We cannot Timecop freeze the DB clock, so we must override the now lookup.
allow(Que::Scheduler::Db).to receive(:now).and_return(Time.zone.now)
def mock_db_time_now
# We cannot Timecop freeze the DB clock, so we must override the now lookup.
allow(Que::Scheduler::Db).to receive(:now).and_return(Time.zone.now)
end
end
end
8 changes: 6 additions & 2 deletions spec/support/hash_support.rb
@@ -1,3 +1,7 @@
def hash_to_enqueues(overdue_dictionary)
overdue_dictionary.map { |o| Que::Scheduler::DefinedJob::ToEnqueue.new(o) }
module HashSupport
class << self
def hash_to_enqueues(overdue_dictionary)
overdue_dictionary.map { |item| Que::Scheduler::DefinedJob::ToEnqueue.new(item) }
end
end
end

0 comments on commit 493002b

Please sign in to comment.