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.
Files changed (103) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/Manifest +101 -0
  3. data/README.rdoc +211 -0
  4. data/Rakefile +109 -0
  5. data/VERSION +1 -0
  6. data/app/controllers/admin/sms_on_rails/base_controller.rb +11 -0
  7. data/app/controllers/admin/sms_on_rails/drafts_controller.rb +75 -0
  8. data/app/controllers/admin/sms_on_rails/outbounds_controller.rb +117 -0
  9. data/app/controllers/admin/sms_on_rails/phone_carriers_controller.rb +85 -0
  10. data/app/controllers/admin/sms_on_rails/phone_numbers_controller.rb +101 -0
  11. data/app/controllers/sms_on_rails/creation_support.rb +99 -0
  12. data/app/controllers/sms_on_rails_controller.rb +14 -0
  13. data/app/helpers/admin/sms_on_rails/drafts_helper.rb +2 -0
  14. data/app/helpers/admin/sms_on_rails/phone_carriers_helper.rb +2 -0
  15. data/app/helpers/sms_on_rails/phone_numbers_helper.rb +9 -0
  16. data/app/helpers/sms_on_rails/sms_helper.rb +44 -0
  17. data/app/models/sms_on_rails/draft.rb +9 -0
  18. data/app/models/sms_on_rails/outbound.rb +17 -0
  19. data/app/models/sms_on_rails/phone_carrier.rb +14 -0
  20. data/app/models/sms_on_rails/phone_number.rb +8 -0
  21. data/app/views/admin/sms_on_rails/base/index.html.erb +5 -0
  22. data/app/views/admin/sms_on_rails/drafts/_show.html.erb +34 -0
  23. data/app/views/admin/sms_on_rails/drafts/edit.html.erb +36 -0
  24. data/app/views/admin/sms_on_rails/drafts/index.html.erb +32 -0
  25. data/app/views/admin/sms_on_rails/drafts/new.html.erb +34 -0
  26. data/app/views/admin/sms_on_rails/drafts/send_sms.html.erb +3 -0
  27. data/app/views/admin/sms_on_rails/drafts/show.html.erb +4 -0
  28. data/app/views/admin/sms_on_rails/outbounds/edit.html.erb +68 -0
  29. data/app/views/admin/sms_on_rails/outbounds/index.html.erb +37 -0
  30. data/app/views/admin/sms_on_rails/outbounds/new.html.erb +54 -0
  31. data/app/views/admin/sms_on_rails/outbounds/show.html.erb +69 -0
  32. data/app/views/admin/sms_on_rails/phone_carriers/edit.html.erb +24 -0
  33. data/app/views/admin/sms_on_rails/phone_carriers/index.html.erb +24 -0
  34. data/app/views/admin/sms_on_rails/phone_carriers/new.html.erb +22 -0
  35. data/app/views/admin/sms_on_rails/phone_carriers/show.html.erb +24 -0
  36. data/app/views/admin/sms_on_rails/phone_numbers/edit.html.erb +33 -0
  37. data/app/views/admin/sms_on_rails/phone_numbers/index.html.erb +28 -0
  38. data/app/views/admin/sms_on_rails/phone_numbers/new.html.erb +31 -0
  39. data/app/views/admin/sms_on_rails/phone_numbers/show.html.erb +32 -0
  40. data/app/views/layouts/sms_on_rails/basic.html.erb +26 -0
  41. data/app/views/sms_on_rails/_phone_carrier_form_item.html.erb +6 -0
  42. data/app/views/sms_on_rails/_send_sms.html.erb +33 -0
  43. data/app/views/sms_on_rails/index.html.erb +8 -0
  44. data/app/views/sms_on_rails/send_sms.html.erb +3 -0
  45. data/app/views/sms_on_rails/show.html.erb +29 -0
  46. data/config/routes.rb +19 -0
  47. data/db/data/fixtures/sms_phone_carriers.yml +110 -0
  48. data/db/migrate/sms_on_rails_carrier_tables.rb +9 -0
  49. data/db/migrate/sms_on_rails_model_tables.rb +48 -0
  50. data/db/migrate/sms_on_rails_phone_number_tables.rb +11 -0
  51. data/db/seed_data.rb +16 -0
  52. data/generators/sms_on_rails/USAGE +31 -0
  53. data/generators/sms_on_rails/commands/inserts.rb +63 -0
  54. data/generators/sms_on_rails/commands/timestamps.rb +33 -0
  55. data/generators/sms_on_rails/runners/add_all_models.rb +6 -0
  56. data/generators/sms_on_rails/runners/dependencies.rb +1 -0
  57. data/generators/sms_on_rails/runners/remove_all_models.rb +5 -0
  58. data/generators/sms_on_rails/runners/sms_on_rails_routes.rb +14 -0
  59. data/generators/sms_on_rails/sms_on_rails_generator.rb +255 -0
  60. data/generators/sms_on_rails/templates/configuration/clickatell.rb +6 -0
  61. data/generators/sms_on_rails/templates/configuration/email_gateway.rb +7 -0
  62. data/generators/sms_on_rails/templates/migrate/schema_migration.rb +15 -0
  63. data/generators/sms_on_rails/templates/migrate/sms_on_rails_update_phone_numbers.rb +40 -0
  64. data/generators/sms_on_rails/templates/phone_number_collision.rb +2 -0
  65. data/init.rb +3 -0
  66. data/install.rb +1 -0
  67. data/lib/sms_on_rails.rb +8 -0
  68. data/lib/sms_on_rails/activerecord_extensions/acts_as_deliverable.rb +92 -0
  69. data/lib/sms_on_rails/activerecord_extensions/acts_as_substitutable.rb +80 -0
  70. data/lib/sms_on_rails/activerecord_extensions/has_a_sms_service_provider.rb +101 -0
  71. data/lib/sms_on_rails/activerecord_extensions/lockable_record.rb +186 -0
  72. data/lib/sms_on_rails/all_models.rb +3 -0
  73. data/lib/sms_on_rails/model_support/draft.rb +178 -0
  74. data/lib/sms_on_rails/model_support/outbound.rb +136 -0
  75. data/lib/sms_on_rails/model_support/phone_carrier.rb +77 -0
  76. data/lib/sms_on_rails/model_support/phone_number.rb +248 -0
  77. data/lib/sms_on_rails/model_support/phone_number_associations.rb +13 -0
  78. data/lib/sms_on_rails/schema_helper.rb +51 -0
  79. data/lib/sms_on_rails/service_providers/base.rb +222 -0
  80. data/lib/sms_on_rails/service_providers/clickatell.rb +54 -0
  81. data/lib/sms_on_rails/service_providers/dummy.rb +21 -0
  82. data/lib/sms_on_rails/service_providers/email_gateway.rb +70 -0
  83. data/lib/sms_on_rails/service_providers/email_gateway_support/errors.rb +20 -0
  84. data/lib/sms_on_rails/service_providers/email_gateway_support/sms_mailer.rb +21 -0
  85. data/lib/sms_on_rails/service_providers/email_gateway_support/sms_mailer/sms_through_gateway.erb +6 -0
  86. data/lib/sms_on_rails/util/sms_error.rb +12 -0
  87. data/lib/smsonrails.rb +1 -0
  88. data/public/images/sms_on_rails/railsYoDawg.jpg +0 -0
  89. data/public/stylesheets/sms_on_rails.css +137 -0
  90. data/smsonrails.gemspec +159 -0
  91. data/sztywny-smsonrails.gemspec +148 -0
  92. data/tasks/sms_on_rails_tasks.rake +68 -0
  93. data/test/active_record_extensions/delivery_and_locking_test.rb +84 -0
  94. data/test/models/draft_test.rb +72 -0
  95. data/test/models/outbound_test.rb +89 -0
  96. data/test/models/phone_number_test.rb +131 -0
  97. data/test/run.rb +19 -0
  98. data/test/service_providers/abstract_test_support.rb +104 -0
  99. data/test/service_providers/clickatell_test.rb +37 -0
  100. data/test/service_providers/email_gateway_test.rb +30 -0
  101. data/test/test_helper.rb +24 -0
  102. data/uninstall.rb +1 -0
  103. 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