50 lines
2.4 KiB
Ruby
50 lines
2.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
describe 'job.rake' do
|
|
context "Rake::Task['job:liabilities:compact_orders']" do
|
|
let(:member1) { create(:member) }
|
|
let(:member2) { create(:member) }
|
|
let(:job) { Job.last }
|
|
let!(:liabilities) do
|
|
(0..9).to_a.reverse.each do |day|
|
|
100.times { create(:liability, member_id: [member1.id, member2.id].sample, created_at: Time.now - day.day, updated_at: Time.now - day.day) }
|
|
end
|
|
end
|
|
|
|
subject { Rake::Task['job:liabilities:compact_orders'] }
|
|
|
|
before(:each) { DatabaseCleaner.clean }
|
|
after(:each) do
|
|
DatabaseCleaner.strategy = :truncation
|
|
subject.reenable
|
|
end
|
|
|
|
it 'call rake task with default time range', clean_database_with_truncation: true do
|
|
# default values
|
|
min = (Time.now - 1.week).beginning_of_day.to_s(:db)
|
|
max = (Time.now - 6.day).beginning_of_day.to_s(:db)
|
|
|
|
counter = Operations::Liability.where("LOWER(reference_type) = LOWER('Order') AND created_at BETWEEN '#{min}' AND '#{max}'").count
|
|
result = ActiveRecord::Base.connection.query("SELECT NULL, code, currency_id, member_id, SUM(debit), SUM(credit) FROM liabilities WHERE (LOWER(reference_type) = LOWER('Order') AND created_at BETWEEN '#{min}' AND '#{max}') GROUP BY code, member_id, currency_id, DATE(created_at)")
|
|
subject.invoke
|
|
expect(job.name).to eq('compact_orders')
|
|
expect(job.counter).to eq(counter)
|
|
expect(job.error_code).to eq(0)
|
|
expect(Operations::Liability.where(reference_type: 'CompactOrders').count).to eq(result.count)
|
|
end
|
|
|
|
it 'call rake task with time range', clean_database_with_truncation: true do
|
|
min = (Time.now - 2.day).beginning_of_day.to_s(:db)
|
|
max = (Time.now - 1.day).beginning_of_day.to_s(:db)
|
|
|
|
counter = Operations::Liability.where("LOWER(reference_type) = LOWER('Order') AND created_at BETWEEN '#{min}' AND '#{max}'").count
|
|
result = ActiveRecord::Base.connection.query("SELECT NULL, code, currency_id, member_id, SUM(debit), SUM(credit) FROM liabilities WHERE (LOWER(reference_type) = LOWER('Order') AND created_at BETWEEN '#{min}' AND '#{max}') GROUP BY code, member_id, currency_id, DATE(created_at)")
|
|
subject.invoke(min, max)
|
|
expect(job.name).to eq('compact_orders')
|
|
expect(job.counter).to eq(counter)
|
|
expect(job.error_code).to eq(0)
|
|
expect(Operations::Liability.where(reference_type: 'CompactOrders').count).to eq(result.count)
|
|
end
|
|
end
|
|
end
|