parent
0b783ac495
commit
7b1a523aba
@ -0,0 +1,28 @@
|
||||
<% content_for(:header_color) {"3B7EBB"} %>
|
||||
<% content_for(:header_img) {"top.png"} %>
|
||||
|
||||
<% content_for :body do %>
|
||||
|
||||
<p style="text-align: center;">Your table import just finished.</p>
|
||||
<p style="text-align: center;"><strong><%= @imported_tables %></strong> out of <strong><%= @total_tables %></strong> <%= @total_tables == 1? 'was' : 'were' %> successfully imported.</p>
|
||||
|
||||
<table border="0" cellspacing="0" cellpadding="0" style="margin: 0 auto;">
|
||||
<tr>
|
||||
<td align="center" valign="middle">
|
||||
<table border="0" cellpadding="0" cellspacing="0" style="background-color:#407CC0;border-collapse:separate!important;border-radius:23px">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center" valign="middle" style="color:#ffffff;font-family:Helvetica,Arial,sans-serif;font-size:16px;line-height:100%;padding-top:15px;padding-right:31px;padding-bottom:13px;padding-left:31px">
|
||||
<a href="<%= @link %>" style="color:#ffffff;text-decoration:none" target="_blank">View your tables</a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="height: 20px;"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<% end %>
|
@ -0,0 +1,46 @@
|
||||
# encoding: UTF-8
|
||||
|
||||
require_relative '../../../../lib/resque/user_jobs'
|
||||
|
||||
module CartoDB
|
||||
module Importer2
|
||||
|
||||
class MailNotifier
|
||||
|
||||
MIN_IMPORT_TIME_TO_NOTIFY = 5 * 60 # seconds
|
||||
|
||||
def initialize(data_import, results, resque)
|
||||
@data_import = data_import
|
||||
@results = results
|
||||
@resque = resque
|
||||
@mail_sent = false
|
||||
end
|
||||
|
||||
def notify_if_needed
|
||||
send! if should_notify?
|
||||
end
|
||||
|
||||
def should_notify?
|
||||
import_time >= MIN_IMPORT_TIME_TO_NOTIFY && @data_import.synchronization_id.nil?
|
||||
end
|
||||
|
||||
def import_time
|
||||
@data_import.updated_at - @data_import.created_at
|
||||
end
|
||||
|
||||
def send!
|
||||
user_id = @data_import.user_id
|
||||
imported_tables = @results.select {|r| r.success }.length
|
||||
total_tables = @results.length
|
||||
@mail_sent = @resque.enqueue(::Resque::UserJobs::Mail::DataImportFinished, user_id, imported_tables, total_tables)
|
||||
end
|
||||
|
||||
def mail_sent?
|
||||
return @mail_sent
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end #Importer2
|
||||
end #CartoDB
|
||||
|
@ -0,0 +1,76 @@
|
||||
# encoding: UTF-8
|
||||
|
||||
require 'rspec'
|
||||
require_relative '../../lib/importer/mail_notifier'
|
||||
require 'ruby-debug' #TODO remove
|
||||
|
||||
RSpec.configure do |config|
|
||||
config.mock_with :mocha
|
||||
end
|
||||
|
||||
describe CartoDB::Importer2::MailNotifier do
|
||||
|
||||
START_TIME = 0
|
||||
|
||||
before(:each) do
|
||||
@data_import = mock
|
||||
@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)
|
||||
set_import_duration(CartoDB::Importer2::MailNotifier::MIN_IMPORT_TIME_TO_NOTIFY + 1)
|
||||
@data_import.stubs(:user_id).once.returns(:any_user_id)
|
||||
@result.stubs(:success).once.returns(true)
|
||||
@resque.expects(:enqueue).with(::Resque::UserJobs::Mail::DataImportFinished, :any_user_id, 1, 1).returns(true)
|
||||
|
||||
@mail_notifier.notify_if_needed
|
||||
|
||||
@mail_notifier.mail_sent?.should == true
|
||||
end
|
||||
end
|
||||
|
||||
describe '#should_notify?' do
|
||||
it 'should return true if the import took more than MIN_IMPORT_TIME_TO_NOTIFY and was not a sync' do
|
||||
set_import_duration(CartoDB::Importer2::MailNotifier::MIN_IMPORT_TIME_TO_NOTIFY + 1)
|
||||
@data_import.stubs(:synchronization_id).once.returns(nil)
|
||||
|
||||
@mail_notifier.should_notify?.should == true
|
||||
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)
|
||||
@resque.expects(:enqueue).with(::Resque::UserJobs::Mail::DataImportFinished, :any_user_id, 1, 1).returns(true)
|
||||
@result.stubs(:success).once.returns(true)
|
||||
@mail_notifier.send!
|
||||
@mail_notifier.mail_sent?.should == true
|
||||
end
|
||||
end
|
||||
|
||||
end
|
Loading…
Reference in new issue