sztywny-smsonrails 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/MIT-LICENSE +20 -0
- data/Manifest +101 -0
- data/README.rdoc +211 -0
- data/Rakefile +109 -0
- data/VERSION +1 -0
- data/app/controllers/admin/sms_on_rails/base_controller.rb +11 -0
- data/app/controllers/admin/sms_on_rails/drafts_controller.rb +75 -0
- data/app/controllers/admin/sms_on_rails/outbounds_controller.rb +117 -0
- data/app/controllers/admin/sms_on_rails/phone_carriers_controller.rb +85 -0
- data/app/controllers/admin/sms_on_rails/phone_numbers_controller.rb +101 -0
- data/app/controllers/sms_on_rails/creation_support.rb +99 -0
- data/app/controllers/sms_on_rails_controller.rb +14 -0
- data/app/helpers/admin/sms_on_rails/drafts_helper.rb +2 -0
- data/app/helpers/admin/sms_on_rails/phone_carriers_helper.rb +2 -0
- data/app/helpers/sms_on_rails/phone_numbers_helper.rb +9 -0
- data/app/helpers/sms_on_rails/sms_helper.rb +44 -0
- data/app/models/sms_on_rails/draft.rb +9 -0
- data/app/models/sms_on_rails/outbound.rb +17 -0
- data/app/models/sms_on_rails/phone_carrier.rb +14 -0
- data/app/models/sms_on_rails/phone_number.rb +8 -0
- data/app/views/admin/sms_on_rails/base/index.html.erb +5 -0
- data/app/views/admin/sms_on_rails/drafts/_show.html.erb +34 -0
- data/app/views/admin/sms_on_rails/drafts/edit.html.erb +36 -0
- data/app/views/admin/sms_on_rails/drafts/index.html.erb +32 -0
- data/app/views/admin/sms_on_rails/drafts/new.html.erb +34 -0
- data/app/views/admin/sms_on_rails/drafts/send_sms.html.erb +3 -0
- data/app/views/admin/sms_on_rails/drafts/show.html.erb +4 -0
- data/app/views/admin/sms_on_rails/outbounds/edit.html.erb +68 -0
- data/app/views/admin/sms_on_rails/outbounds/index.html.erb +37 -0
- data/app/views/admin/sms_on_rails/outbounds/new.html.erb +54 -0
- data/app/views/admin/sms_on_rails/outbounds/show.html.erb +69 -0
- data/app/views/admin/sms_on_rails/phone_carriers/edit.html.erb +24 -0
- data/app/views/admin/sms_on_rails/phone_carriers/index.html.erb +24 -0
- data/app/views/admin/sms_on_rails/phone_carriers/new.html.erb +22 -0
- data/app/views/admin/sms_on_rails/phone_carriers/show.html.erb +24 -0
- data/app/views/admin/sms_on_rails/phone_numbers/edit.html.erb +33 -0
- data/app/views/admin/sms_on_rails/phone_numbers/index.html.erb +28 -0
- data/app/views/admin/sms_on_rails/phone_numbers/new.html.erb +31 -0
- data/app/views/admin/sms_on_rails/phone_numbers/show.html.erb +32 -0
- data/app/views/layouts/sms_on_rails/basic.html.erb +26 -0
- data/app/views/sms_on_rails/_phone_carrier_form_item.html.erb +6 -0
- data/app/views/sms_on_rails/_send_sms.html.erb +33 -0
- data/app/views/sms_on_rails/index.html.erb +8 -0
- data/app/views/sms_on_rails/send_sms.html.erb +3 -0
- data/app/views/sms_on_rails/show.html.erb +29 -0
- data/config/routes.rb +19 -0
- data/db/data/fixtures/sms_phone_carriers.yml +110 -0
- data/db/migrate/sms_on_rails_carrier_tables.rb +9 -0
- data/db/migrate/sms_on_rails_model_tables.rb +48 -0
- data/db/migrate/sms_on_rails_phone_number_tables.rb +11 -0
- data/db/seed_data.rb +16 -0
- data/generators/sms_on_rails/USAGE +31 -0
- data/generators/sms_on_rails/commands/inserts.rb +63 -0
- data/generators/sms_on_rails/commands/timestamps.rb +33 -0
- data/generators/sms_on_rails/runners/add_all_models.rb +6 -0
- data/generators/sms_on_rails/runners/dependencies.rb +1 -0
- data/generators/sms_on_rails/runners/remove_all_models.rb +5 -0
- data/generators/sms_on_rails/runners/sms_on_rails_routes.rb +14 -0
- data/generators/sms_on_rails/sms_on_rails_generator.rb +255 -0
- data/generators/sms_on_rails/templates/configuration/clickatell.rb +6 -0
- data/generators/sms_on_rails/templates/configuration/email_gateway.rb +7 -0
- data/generators/sms_on_rails/templates/migrate/schema_migration.rb +15 -0
- data/generators/sms_on_rails/templates/migrate/sms_on_rails_update_phone_numbers.rb +40 -0
- data/generators/sms_on_rails/templates/phone_number_collision.rb +2 -0
- data/init.rb +3 -0
- data/install.rb +1 -0
- data/lib/sms_on_rails.rb +8 -0
- data/lib/sms_on_rails/activerecord_extensions/acts_as_deliverable.rb +92 -0
- data/lib/sms_on_rails/activerecord_extensions/acts_as_substitutable.rb +80 -0
- data/lib/sms_on_rails/activerecord_extensions/has_a_sms_service_provider.rb +101 -0
- data/lib/sms_on_rails/activerecord_extensions/lockable_record.rb +186 -0
- data/lib/sms_on_rails/all_models.rb +3 -0
- data/lib/sms_on_rails/model_support/draft.rb +178 -0
- data/lib/sms_on_rails/model_support/outbound.rb +136 -0
- data/lib/sms_on_rails/model_support/phone_carrier.rb +77 -0
- data/lib/sms_on_rails/model_support/phone_number.rb +248 -0
- data/lib/sms_on_rails/model_support/phone_number_associations.rb +13 -0
- data/lib/sms_on_rails/schema_helper.rb +51 -0
- data/lib/sms_on_rails/service_providers/base.rb +222 -0
- data/lib/sms_on_rails/service_providers/clickatell.rb +54 -0
- data/lib/sms_on_rails/service_providers/dummy.rb +21 -0
- data/lib/sms_on_rails/service_providers/email_gateway.rb +70 -0
- data/lib/sms_on_rails/service_providers/email_gateway_support/errors.rb +20 -0
- data/lib/sms_on_rails/service_providers/email_gateway_support/sms_mailer.rb +21 -0
- data/lib/sms_on_rails/service_providers/email_gateway_support/sms_mailer/sms_through_gateway.erb +6 -0
- data/lib/sms_on_rails/util/sms_error.rb +12 -0
- data/lib/smsonrails.rb +1 -0
- data/public/images/sms_on_rails/railsYoDawg.jpg +0 -0
- data/public/stylesheets/sms_on_rails.css +137 -0
- data/smsonrails.gemspec +159 -0
- data/sztywny-smsonrails.gemspec +148 -0
- data/tasks/sms_on_rails_tasks.rake +68 -0
- data/test/active_record_extensions/delivery_and_locking_test.rb +84 -0
- data/test/models/draft_test.rb +72 -0
- data/test/models/outbound_test.rb +89 -0
- data/test/models/phone_number_test.rb +131 -0
- data/test/run.rb +19 -0
- data/test/service_providers/abstract_test_support.rb +104 -0
- data/test/service_providers/clickatell_test.rb +37 -0
- data/test/service_providers/email_gateway_test.rb +30 -0
- data/test/test_helper.rb +24 -0
- data/uninstall.rb +1 -0
- metadata +193 -0
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'active_support'
|
2
|
+
require 'active_support/inflector'
|
3
|
+
require File.dirname(__FILE__) + '/../lib/sms_on_rails/schema_helper'
|
4
|
+
|
5
|
+
namespace :sms do
|
6
|
+
desc 'Reset the Sms data'
|
7
|
+
task :reset => [ :teardown, :setup ]
|
8
|
+
|
9
|
+
desc 'Create Tables and seed them'
|
10
|
+
task :setup => [ :create_tables, :seed_tables ]
|
11
|
+
|
12
|
+
desc 'Teardown'
|
13
|
+
task :teardown => [:drop_tables]
|
14
|
+
schema_tables = %w(sms_on_rails_carrier_tables sms_on_rails_phone_number_tables sms_on_rails_model_tables)
|
15
|
+
|
16
|
+
[:create, :drop].each do |command|
|
17
|
+
schema_tables.each do |table|
|
18
|
+
|
19
|
+
desc "#{command.to_s.titleize} #{table.titleize}"
|
20
|
+
task "#{command}_#{table}".to_sym => :environment do
|
21
|
+
eval SmsOnRails::SchemaHelper.schema(command, table, :safe => true)
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
desc '#{command.to_s.titleize} All SMS database tables'
|
26
|
+
task "#{command}_tables".to_sym => schema_tables.collect{|t| "sms:#{command}_#{t}"}
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
desc 'Seed tables'
|
31
|
+
task :seed_tables => :environment do
|
32
|
+
puts "Seeding SMS tables..."
|
33
|
+
load File.dirname(__FILE__) + '/../db/seed_data.rb'
|
34
|
+
end
|
35
|
+
|
36
|
+
desc 'Create New Specialized Gateway Template'
|
37
|
+
task :create_email_template => :environment do
|
38
|
+
raise "Task unavailable to this database (no migration support)" unless ActiveRecord::Base.connection.supports_migrations?
|
39
|
+
|
40
|
+
default_path = 'sms_on_rails/service_providers/email_gateway_support/sms_mailer'
|
41
|
+
default_template_name = 'sms_through_gateway.erb'
|
42
|
+
dest_path = File.join(ActionMailer::Base.template_root, default_path)
|
43
|
+
FileUtils.mkdir_p(dest_path)
|
44
|
+
|
45
|
+
dest = File.join(dest_path, default_template_name)
|
46
|
+
unless File.exists?(dest)
|
47
|
+
src = File.join(File.dirname(__FILE__), '../lib', default_path, 'sms_through_gateway.erb')
|
48
|
+
FileUtils.cp(src, dest)
|
49
|
+
end
|
50
|
+
|
51
|
+
config = "\n# Place email gateway templates in the default view directory"
|
52
|
+
config << "\n# To configure your sms messages, edit file:"
|
53
|
+
config << "\n# #{dest.gsub(RAILS_ROOT, '')} "
|
54
|
+
|
55
|
+
#relative_root = File.expand_path(ActionMailer::Base.template_root.to_s)
|
56
|
+
#relative_root.gsub!(RAILS_ROOT+'/', '/..')
|
57
|
+
#config << "File.dirname(__FILE__) + #{relative_root.inspect}\n\n"
|
58
|
+
config << "\nSmsOnRails::ServiceProviders::EmailGatewaySupport::SmsMailer.template_root= "
|
59
|
+
config << "ActionMailer::Base.template_root\n\n"
|
60
|
+
|
61
|
+
File.open(File.join(RAILS_ROOT, 'config/environment.rb'), 'a') {|file| file.puts config }
|
62
|
+
|
63
|
+
puts "environment.rb has been updated to set your new template path."
|
64
|
+
puts "Please edit the template in the file:\n #{dest}"
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require File.dirname(__FILE__)+'/../test_helper'
|
2
|
+
|
3
|
+
#require 'ruby-debug'
|
4
|
+
|
5
|
+
class SmsOnRails::Outbound < ActiveRecord::Base
|
6
|
+
def deliver_message_with_exception(options={})
|
7
|
+
raise Exception.new('asdf')
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class SmsOnRails::DeliveryAndLockingTest < Test::Unit::TestCase
|
12
|
+
|
13
|
+
def setup
|
14
|
+
super
|
15
|
+
SmsOnRails::ServiceProviders::Base.default_service_provider = SmsOnRails::ServiceProviders::Dummy.instance
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_failed_delivery_with_exception
|
19
|
+
SmsOnRails::Outbound.send :alias_method_chain, :deliver_message, :exception
|
20
|
+
SmsOnRails::Outbound.delete_all
|
21
|
+
|
22
|
+
sms = nil
|
23
|
+
assert_raises(Exception) {
|
24
|
+
sms = SmsOnRails::Outbound.send_immediately! 'hi', '2065552476'
|
25
|
+
}
|
26
|
+
|
27
|
+
sms = SmsOnRails::Outbound.find :first
|
28
|
+
assert(sms)
|
29
|
+
|
30
|
+
assert_equal('FAILED', sms.status)
|
31
|
+
#assert(sms.processed_on.to_i <= Time.now.to_i)
|
32
|
+
ensure
|
33
|
+
SmsOnRails::Outbound.send :alias_method, :deliver_message, :deliver_message_without_exception
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
def test_failed_delivery_with_errors
|
38
|
+
SmsOnRails::Outbound.send :alias_method_chain, :deliver_message, :exception
|
39
|
+
SmsOnRails::Outbound.delete_all
|
40
|
+
|
41
|
+
sms = SmsOnRails::Outbound.send_immediately 'hi', '2065552476'
|
42
|
+
assert(sms, "SHOULD create and SMS object")
|
43
|
+
assert(sms.errors.any?, "Expecting deliver errors.")
|
44
|
+
|
45
|
+
assert_equal(sms.errors.on(:base), 'Unable to send message.')
|
46
|
+
sms = SmsOnRails::Outbound.find :first
|
47
|
+
assert(sms)
|
48
|
+
|
49
|
+
assert_equal('FAILED', sms.status)
|
50
|
+
assert(sms.processed_on.to_i <= Time.now.to_i)
|
51
|
+
ensure
|
52
|
+
SmsOnRails::Outbound.send :alias_method, :deliver_message, :deliver_message_without_exception
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_deliver_stale_record_should_raise_unlockable_error
|
56
|
+
SmsOnRails::Outbound.delete_all
|
57
|
+
|
58
|
+
#get the sms instance
|
59
|
+
sms = SmsOnRails::Outbound.create_sms 'hi', '2065552476'
|
60
|
+
|
61
|
+
#change the lock id
|
62
|
+
same_sms = SmsOnRails::Outbound.find :first
|
63
|
+
same_sms.notes = 'something fun'
|
64
|
+
same_sms.save!
|
65
|
+
|
66
|
+
#attempt to deliver should catch stale record and raise unable to lock
|
67
|
+
assert_raises(SmsOnRails::LockableRecord::UnableToLockRecord) { sms.deliver! }
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_deliver_already_processed_record_should_raise_already_processed_error
|
71
|
+
|
72
|
+
SmsOnRails::Outbound.delete_all
|
73
|
+
|
74
|
+
#get the sms instance
|
75
|
+
sms = SmsOnRails::Outbound.create_sms 'hi', '2065552476'
|
76
|
+
|
77
|
+
sms.status = 'PROCESSING'
|
78
|
+
sms.save!
|
79
|
+
|
80
|
+
#should be unlockable because status is not set to NOT_PROCESSED
|
81
|
+
assert_raises(SmsOnRails::LockableRecord::AlreadyProcessed) { sms.deliver! }
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require File.dirname(__FILE__)+'/../test_helper'
|
2
|
+
|
3
|
+
#require 'ruby-debug'
|
4
|
+
|
5
|
+
class SmsOnRails::DraftTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def setup
|
8
|
+
super
|
9
|
+
SmsOnRails::PhoneNumber.delete_all
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_create_draft_with_nested_params_with_existing_phone
|
13
|
+
phone = SmsOnRails::PhoneNumber.create!(:number => '12065557777')
|
14
|
+
test_create_draft_with_nested_params
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_create_draft_with_nested_params
|
18
|
+
draft = SmsOnRails::Draft.create_sms(test_params)
|
19
|
+
|
20
|
+
validate_draft draft
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_create_draft_with_exception
|
24
|
+
args = test_params.dup
|
25
|
+
args['outbounds_attributes']['0']['phone_number_attributes'].update('number' => 'ss' )
|
26
|
+
assert_raises(ActiveRecord::RecordInvalid) { SmsOnRails::Draft.create_sms!(args) }
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_create_draft_with_nested_params_with_error
|
31
|
+
args = test_params.dup
|
32
|
+
args['outbounds_attributes']['0']['phone_number_attributes'].update('number' => 'ss' )
|
33
|
+
|
34
|
+
draft = SmsOnRails::Draft.create_sms(args)
|
35
|
+
|
36
|
+
assert(draft)
|
37
|
+
assert(draft.errors.any?)
|
38
|
+
assert(draft.new_record?)
|
39
|
+
assert('Test Draft', draft.message)
|
40
|
+
|
41
|
+
assert(draft.outbounds)
|
42
|
+
assert_equal(1, draft.outbounds.length)
|
43
|
+
assert('NOT PROCESSED', draft.outbounds.first.status)
|
44
|
+
assert(draft.outbounds.first.new_record?)
|
45
|
+
|
46
|
+
assert(draft.outbounds.first.phone_number)
|
47
|
+
assert(draft.outbounds.first.phone_number.new_record?)
|
48
|
+
assert('12065557777', draft.outbounds.first.phone_number.number)
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_params
|
53
|
+
params = {"draft"=>{"deliver_after(1i)"=>"", "message"=>"Test Draft", "deliver_after(2i)"=>"", "outbounds_attributes"=>{"0"=>{"phone_number_attributes"=>{"number"=>"12065557777", "carrier_id"=>"5"}}}, "deliver_after(3i)"=>"", "deliver_after(4i)"=>"", "deliver_after(5i)"=>""}, "commit"=>"Send Sms", "authenticity_token"=>"XGchwHjmN2j77X27pgxhxOq/hOKWmouy27oMrPWhlUA=", "send_immediately"=>"true", "previous_action"=>"new"}
|
54
|
+
params['draft']
|
55
|
+
end
|
56
|
+
|
57
|
+
protected
|
58
|
+
def validate_draft(draft, options={})
|
59
|
+
assert(draft)
|
60
|
+
assert(!draft.new_record?)
|
61
|
+
assert('Test Draft', draft.message)
|
62
|
+
|
63
|
+
assert(draft.outbounds)
|
64
|
+
assert_equal(1, draft.outbounds.length)
|
65
|
+
assert('NOT PROCESSED', draft.outbounds.first.status)
|
66
|
+
assert(!draft.outbounds.first.new_record?)
|
67
|
+
|
68
|
+
assert(draft.outbounds.first.phone_number)
|
69
|
+
assert(!draft.outbounds.first.phone_number.new_record?)
|
70
|
+
assert('12065557777', draft.outbounds.first.phone_number.number)
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
require File.dirname(__FILE__)+'/../test_helper'
|
2
|
+
|
3
|
+
#require 'ruby-debug'
|
4
|
+
|
5
|
+
class SmsOnRails::OutboundTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def test_outbound_create_sms_simple
|
8
|
+
SmsOnRails::Outbound.delete_all
|
9
|
+
sms = SmsOnRails::Outbound.create_sms 'hi', '2065552476'
|
10
|
+
assert(sms)
|
11
|
+
assert(sms.is_a?(ActiveRecord::Base))
|
12
|
+
|
13
|
+
validate_new_sms('12065552476', 'hi')
|
14
|
+
end
|
15
|
+
|
16
|
+
|
17
|
+
def test_outbound_create_sms_multiple
|
18
|
+
SmsOnRails::Outbound.delete_all
|
19
|
+
smses = SmsOnRails::Outbound.create_sms 'multi test', ['2065552476', '206.555.1234', '1(415)5551234']
|
20
|
+
assert(smses)
|
21
|
+
assert_equal(3, smses.length)
|
22
|
+
|
23
|
+
['12065552476', '12065551234', '14155551234'].each do |number|
|
24
|
+
validate_new_sms(number, 'multi test')
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_outbound_send_immediately
|
29
|
+
SmsOnRails::Outbound.delete_all
|
30
|
+
sms = SmsOnRails::Outbound.send_immediately 'hi', '2065552476'
|
31
|
+
|
32
|
+
sms = SmsOnRails::Outbound.find :first
|
33
|
+
assert(sms)
|
34
|
+
assert_equal('PROCESSED', sms.status)
|
35
|
+
assert(sms.processed_on.to_i <= Time.now.to_i)
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_outbound_send_immediately_for_multiple
|
39
|
+
SmsOnRails::Outbound.delete_all
|
40
|
+
smses = SmsOnRails::Outbound.send_immediately 'hi', ['2065552476', '4155553456']
|
41
|
+
|
42
|
+
smses = SmsOnRails::Outbound.find :all
|
43
|
+
assert(smses.length, 2)
|
44
|
+
smses.each{|sms| assert('PROCESSED', sms.status)
|
45
|
+
assert(sms.processed_on.to_i <= Time.now.to_i)
|
46
|
+
assert_equal(SmsOnRails::ServiceProviders::Base.default_service_provider,
|
47
|
+
sms.sms_service_provider)
|
48
|
+
}
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
def test_outbound_substitution
|
53
|
+
SmsOnRails::Outbound.delete_all
|
54
|
+
time = Time.now
|
55
|
+
sms = SmsOnRails::Outbound.create_sms '$TIME$', '2065552476'
|
56
|
+
time_sub = Time.parse sms.full_message
|
57
|
+
assert(time_sub.to_i >= time.to_i)
|
58
|
+
|
59
|
+
sms = SmsOnRails::Outbound.create_sms 'Format phone: $PHONE_NUMBER_DIGITS$ end', '2065552476'
|
60
|
+
assert_equal('Format phone: 12065552476 end', sms.full_message)
|
61
|
+
|
62
|
+
sms = SmsOnRails::Outbound.create_sms 'Format phone human: $PHONE_NUMBER$ end', '2065552476'
|
63
|
+
assert_equal('Format phone human: (206) 555-2476 end', sms.full_message)
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_send_to_invalid_number
|
68
|
+
assert_raise(ActiveRecord::RecordInvalid){
|
69
|
+
sms = SmsOnRails::Outbound.create_sms 'some test message #{Time.now.to_s(:db)}', 'ss', :find => {:create => :create!}
|
70
|
+
}
|
71
|
+
end
|
72
|
+
|
73
|
+
protected
|
74
|
+
|
75
|
+
def validate_new_sms(phone_number, message)
|
76
|
+
phone = SmsOnRails::PhoneNumber.find_by_number phone_number
|
77
|
+
assert(phone)
|
78
|
+
|
79
|
+
outbound = SmsOnRails::Outbound.find_by_sms_phone_number_id phone
|
80
|
+
assert(outbound)
|
81
|
+
assert(outbound.draft)
|
82
|
+
assert(SmsOnRails::ServiceProviders::Dummy.provider_id, outbound.sms_service_provider_id)
|
83
|
+
assert_nil(outbound.sms_service_provider)
|
84
|
+
assert_equal(message, outbound.draft.message)
|
85
|
+
assert_equal('NOT_PROCESSED', outbound.status)
|
86
|
+
outbound
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
@@ -0,0 +1,131 @@
|
|
1
|
+
require File.dirname(__FILE__)+'/../test_helper'
|
2
|
+
|
3
|
+
class SmsOnRails::OutboundTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def test_phone_number_saves_digits
|
6
|
+
SmsOnRails::PhoneNumber.delete_all
|
7
|
+
sms = SmsOnRails::PhoneNumber.create!(:number => '206.555.1234')
|
8
|
+
sms.reload
|
9
|
+
assert('12065551234', sms.number)
|
10
|
+
|
11
|
+
sms = SmsOnRails::PhoneNumber.create!(:number => '(206)555 - 1235 ')
|
12
|
+
sms.reload
|
13
|
+
assert('12065551235', sms.number)
|
14
|
+
|
15
|
+
sms = SmsOnRails::PhoneNumber.create!(:number => '1 206)555 - 2222 ')
|
16
|
+
sms.reload
|
17
|
+
assert('12065552222', sms.number)
|
18
|
+
|
19
|
+
#international
|
20
|
+
sms = SmsOnRails::PhoneNumber.create!(:number => '44 206)555 - 3333 ')
|
21
|
+
sms.reload
|
22
|
+
assert('442065553333', sms.number)
|
23
|
+
|
24
|
+
#international with plus
|
25
|
+
sms = SmsOnRails::PhoneNumber.create!(:number => '+206.555.4444')
|
26
|
+
sms.reload
|
27
|
+
assert('2065554444', sms.number)
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_find_and_create_all_by_numbers
|
31
|
+
SmsOnRails::PhoneNumber.delete_all
|
32
|
+
test_phone_number_saves_digits
|
33
|
+
|
34
|
+
smses = SmsOnRails::PhoneNumber.find_and_create_all_by_numbers(['+206.555.4444', '44 206)555 - 3333 ', '415.555.4444', '14155554444'], :create => :create!)
|
35
|
+
assert_equal(3, smses.length)
|
36
|
+
|
37
|
+
# These are sorted when creating new ones
|
38
|
+
['2065554444', '442065553333', '14155554444'].each_with_index do |number, idx|
|
39
|
+
assert(number, smses[idx].number)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
|
44
|
+
def test_find_and_create_all_by_numbers_with_ar
|
45
|
+
SmsOnRails::PhoneNumber.delete_all
|
46
|
+
SmsOnRails::PhoneNumber.create!(:number => '44 206)555 - 3333 ')
|
47
|
+
|
48
|
+
list = [SmsOnRails::PhoneNumber.new(:number => '206.555.4444', :carrier_id => 1),
|
49
|
+
SmsOnRails::PhoneNumber.new(:number => '44 206)555 - 3333 ', :carrier_id => 2)]
|
50
|
+
|
51
|
+
smses = SmsOnRails::PhoneNumber.find_and_create_all_by_numbers(list, :create => :new)
|
52
|
+
assert_equal(2, smses.length)
|
53
|
+
|
54
|
+
assert(smses.first.new_record?)
|
55
|
+
|
56
|
+
# These are sorted when creating new ones
|
57
|
+
['12065554444', '442065553333'].each_with_index do |number, idx|
|
58
|
+
assert_equal(number, smses[idx].number)
|
59
|
+
assert_equal(idx + 1, smses[idx].carrier_id)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_find_and_create_all_by_numbers_with_hash
|
64
|
+
SmsOnRails::PhoneNumber.delete_all
|
65
|
+
SmsOnRails::PhoneNumber.create!(:number => '44 206)555 - 3333 ')
|
66
|
+
|
67
|
+
list = [SmsOnRails::PhoneNumber.new(:number => '206.555.4444', :carrier_id => 1),
|
68
|
+
SmsOnRails::PhoneNumber.new(:number => '44 206)555 - 3333 ', :carrier_id => 2)]
|
69
|
+
list.collect!{|x| x.attributes }
|
70
|
+
|
71
|
+
smses = SmsOnRails::PhoneNumber.find_and_create_all_by_numbers(list, :create => :new)
|
72
|
+
assert_equal(2, smses.length)
|
73
|
+
|
74
|
+
assert(smses.first.new_record?)
|
75
|
+
|
76
|
+
# These are sorted when creating new ones
|
77
|
+
['12065554444', '442065553333'].each_with_index do |number, idx|
|
78
|
+
assert_equal(number, smses[idx].number)
|
79
|
+
assert_equal(idx + 1, smses[idx].carrier_id)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
|
84
|
+
|
85
|
+
def test_sms_carrier_email
|
86
|
+
phone = SmsOnRails::PhoneNumber.create!(:carrier_id => 1, :number => '12065557777')
|
87
|
+
assert_equal('12065557777', phone.number)
|
88
|
+
assert_equal('2065557777@vtext.com', phone.sms_email_address)
|
89
|
+
end
|
90
|
+
|
91
|
+
|
92
|
+
def test_find_and_create_all_by_numbers_with_duplicates
|
93
|
+
SmsOnRails::PhoneNumber.delete_all
|
94
|
+
test_phone_number_saves_digits
|
95
|
+
|
96
|
+
smses = SmsOnRails::PhoneNumber.find_and_create_all_by_numbers(['+206.555.4444', '44 206)555 - 3333 ', '415.555.4444', '+442065553333'], :create => :create!, :keep_duplicates => true)
|
97
|
+
assert_equal(4, smses.length)
|
98
|
+
|
99
|
+
# These are sorted when creating new ones
|
100
|
+
['12065554444', '442065553333', '14155554444', '442065553333'].each_with_index do |number, idx|
|
101
|
+
assert_equal(number, smses[idx].number)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def test_find_all_by_numbers
|
106
|
+
SmsOnRails::PhoneNumber.delete_all
|
107
|
+
test_phone_number_saves_digits
|
108
|
+
|
109
|
+
smses = SmsOnRails::PhoneNumber.find_all_by_numbers(['+206.555.4444', '44 206)555 - 3333 ', '415.555.4444'])
|
110
|
+
assert_equal(2, smses.length)
|
111
|
+
|
112
|
+
['2065554444', '442065553333'].each do |number|
|
113
|
+
assert(smses.select{|x| x.number == number })
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def test_find_by_number_with_finder_options
|
118
|
+
SmsOnRails::PhoneNumber.delete_all
|
119
|
+
test_phone_number_saves_digits
|
120
|
+
|
121
|
+
sms = SmsOnRails::PhoneNumber.find_by_number('+206.555.4444', :conditions => 'id is not null')
|
122
|
+
assert_equal('12065554444', sms.number)
|
123
|
+
end
|
124
|
+
|
125
|
+
|
126
|
+
def test_human_display
|
127
|
+
assert_equal('(206) 555-4444', SmsOnRails::PhoneNumber.human_display('206.555.4444'))
|
128
|
+
assert_equal('+442065554444', SmsOnRails::PhoneNumber.human_display('44-206.555.4444'))
|
129
|
+
end
|
130
|
+
|
131
|
+
end
|