95 lines
3.6 KiB
Ruby
95 lines
3.6 KiB
Ruby
require 'spec_helper_min'
|
|
require_relative '../../lib/importer/mail_notifier'
|
|
require_relative '../../../../spec/rspec_configuration.rb'
|
|
require 'active_support/core_ext' # Needed for string.blank?
|
|
|
|
describe CartoDB::Importer2::MailNotifier do
|
|
|
|
START_TIME = 0
|
|
|
|
before(:each) do
|
|
@data_import = FactoryGirl.build(:data_import)
|
|
@resque = mock
|
|
@result = mock
|
|
results = [@result]
|
|
@mail_notifier = CartoDB::Importer2::MailNotifier.new(@data_import, results, @resque)
|
|
end
|
|
|
|
def set_import_duration duration
|
|
@data_import.stubs(:created_at).once.returns(START_TIME)
|
|
@data_import.stubs(:updated_at).once.returns(START_TIME + duration)
|
|
end
|
|
|
|
describe '#notify_if_needed' do
|
|
|
|
it 'should send a mail if the import took more than MIN_IMPORT_TIME_TO_NOTIFY' do
|
|
@data_import.stubs(:synchronization_id).once.returns(nil)
|
|
error_text = { title: 'error stubbing' }
|
|
@data_import.expects(:get_error_text).once.returns(error_text)
|
|
set_import_duration(CartoDB::Importer2::MailNotifier::MIN_IMPORT_TIME_TO_NOTIFY + 1)
|
|
@data_import.stubs(:user_id).once.returns(:any_user_id)
|
|
@data_import.stubs(:stats).returns('[]')
|
|
@data_import.stubs(:service_item_id).returns('filename.txt')
|
|
@result.stubs(:success).returns(true)
|
|
enqueue_params = :any_user_id, 1, 1, @result, @result, error_text, ['filename.txt']
|
|
@resque.expects(:enqueue).with(::Resque::UserJobs::Mail::DataImportFinished, *enqueue_params).returns(true)
|
|
|
|
@mail_notifier.notify_if_needed
|
|
|
|
@mail_notifier.mail_sent?.should == true
|
|
end
|
|
end
|
|
|
|
describe '#should_notify?' do
|
|
def stub_notifiable_data_import
|
|
set_import_duration(CartoDB::Importer2::MailNotifier::MIN_IMPORT_TIME_TO_NOTIFY + 1)
|
|
@data_import.stubs(:synchronization_id).once.returns(nil)
|
|
@data_import.stubs(:stats).returns('[]')
|
|
@data_import.stubs(:service_item_id).returns('filename.txt')
|
|
end
|
|
|
|
it 'should return true if the import took more than MIN_IMPORT_TIME_TO_NOTIFY and was not a sync' do
|
|
stub_notifiable_data_import
|
|
|
|
@mail_notifier.should_notify?.should == true
|
|
end
|
|
|
|
it 'should return false if the import state is not finished' do
|
|
stub_notifiable_data_import
|
|
@data_import.stubs(:state).returns('pending')
|
|
|
|
@mail_notifier.should_notify?.should == false
|
|
end
|
|
|
|
it 'should return false if the import took less than MIN_IMPORT_TIME_TO_NOTIFY' do
|
|
set_import_duration(CartoDB::Importer2::MailNotifier::MIN_IMPORT_TIME_TO_NOTIFY - 1)
|
|
|
|
@mail_notifier.should_notify?.should == false
|
|
end
|
|
|
|
it 'should return false if it was a sync import' do
|
|
set_import_duration(CartoDB::Importer2::MailNotifier::MIN_IMPORT_TIME_TO_NOTIFY + 1)
|
|
ANY_SYNC_ID = 1
|
|
@data_import.stubs(:synchronization_id).once.returns(ANY_SYNC_ID)
|
|
|
|
@mail_notifier.should_notify?.should == false
|
|
end
|
|
end
|
|
|
|
describe '#send!' do
|
|
it 'should inconditionally send a mail to the user who triggered the import' do
|
|
@data_import.stubs(:user_id).once.returns(:any_user_id)
|
|
@data_import.stubs(:stats).returns('[]')
|
|
@data_import.stubs(:service_item_id).returns('filename.txt')
|
|
error_text = { title: 'error stubbing' }
|
|
@data_import.expects(:get_error_text).once.returns(error_text)
|
|
enqueue_params = :any_user_id, 1, 1, @result, @result, error_text, ['filename.txt']
|
|
@resque.expects(:enqueue).with(::Resque::UserJobs::Mail::DataImportFinished, *enqueue_params).returns(true)
|
|
@result.stubs(:success).returns(true)
|
|
@mail_notifier.send!
|
|
@mail_notifier.mail_sent?.should == true
|
|
end
|
|
end
|
|
|
|
end
|