presskit-apn_on_rails 0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. data/.rspec +2 -0
  2. data/.specification +80 -0
  3. data/Gemfile +19 -0
  4. data/Gemfile.lock +47 -0
  5. data/LICENSE +21 -0
  6. data/README +179 -0
  7. data/README.textile +209 -0
  8. data/Rakefile +50 -0
  9. data/VERSION +1 -0
  10. data/autotest/discover.rb +1 -0
  11. data/generators/apn_migrations_generator.rb +31 -0
  12. data/generators/templates/apn_migrations/001_create_apn_devices.rb +13 -0
  13. data/generators/templates/apn_migrations/002_create_apn_notifications.rb +23 -0
  14. data/generators/templates/apn_migrations/003_alter_apn_devices.rb +25 -0
  15. data/generators/templates/apn_migrations/004_create_apn_apps.rb +18 -0
  16. data/generators/templates/apn_migrations/005_create_groups.rb +23 -0
  17. data/generators/templates/apn_migrations/006_alter_apn_groups.rb +11 -0
  18. data/generators/templates/apn_migrations/007_create_device_groups.rb +27 -0
  19. data/generators/templates/apn_migrations/008_create_apn_group_notifications.rb +23 -0
  20. data/generators/templates/apn_migrations/009_create_pull_notifications.rb +16 -0
  21. data/generators/templates/apn_migrations/010_alter_apn_notifications.rb +21 -0
  22. data/generators/templates/apn_migrations/011_make_device_token_index_nonunique.rb +11 -0
  23. data/generators/templates/apn_migrations/012_add_launch_notification_to_apn_pull_notifications.rb +9 -0
  24. data/lib/apn_on_rails.rb +4 -0
  25. data/lib/apn_on_rails/apn_on_rails.rb +81 -0
  26. data/lib/apn_on_rails/app/models/apn/app.rb +152 -0
  27. data/lib/apn_on_rails/app/models/apn/base.rb +9 -0
  28. data/lib/apn_on_rails/app/models/apn/device.rb +50 -0
  29. data/lib/apn_on_rails/app/models/apn/device_grouping.rb +16 -0
  30. data/lib/apn_on_rails/app/models/apn/group.rb +12 -0
  31. data/lib/apn_on_rails/app/models/apn/group_notification.rb +79 -0
  32. data/lib/apn_on_rails/app/models/apn/notification.rb +93 -0
  33. data/lib/apn_on_rails/app/models/apn/pull_notification.rb +28 -0
  34. data/lib/apn_on_rails/libs/connection.rb +70 -0
  35. data/lib/apn_on_rails/libs/feedback.rb +39 -0
  36. data/lib/apn_on_rails/tasks/apn.rake +30 -0
  37. data/lib/apn_on_rails/tasks/db.rake +19 -0
  38. data/lib/apn_on_rails_tasks.rb +3 -0
  39. data/presskit-apn_on_rails.gemspec +144 -0
  40. data/spec/active_record/setup_ar.rb +19 -0
  41. data/spec/apn_on_rails/app/models/apn/app_spec.rb +230 -0
  42. data/spec/apn_on_rails/app/models/apn/device_spec.rb +60 -0
  43. data/spec/apn_on_rails/app/models/apn/group_notification_spec.rb +66 -0
  44. data/spec/apn_on_rails/app/models/apn/notification_spec.rb +71 -0
  45. data/spec/apn_on_rails/app/models/apn/pull_notification_spec.rb +100 -0
  46. data/spec/apn_on_rails/libs/connection_spec.rb +40 -0
  47. data/spec/apn_on_rails/libs/feedback_spec.rb +43 -0
  48. data/spec/extensions/string.rb +10 -0
  49. data/spec/factories/app_factory.rb +27 -0
  50. data/spec/factories/device_factory.rb +29 -0
  51. data/spec/factories/device_grouping_factory.rb +22 -0
  52. data/spec/factories/group_factory.rb +27 -0
  53. data/spec/factories/group_notification_factory.rb +22 -0
  54. data/spec/factories/notification_factory.rb +22 -0
  55. data/spec/factories/pull_notification_factory.rb +22 -0
  56. data/spec/fixtures/hexa.bin +1 -0
  57. data/spec/fixtures/message_for_sending.bin +0 -0
  58. data/spec/rails_root/config/apple_push_notification_development.pem +19 -0
  59. data/spec/spec_helper.rb +55 -0
  60. metadata +282 -0
@@ -0,0 +1,3 @@
1
+ Dir.glob(File.join(File.dirname(__FILE__), 'apn_on_rails', 'tasks', '**/*.rake')).each do |f|
2
+ load File.expand_path(f)
3
+ end
@@ -0,0 +1,144 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{presskit-apn_on_rails}
8
+ s.version = "0.1"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["markbates", "Rebecca Nesson", "Caleb Adam Haye"]
12
+ s.date = %q{2011-11-31}
13
+ s.description = %q{APN on Rails is a Ruby on Rails gem that allows you to
14
+ easily add Apple Push Notification (iPhone) support to your Rails application. This version includes an association between an assumed User model and APN::Device
15
+ }
16
+ s.email = %q{caleb@fire.coop}
17
+ s.extra_rdoc_files = [
18
+ "LICENSE",
19
+ "README",
20
+ "README.textile"
21
+ ]
22
+ s.files = [
23
+ ".rspec",
24
+ ".specification",
25
+ "Gemfile",
26
+ "Gemfile.lock",
27
+ "LICENSE",
28
+ "README",
29
+ "README.textile",
30
+ "Rakefile",
31
+ "VERSION",
32
+ "presskit-apn_on_rails.gemspec",
33
+ "autotest/discover.rb",
34
+ "generators/apn_migrations_generator.rb",
35
+ "generators/templates/apn_migrations/001_create_apn_devices.rb",
36
+ "generators/templates/apn_migrations/002_create_apn_notifications.rb",
37
+ "generators/templates/apn_migrations/003_alter_apn_devices.rb",
38
+ "generators/templates/apn_migrations/004_create_apn_apps.rb",
39
+ "generators/templates/apn_migrations/005_create_groups.rb",
40
+ "generators/templates/apn_migrations/006_alter_apn_groups.rb",
41
+ "generators/templates/apn_migrations/007_create_device_groups.rb",
42
+ "generators/templates/apn_migrations/008_create_apn_group_notifications.rb",
43
+ "generators/templates/apn_migrations/009_create_pull_notifications.rb",
44
+ "generators/templates/apn_migrations/010_alter_apn_notifications.rb",
45
+ "generators/templates/apn_migrations/011_make_device_token_index_nonunique.rb",
46
+ "generators/templates/apn_migrations/012_add_launch_notification_to_apn_pull_notifications.rb",
47
+ "lib/apn_on_rails.rb",
48
+ "lib/apn_on_rails/apn_on_rails.rb",
49
+ "lib/apn_on_rails/app/models/apn/app.rb",
50
+ "lib/apn_on_rails/app/models/apn/base.rb",
51
+ "lib/apn_on_rails/app/models/apn/device.rb",
52
+ "lib/apn_on_rails/app/models/apn/device_grouping.rb",
53
+ "lib/apn_on_rails/app/models/apn/group.rb",
54
+ "lib/apn_on_rails/app/models/apn/group_notification.rb",
55
+ "lib/apn_on_rails/app/models/apn/notification.rb",
56
+ "lib/apn_on_rails/app/models/apn/pull_notification.rb",
57
+ "lib/apn_on_rails/libs/connection.rb",
58
+ "lib/apn_on_rails/libs/feedback.rb",
59
+ "lib/apn_on_rails/tasks/apn.rake",
60
+ "lib/apn_on_rails/tasks/db.rake",
61
+ "lib/apn_on_rails_tasks.rb",
62
+ "spec/active_record/setup_ar.rb",
63
+ "spec/apn_on_rails/app/models/apn/app_spec.rb",
64
+ "spec/apn_on_rails/app/models/apn/device_spec.rb",
65
+ "spec/apn_on_rails/app/models/apn/group_notification_spec.rb",
66
+ "spec/apn_on_rails/app/models/apn/notification_spec.rb",
67
+ "spec/apn_on_rails/app/models/apn/pull_notification_spec.rb",
68
+ "spec/apn_on_rails/libs/connection_spec.rb",
69
+ "spec/apn_on_rails/libs/feedback_spec.rb",
70
+ "spec/extensions/string.rb",
71
+ "spec/factories/app_factory.rb",
72
+ "spec/factories/device_factory.rb",
73
+ "spec/factories/device_grouping_factory.rb",
74
+ "spec/factories/group_factory.rb",
75
+ "spec/factories/group_notification_factory.rb",
76
+ "spec/factories/notification_factory.rb",
77
+ "spec/factories/pull_notification_factory.rb",
78
+ "spec/fixtures/hexa.bin",
79
+ "spec/fixtures/message_for_sending.bin",
80
+ "spec/rails_root/config/apple_push_notification_development.pem",
81
+ "spec/spec_helper.rb"
82
+ ]
83
+ s.homepage = %q{http://github.com/calebhaye/apn_on_rails}
84
+ s.require_paths = ["lib"]
85
+ s.rubygems_version = %q{1.3.7}
86
+ s.summary = %q{Apple Push Notifications on Rails}
87
+ s.test_files = [
88
+ "spec/active_record/setup_ar.rb",
89
+ "spec/apn_on_rails/app/models/apn/app_spec.rb",
90
+ "spec/apn_on_rails/app/models/apn/device_spec.rb",
91
+ "spec/apn_on_rails/app/models/apn/group_notification_spec.rb",
92
+ "spec/apn_on_rails/app/models/apn/notification_spec.rb",
93
+ "spec/apn_on_rails/app/models/apn/pull_notification_spec.rb",
94
+ "spec/apn_on_rails/libs/connection_spec.rb",
95
+ "spec/apn_on_rails/libs/feedback_spec.rb",
96
+ "spec/extensions/string.rb",
97
+ "spec/factories/app_factory.rb",
98
+ "spec/factories/device_factory.rb",
99
+ "spec/factories/device_grouping_factory.rb",
100
+ "spec/factories/group_factory.rb",
101
+ "spec/factories/group_notification_factory.rb",
102
+ "spec/factories/notification_factory.rb",
103
+ "spec/factories/pull_notification_factory.rb",
104
+ "spec/spec_helper.rb"
105
+ ]
106
+
107
+ if s.respond_to? :specification_version then
108
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
109
+ s.specification_version = 3
110
+
111
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
112
+ s.add_runtime_dependency(%q<configatron>, [">= 0"])
113
+ s.add_development_dependency(%q<autotest>, [">= 0"])
114
+ s.add_development_dependency(%q<sqlite3-ruby>, [">= 0"])
115
+ s.add_development_dependency(%q<rspec>, [">= 2.0.0"])
116
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
117
+ s.add_development_dependency(%q<jeweler>, ["~> 1.5.0"])
118
+ s.add_development_dependency(%q<rcov>, [">= 0"])
119
+ s.add_development_dependency(%q<actionpack>, ["~> 2.3.0"])
120
+ s.add_development_dependency(%q<activerecord>, ["~> 2.3.0"])
121
+ else
122
+ s.add_dependency(%q<configatron>, [">= 0"])
123
+ s.add_dependency(%q<autotest>, [">= 0"])
124
+ s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
125
+ s.add_dependency(%q<rspec>, [">= 2.0.0"])
126
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
127
+ s.add_dependency(%q<jeweler>, ["~> 1.5.0"])
128
+ s.add_dependency(%q<rcov>, [">= 0"])
129
+ s.add_dependency(%q<actionpack>, ["~> 2.3.0"])
130
+ s.add_dependency(%q<activerecord>, ["~> 2.3.0"])
131
+ end
132
+ else
133
+ s.add_dependency(%q<configatron>, [">= 0"])
134
+ s.add_dependency(%q<autotest>, [">= 0"])
135
+ s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
136
+ s.add_dependency(%q<rspec>, [">= 2.0.0"])
137
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
138
+ s.add_dependency(%q<jeweler>, ["~> 1.5.0"])
139
+ s.add_dependency(%q<rcov>, [">= 0"])
140
+ s.add_dependency(%q<actionpack>, ["~> 2.3.0"])
141
+ s.add_dependency(%q<activerecord>, ["~> 2.3.0"])
142
+ end
143
+ end
144
+
@@ -0,0 +1,19 @@
1
+ require 'rubygems'
2
+ require 'active_record'
3
+
4
+ logger = Logger.new(STDOUT)
5
+ logger.level = Logger::INFO
6
+ ActiveRecord::Base.logger = logger
7
+
8
+ db_file = File.join(File.dirname(__FILE__), 'test.db')
9
+ FileUtils.rm(db_file) if File.exists?(db_file)
10
+ # File.open(db_file, 'w')
11
+
12
+ ActiveRecord::Base.establish_connection({
13
+ :adapter => 'sqlite3',
14
+ :database => db_file
15
+ })
16
+
17
+ ActiveRecord::Migrator.up(File.join(File.dirname(__FILE__), '..', '..', 'generators', 'templates', 'apn_migrations'))
18
+
19
+ # raise hell
@@ -0,0 +1,230 @@
1
+ require File.join(File.dirname(__FILE__), '..', '..', '..', '..', 'spec_helper.rb')
2
+
3
+ describe APN::App do
4
+
5
+ describe 'send_notifications' do
6
+
7
+ it 'should send the unsent notifications' do
8
+
9
+ app = AppFactory.create
10
+ device = DeviceFactory.create({:app_id => app.id})
11
+ notifications = [NotificationFactory.create({:device_id => device.id}),
12
+ NotificationFactory.create({:device_id => device.id})]
13
+
14
+ notifications.each_with_index do |notify, i|
15
+ notify.stub(:message_for_sending).and_return("message-#{i}")
16
+ notify.should_receive(:sent_at=).with(instance_of(Time))
17
+ notify.should_receive(:save)
18
+ end
19
+
20
+ APN::App.should_receive(:all).once.and_return([app])
21
+ app.should_receive(:cert).twice.and_return(app.apn_dev_cert)
22
+
23
+ APN::Device.should_receive(:find_each).twice.and_yield(device)
24
+
25
+ device.should_receive(:unsent_notifications).and_return(notifications,[])
26
+
27
+
28
+ ssl_mock = mock('ssl_mock')
29
+ ssl_mock.should_receive(:write).with('message-0')
30
+ ssl_mock.should_receive(:write).with('message-1')
31
+ APN::Connection.should_receive(:open_for_delivery).twice.and_yield(ssl_mock, nil)
32
+ APN::App.send_notifications
33
+
34
+ end
35
+
36
+ end
37
+
38
+ describe 'send_notifications_not_associated_with_an_app' do
39
+
40
+ it 'should send unsent notifications that are associated with devices that are not with any app' do
41
+ RAILS_ENV = 'staging'
42
+ device = DeviceFactory.create
43
+ device.app_id = nil
44
+ device.save
45
+ APN::App.all.each { |a| a.destroy }
46
+ notifications = [NotificationFactory.create({:device_id => device.id}),
47
+ NotificationFactory.create({:device_id => device.id})]
48
+
49
+ notifications.each_with_index do |notify, i|
50
+ notify.stub(:message_for_sending).and_return("message-#{i}")
51
+ notify.should_receive(:sent_at=).with(instance_of(Time))
52
+ notify.should_receive(:save)
53
+ end
54
+
55
+ APN::Device.should_receive(:find_each).and_yield(device)
56
+ device.should_receive(:unsent_notifications).and_return(notifications)
57
+
58
+ ssl_mock = mock('ssl_mock')
59
+ ssl_mock.should_receive(:write).with('message-0')
60
+ ssl_mock.should_receive(:write).with('message-1')
61
+ APN::Connection.should_receive(:open_for_delivery).and_yield(ssl_mock, nil)
62
+ APN::App.send_notifications
63
+ end
64
+ end
65
+
66
+ describe 'send_group_notifications' do
67
+
68
+ it 'should send the unsent group notifications' do
69
+
70
+ app = AppFactory.create
71
+ device = DeviceFactory.create({:app_id => app.id})
72
+ group = GroupFactory.create({:app_id => app.id})
73
+ device_grouping = DeviceGroupingFactory.create({:group_id => group.id,:device_id => device.id})
74
+ gnotys = [GroupNotificationFactory.create({:group_id => group.id}),
75
+ GroupNotificationFactory.create({:group_id => group.id})]
76
+ gnotys.each_with_index do |gnoty, i|
77
+ gnoty.stub!(:message_for_sending).and_return("message-#{i}")
78
+ gnoty.should_receive(:sent_at=).with(instance_of(Time))
79
+ gnoty.should_receive(:save)
80
+ end
81
+
82
+ APN::App.should_receive(:all).and_return([app])
83
+ app.should_receive(:unsent_group_notifications).at_least(:once).and_return(gnotys)
84
+ app.should_receive(:cert).twice.and_return(app.apn_dev_cert)
85
+
86
+ ssl_mock = mock('ssl_mock')
87
+ ssl_mock.should_receive(:write).with('message-0')
88
+ ssl_mock.should_receive(:write).with('message-1')
89
+ APN::Connection.should_receive(:open_for_delivery).and_yield(ssl_mock, nil)
90
+
91
+ APN::App.send_group_notifications
92
+
93
+ end
94
+
95
+ end
96
+
97
+ describe 'send single group notification' do
98
+
99
+ it 'should send the argument group notification' do
100
+ app = AppFactory.create
101
+ device = DeviceFactory.create({:app_id => app.id})
102
+ group = GroupFactory.create({:app_id => app.id})
103
+ device_grouping = DeviceGroupingFactory.create({:group_id => group.id,:device_id => device.id})
104
+ gnoty = GroupNotificationFactory.create({:group_id => group.id})
105
+ gnoty.stub!(:message_for_sending).and_return("message-0")
106
+ gnoty.should_receive(:sent_at=).with(instance_of(Time))
107
+ gnoty.should_receive(:save)
108
+
109
+ app.should_receive(:cert).at_least(:once).and_return(app.apn_dev_cert)
110
+
111
+ ssl_mock = mock('ssl_mock')
112
+ ssl_mock.should_receive(:write).with('message-0')
113
+ APN::Connection.should_receive(:open_for_delivery).and_yield(ssl_mock, nil)
114
+
115
+ app.send_group_notification(gnoty)
116
+ end
117
+
118
+ end
119
+
120
+ describe 'nil cert when sending notifications' do
121
+
122
+ it 'should raise an exception for sending notifications for an app with no cert' do
123
+ app = AppFactory.create
124
+ APN::App.should_receive(:all).and_return([app])
125
+ app.should_receive(:cert).and_return(nil)
126
+ lambda {
127
+ APN::App.send_notifications
128
+ }.should raise_error(APN::Errors::MissingCertificateError)
129
+ end
130
+
131
+ end
132
+
133
+ describe 'nil cert when sending group notifications' do
134
+
135
+ it 'should raise an exception for sending group notifications for an app with no cert' do
136
+ app = AppFactory.create
137
+ APN::App.should_receive(:all).and_return([app])
138
+ app.should_receive(:cert).and_return(nil)
139
+ lambda {
140
+ APN::App.send_group_notifications
141
+ }.should raise_error(APN::Errors::MissingCertificateError)
142
+ end
143
+
144
+ end
145
+
146
+ describe 'nil cert when sending single group notification' do
147
+
148
+ it 'should raise an exception for sending group notifications for an app with no cert' do
149
+ app = AppFactory.create
150
+ device = DeviceFactory.create({:app_id => app.id})
151
+ group = GroupFactory.create({:app_id => app.id})
152
+ device_grouping = DeviceGroupingFactory.create({:group_id => group.id,:device_id => device.id})
153
+ gnoty = GroupNotificationFactory.create({:group_id => group.id})
154
+ app.should_receive(:cert).and_return(nil)
155
+ lambda {
156
+ app.send_group_notification(gnoty)
157
+ }.should raise_error(APN::Errors::MissingCertificateError)
158
+ end
159
+
160
+ end
161
+
162
+ describe 'process_devices' do
163
+
164
+ it 'should destroy devices that have a last_registered_at date that is before the feedback_at date' do
165
+ app = AppFactory.create
166
+ devices = [DeviceFactory.create(:app_id => app.id, :last_registered_at => 1.week.ago, :feedback_at => Time.now),
167
+ DeviceFactory.create(:app_id => app.id, :last_registered_at => 1.week.from_now, :feedback_at => Time.now)]
168
+ puts "device ids are #{devices[0].id} and #{devices[1].id}"
169
+ devices[0].last_registered_at = 1.week.ago
170
+ devices[0].save
171
+ devices[1].last_registered_at = 1.week.from_now
172
+ devices[1].save
173
+ APN::Feedback.should_receive(:devices).twice.and_return(devices)
174
+ APN::App.should_receive(:all).and_return([app])
175
+ app.should_receive(:cert).twice.and_return(app.apn_dev_cert)
176
+ lambda {
177
+ APN::App.process_devices
178
+ }.should change(APN::Device, :count).by(-1)
179
+ end
180
+
181
+ end
182
+
183
+ describe 'process_devices for global app' do
184
+
185
+ it 'should destroy devices that have a last_registered_at date that is before the feedback_at date that have no app' do
186
+ device = DeviceFactory.create(:app_id => nil, :last_registered_at => 1.week.ago, :feedback_at => Time.now)
187
+ device.app_id = nil
188
+ device.last_registered_at = 1.week.ago
189
+ device.save
190
+ APN::Feedback.should_receive(:devices).and_return([device])
191
+ APN::App.should_receive(:all).and_return([])
192
+ lambda {
193
+ APN::App.process_devices
194
+ }.should change(APN::Device, :count).by(-1)
195
+ end
196
+ end
197
+
198
+ describe 'nil cert when processing devices' do
199
+
200
+ it 'should raise an exception for processing devices for an app with no cert' do
201
+ app = AppFactory.create
202
+ APN::App.should_receive(:all).and_return([app])
203
+ app.should_receive(:cert).and_return(nil)
204
+ lambda {
205
+ APN::App.process_devices
206
+ }.should raise_error(APN::Errors::MissingCertificateError)
207
+ end
208
+
209
+ end
210
+
211
+ describe 'cert for production environment' do
212
+
213
+ it 'should return the production cert for the app' do
214
+ app = AppFactory.create
215
+ RAILS_ENV = 'production'
216
+ app.cert.should == app.apn_prod_cert
217
+ end
218
+
219
+ end
220
+
221
+ describe 'cert for development and staging environment' do
222
+
223
+ it 'should return the development cert for the app' do
224
+ app = AppFactory.create
225
+ RAILS_ENV = 'staging'
226
+ app.cert.should == app.apn_dev_cert
227
+ end
228
+ end
229
+
230
+ end
@@ -0,0 +1,60 @@
1
+ require File.join(File.dirname(__FILE__), '..', '..', '..', '..', 'spec_helper.rb')
2
+
3
+ describe APN::Device do
4
+
5
+ describe 'token' do
6
+
7
+ it 'should be unique' do
8
+ device = DeviceFactory.new(:token => APN::Device.first.token)
9
+ device.should_not be_valid
10
+ device.errors['token'].should include('has already been taken')
11
+
12
+ device = DeviceFactory.new(:token => device.token.succ)
13
+ device.should be_valid
14
+ end
15
+
16
+ it 'should get cleansed if it contains brackets' do
17
+ token = DeviceFactory.random_token
18
+ device = DeviceFactory.new(:token => "<#{token}>")
19
+ device.token.should == token
20
+ device.token.should_not == "<#{token}>"
21
+ end
22
+
23
+ it 'should be in the correct pattern' do
24
+ device = DeviceFactory.new(:token => '5gxadhy6 6zmtxfl6 5zpbcxmw ez3w7ksf qscpr55t trknkzap 7yyt45sc g6jrw7qz')
25
+ device.should be_valid
26
+ device.token = '5gxadhy6 6zmtxfl6 5zpbcxmw ez3w7ksf qscpr55t trknkzap 7yyt45sc g6'
27
+ device.should_not be_valid
28
+ device.token = '5gxadhy6 6zmtxfl6 5zpbcxmw ez3w7ksf qscpr55t trknkzap 7yyt45sc g6jrw7!!'
29
+ device.should_not be_valid
30
+ end
31
+
32
+ end
33
+
34
+ describe 'to_hexa' do
35
+
36
+ it 'should convert the text string to hexadecimal' do
37
+ device = DeviceFactory.new(:token => '5gxadhy6 6zmtxfl6 5zpbcxmw ez3w7ksf qscpr55t trknkzap 7yyt45sc g6jrw7qz')
38
+ device.to_hexa.should == fixture_value('hexa.bin')
39
+ end
40
+
41
+ end
42
+
43
+ describe 'before_create' do
44
+
45
+ it 'should set the last_registered_at date to Time.now' do
46
+ time = Time.now
47
+ Time.stub(:now).and_return(time)
48
+ device = DeviceFactory.create
49
+ device.last_registered_at.should_not be_nil
50
+ device.last_registered_at.to_s.should == time.to_s
51
+
52
+ # ago = 1.week.ago
53
+ # device = DeviceFactory.create(:last_registered_at => ago)
54
+ # device.last_registered_at.should_not be_nil
55
+ # device.last_registered_at.to_s.should == ago.to_s
56
+ end
57
+
58
+ end
59
+
60
+ end