rpush 5.0.0 → 5.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +16 -2
- data/lib/rpush/cli.rb +1 -1
- data/lib/rpush/client/active_model.rb +1 -1
- data/lib/rpush/client/active_model/apns/notification.rb +9 -1
- data/lib/rpush/client/active_model/apns/notification_payload_size_validator.rb +15 -0
- data/lib/rpush/client/active_model/apns2/notification.rb +14 -0
- data/lib/rpush/client/active_record.rb +1 -0
- data/lib/rpush/client/active_record/apns/active_record_serializable_notification.rb +65 -0
- data/lib/rpush/client/active_record/apns/notification.rb +1 -57
- data/lib/rpush/client/active_record/apns2/notification.rb +4 -1
- data/lib/rpush/client/redis/apns2/notification.rb +1 -0
- data/lib/rpush/client/redis/pushy/notification.rb +0 -1
- data/lib/rpush/daemon/apns2/delivery.rb +6 -1
- data/lib/rpush/daemon/apnsp8/delivery.rb +7 -2
- data/lib/rpush/daemon/store/active_record/reconnectable.rb +1 -1
- data/lib/rpush/version.rb +1 -1
- data/spec/functional/apns2_spec.rb +36 -0
- data/spec/support/simplecov_helper.rb +1 -1
- data/spec/unit/client/active_record/adm/app_spec.rb +2 -54
- data/spec/unit/client/active_record/adm/notification_spec.rb +2 -39
- data/spec/unit/client/active_record/apns/app_spec.rb +3 -26
- data/spec/unit/client/active_record/apns/feedback_spec.rb +1 -5
- data/spec/unit/client/active_record/apns/notification_spec.rb +29 -293
- data/spec/unit/client/active_record/apns2/app_spec.rb +4 -0
- data/spec/unit/client/active_record/apns2/notification_spec.rb +65 -0
- data/spec/unit/client/active_record/app_spec.rb +1 -26
- data/spec/unit/client/active_record/gcm/app_spec.rb +3 -1
- data/spec/unit/client/active_record/gcm/notification_spec.rb +6 -88
- data/spec/unit/client/active_record/notification_spec.rb +3 -11
- data/spec/unit/client/active_record/pushy/app_spec.rb +2 -13
- data/spec/unit/client/active_record/pushy/notification_spec.rb +2 -55
- data/spec/unit/client/active_record/shared/app.rb +14 -0
- data/spec/unit/{notification_shared.rb → client/active_record/shared/notification.rb} +12 -7
- data/spec/unit/client/active_record/wns/badge_notification_spec.rb +1 -11
- data/spec/unit/client/active_record/wns/raw_notification_spec.rb +3 -12
- data/spec/unit/client/active_record/wpns/app_spec.rb +3 -1
- data/spec/unit/client/active_record/wpns/notification_spec.rb +2 -17
- data/spec/unit/client/redis/adm/app_spec.rb +5 -0
- data/spec/unit/client/redis/adm/notification_spec.rb +5 -0
- data/spec/unit/client/redis/apns/app_spec.rb +5 -0
- data/spec/unit/client/redis/apns/feedback_spec.rb +5 -0
- data/spec/unit/client/redis/apns/notification_spec.rb +50 -0
- data/spec/unit/client/redis/apns2/app_spec.rb +4 -0
- data/spec/unit/client/redis/apns2/notification_spec.rb +50 -0
- data/spec/unit/client/redis/app_spec.rb +5 -0
- data/spec/unit/client/redis/gcm/app_spec.rb +5 -0
- data/spec/unit/client/redis/gcm/notification_spec.rb +5 -0
- data/spec/unit/client/redis/notification_spec.rb +5 -0
- data/spec/unit/client/redis/pushy/app_spec.rb +5 -0
- data/spec/unit/client/redis/pushy/notification_spec.rb +5 -0
- data/spec/unit/client/redis/wns/badge_notification_spec.rb +5 -0
- data/spec/unit/client/redis/wns/raw_notification_spec.rb +22 -0
- data/spec/unit/client/redis/wpns/app_spec.rb +5 -0
- data/spec/unit/client/redis/wpns/notification_spec.rb +5 -0
- data/spec/unit/client/shared/adm/app.rb +51 -0
- data/spec/unit/client/shared/adm/notification.rb +39 -0
- data/spec/unit/client/shared/apns/app.rb +29 -0
- data/spec/unit/client/shared/apns/feedback.rb +9 -0
- data/spec/unit/client/shared/apns/notification.rb +262 -0
- data/spec/unit/client/shared/app.rb +17 -0
- data/spec/unit/client/shared/gcm/app.rb +4 -0
- data/spec/unit/client/shared/gcm/notification.rb +77 -0
- data/spec/unit/client/shared/notification.rb +10 -0
- data/spec/unit/client/shared/pushy/app.rb +17 -0
- data/spec/unit/client/shared/pushy/notification.rb +55 -0
- data/spec/unit/client/shared/wns/badge_notification.rb +15 -0
- data/spec/unit/client/shared/wns/raw_notification.rb +21 -0
- data/spec/unit/client/shared/wpns/app.rb +4 -0
- data/spec/unit/client/shared/wpns/notification.rb +18 -0
- data/spec/unit/daemon/shared/store.rb +312 -0
- data/spec/unit/daemon/store/active_record/reconnectable_spec.rb +7 -7
- data/spec/unit/daemon/store/active_record_spec.rb +2 -290
- data/spec/unit/daemon/store/redis_spec.rb +2 -291
- data/spec/unit_spec_helper.rb +3 -0
- metadata +89 -10
- data/lib/rpush/client/active_model/apns/binary_notification_validator.rb +0 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1bd7e063c214b8ab031ca63892ec39f425813c6a1dd9f54f09cfdc5b0e6291b7
|
4
|
+
data.tar.gz: '080a33b636882719f1bf2284035a5fe9d22d8073123808a9d1e3acee84622588'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e68cf92207ac195e120063301ae6ec23217fbaf31ea46757a9a28163dcc584763e08f26e4e1cf11978bf10a232b9eabd71ef205c4817543d8065e32fc3bf0418
|
7
|
+
data.tar.gz: 5bdb35aa1a78ff6f6590072581deb06e29ad51c2255b603c2ed35c985e65fdbb8b524fca80a011d0acae8038dc67579e7cb7d822f24d41ce36da81fb615b3f24
|
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,20 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
-
## [
|
3
|
+
## [v5.1.0](https://github.com/rpush/rpush/tree/v5.1.0) (2020-09-25)
|
4
4
|
|
5
|
-
[Full Changelog](https://github.com/rpush/rpush/compare/
|
5
|
+
[Full Changelog](https://github.com/rpush/rpush/compare/v5.0.0...v5.1.0)
|
6
|
+
|
7
|
+
**Merged pull requests:**
|
8
|
+
|
9
|
+
- Resume APNS2 delivery when async requests timeout [\#564](https://github.com/rpush/rpush/pull/564) ([benlangfeld](https://github.com/benlangfeld))
|
10
|
+
- Improve DB reconnection for big tables [\#563](https://github.com/rpush/rpush/pull/563) ([AlexTatarnikov](https://github.com/AlexTatarnikov))
|
11
|
+
- Default the Rails environment to RAILS_ENV if set [\#562](https://github.com/rpush/rpush/pull/562) ([benlangfeld](https://github.com/benlangfeld))
|
12
|
+
- Allow Apns2 payloads to be up to 4096 bytes [\#561](https://github.com/rpush/rpush/pull/561) ([benlangfeld](https://github.com/benlangfeld))
|
13
|
+
- Improve test coverage [\#528](https://github.com/rpush/rpush/pull/528) ([jhottenstein](https://github.com/jhottenstein))
|
14
|
+
|
15
|
+
## [v5.0.0](https://github.com/rpush/rpush/tree/v5.0.0) (2020-02-21)
|
16
|
+
|
17
|
+
[Full Changelog](https://github.com/rpush/rpush/compare/v4.2.0...v5.0.0)
|
6
18
|
|
7
19
|
**Merged pull requests:**
|
8
20
|
|
@@ -470,3 +482,5 @@ Bug fixes:
|
|
470
482
|
- Started the changelog!
|
471
483
|
|
472
484
|
\* _This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)_
|
485
|
+
|
486
|
+
\* _This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)_
|
data/lib/rpush/cli.rb
CHANGED
@@ -14,7 +14,7 @@ module Rpush
|
|
14
14
|
end
|
15
15
|
|
16
16
|
class_option :config, type: :string, aliases: '-c', default: default_config_path
|
17
|
-
class_option 'rails-env', type: :string, aliases: '-e', default: 'development'
|
17
|
+
class_option 'rails-env', type: :string, aliases: '-e', default: ENV.fetch('RAILS_ENV', 'development')
|
18
18
|
|
19
19
|
option :foreground, type: :boolean, aliases: '-f', default: false
|
20
20
|
option 'pid-file', type: :string, aliases: '-p'
|
@@ -4,10 +4,10 @@ require 'rpush/client/active_model/notification'
|
|
4
4
|
require 'rpush/client/active_model/payload_data_size_validator'
|
5
5
|
require 'rpush/client/active_model/registration_ids_count_validator'
|
6
6
|
|
7
|
-
require 'rpush/client/active_model/apns/binary_notification_validator'
|
8
7
|
require 'rpush/client/active_model/apns/device_token_format_validator'
|
9
8
|
require 'rpush/client/active_model/apns/app'
|
10
9
|
require 'rpush/client/active_model/apns/notification'
|
10
|
+
require 'rpush/client/active_model/apns/notification_payload_size_validator'
|
11
11
|
|
12
12
|
require 'rpush/client/active_model/apns2/app'
|
13
13
|
require 'rpush/client/active_model/apns2/notification'
|
@@ -7,15 +7,23 @@ module Rpush
|
|
7
7
|
APNS_PRIORITY_IMMEDIATE = 10
|
8
8
|
APNS_PRIORITY_CONSERVE_POWER = 5
|
9
9
|
APNS_PRIORITIES = [APNS_PRIORITY_IMMEDIATE, APNS_PRIORITY_CONSERVE_POWER]
|
10
|
+
MAX_PAYLOAD_BYTESIZE = 2048
|
11
|
+
|
12
|
+
module ClassMethods
|
13
|
+
def max_payload_bytesize
|
14
|
+
MAX_PAYLOAD_BYTESIZE
|
15
|
+
end
|
16
|
+
end
|
10
17
|
|
11
18
|
def self.included(base)
|
19
|
+
base.extend ClassMethods
|
12
20
|
base.instance_eval do
|
13
21
|
validates :device_token, presence: true
|
14
22
|
validates :badge, numericality: true, allow_nil: true
|
15
23
|
validates :priority, inclusion: { in: APNS_PRIORITIES }, allow_nil: true
|
16
24
|
|
17
25
|
validates_with Rpush::Client::ActiveModel::Apns::DeviceTokenFormatValidator
|
18
|
-
validates_with Rpush::Client::ActiveModel::Apns::
|
26
|
+
validates_with Rpush::Client::ActiveModel::Apns::NotificationPayloadSizeValidator
|
19
27
|
|
20
28
|
base.const_set('APNS_DEFAULT_EXPIRY', APNS_DEFAULT_EXPIRY) unless base.const_defined?('APNS_DEFAULT_EXPIRY')
|
21
29
|
base.const_set('APNS_PRIORITY_IMMEDIATE', APNS_PRIORITY_IMMEDIATE) unless base.const_defined?('APNS_PRIORITY_IMMEDIATE')
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Rpush
|
2
|
+
module Client
|
3
|
+
module ActiveModel
|
4
|
+
module Apns
|
5
|
+
class NotificationPayloadSizeValidator < ::ActiveModel::Validator
|
6
|
+
def validate(record)
|
7
|
+
limit = record.class.max_payload_bytesize
|
8
|
+
return unless record.payload.bytesize > limit
|
9
|
+
record.errors[:base] << "APN notification cannot be larger than #{limit} bytes. Try condensing your alert and device attributes."
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -3,6 +3,20 @@ module Rpush
|
|
3
3
|
module ActiveModel
|
4
4
|
module Apns2
|
5
5
|
include Rpush::Client::ActiveModel::Apns
|
6
|
+
|
7
|
+
module Notification
|
8
|
+
MAX_PAYLOAD_BYTESIZE = 4096
|
9
|
+
|
10
|
+
module ClassMethods
|
11
|
+
def max_payload_bytesize
|
12
|
+
MAX_PAYLOAD_BYTESIZE
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.included(base)
|
17
|
+
base.extend ClassMethods
|
18
|
+
end
|
19
|
+
end
|
6
20
|
end
|
7
21
|
end
|
8
22
|
end
|
@@ -5,6 +5,7 @@ require 'rpush/client/active_model'
|
|
5
5
|
require 'rpush/client/active_record/notification'
|
6
6
|
require 'rpush/client/active_record/app'
|
7
7
|
|
8
|
+
require 'rpush/client/active_record/apns/active_record_serializable_notification'
|
8
9
|
require 'rpush/client/active_record/apns/notification'
|
9
10
|
require 'rpush/client/active_record/apns/feedback'
|
10
11
|
require 'rpush/client/active_record/apns/app'
|
@@ -0,0 +1,65 @@
|
|
1
|
+
module Rpush
|
2
|
+
module Client
|
3
|
+
module ActiveRecord
|
4
|
+
module Apns
|
5
|
+
module ActiveRecordSerializableNotification
|
6
|
+
def alert=(alert)
|
7
|
+
if alert.is_a?(Hash)
|
8
|
+
write_attribute(:alert, multi_json_dump(alert))
|
9
|
+
self.alert_is_json = true if has_attribute?(:alert_is_json)
|
10
|
+
else
|
11
|
+
write_attribute(:alert, alert)
|
12
|
+
self.alert_is_json = false if has_attribute?(:alert_is_json)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def alert
|
17
|
+
string_or_json = read_attribute(:alert)
|
18
|
+
|
19
|
+
if has_attribute?(:alert_is_json)
|
20
|
+
if alert_is_json?
|
21
|
+
multi_json_load(string_or_json)
|
22
|
+
else
|
23
|
+
string_or_json
|
24
|
+
end
|
25
|
+
else
|
26
|
+
begin
|
27
|
+
multi_json_load(string_or_json)
|
28
|
+
rescue StandardError
|
29
|
+
string_or_json
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def sound=(sound)
|
35
|
+
if sound.is_a?(Hash)
|
36
|
+
write_attribute(:sound, multi_json_dump(sound))
|
37
|
+
self.sound_is_json = true if has_attribute?(:sound_is_json)
|
38
|
+
else
|
39
|
+
write_attribute(:sound, sound)
|
40
|
+
self.sound_is_json = false if has_attribute?(:sound_is_json)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def sound
|
45
|
+
string_or_json = read_attribute(:sound)
|
46
|
+
|
47
|
+
if has_attribute?(:sound_is_json)
|
48
|
+
if sound_is_json?
|
49
|
+
multi_json_load(string_or_json)
|
50
|
+
else
|
51
|
+
string_or_json
|
52
|
+
end
|
53
|
+
else
|
54
|
+
begin
|
55
|
+
multi_json_load(string_or_json)
|
56
|
+
rescue StandardError
|
57
|
+
string_or_json
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -3,64 +3,8 @@ module Rpush
|
|
3
3
|
module ActiveRecord
|
4
4
|
module Apns
|
5
5
|
class Notification < Rpush::Client::ActiveRecord::Notification
|
6
|
-
include Deprecatable
|
7
6
|
include Rpush::Client::ActiveModel::Apns::Notification
|
8
|
-
|
9
|
-
def alert=(alert)
|
10
|
-
if alert.is_a?(Hash)
|
11
|
-
write_attribute(:alert, multi_json_dump(alert))
|
12
|
-
self.alert_is_json = true if has_attribute?(:alert_is_json)
|
13
|
-
else
|
14
|
-
write_attribute(:alert, alert)
|
15
|
-
self.alert_is_json = false if has_attribute?(:alert_is_json)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def alert
|
20
|
-
string_or_json = read_attribute(:alert)
|
21
|
-
|
22
|
-
if has_attribute?(:alert_is_json)
|
23
|
-
if alert_is_json?
|
24
|
-
multi_json_load(string_or_json)
|
25
|
-
else
|
26
|
-
string_or_json
|
27
|
-
end
|
28
|
-
else
|
29
|
-
begin
|
30
|
-
multi_json_load(string_or_json)
|
31
|
-
rescue StandardError
|
32
|
-
string_or_json
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def sound=(sound)
|
38
|
-
if sound.is_a?(Hash)
|
39
|
-
write_attribute(:sound, multi_json_dump(sound))
|
40
|
-
self.sound_is_json = true if has_attribute?(:sound_is_json)
|
41
|
-
else
|
42
|
-
write_attribute(:sound, sound)
|
43
|
-
self.sound_is_json = false if has_attribute?(:sound_is_json)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
def sound
|
48
|
-
string_or_json = read_attribute(:sound)
|
49
|
-
|
50
|
-
if has_attribute?(:sound_is_json)
|
51
|
-
if sound_is_json?
|
52
|
-
multi_json_load(string_or_json)
|
53
|
-
else
|
54
|
-
string_or_json
|
55
|
-
end
|
56
|
-
else
|
57
|
-
begin
|
58
|
-
multi_json_load(string_or_json)
|
59
|
-
rescue StandardError
|
60
|
-
string_or_json
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
7
|
+
include ActiveRecordSerializableNotification
|
64
8
|
end
|
65
9
|
end
|
66
10
|
end
|
@@ -2,7 +2,10 @@ module Rpush
|
|
2
2
|
module Client
|
3
3
|
module ActiveRecord
|
4
4
|
module Apns2
|
5
|
-
class Notification < Rpush::Client::ActiveRecord::
|
5
|
+
class Notification < Rpush::Client::ActiveRecord::Notification
|
6
|
+
include Rpush::Client::ActiveModel::Apns::Notification
|
7
|
+
include Rpush::Client::ActiveModel::Apns2::Notification
|
8
|
+
include Rpush::Client::ActiveRecord::Apns::ActiveRecordSerializableNotification
|
6
9
|
end
|
7
10
|
end
|
8
11
|
end
|
@@ -7,6 +7,7 @@ module Rpush
|
|
7
7
|
|
8
8
|
class Delivery < Rpush::Daemon::Delivery
|
9
9
|
RETRYABLE_CODES = [ 429, 500, 503 ]
|
10
|
+
CLIENT_JOIN_TIMEOUT = 60
|
10
11
|
|
11
12
|
def initialize(app, http2_client, batch)
|
12
13
|
@app = app
|
@@ -20,7 +21,11 @@ module Rpush
|
|
20
21
|
end
|
21
22
|
|
22
23
|
# Send all preprocessed requests at once
|
23
|
-
@client.join
|
24
|
+
@client.join(timeout: CLIENT_JOIN_TIMEOUT)
|
25
|
+
rescue NetHttp2::AsyncRequestTimeout => error
|
26
|
+
mark_batch_retryable(Time.now + 10.seconds, error)
|
27
|
+
@client.close
|
28
|
+
raise
|
24
29
|
rescue Errno::ECONNREFUSED, SocketError => error
|
25
30
|
mark_batch_retryable(Time.now + 10.seconds, error)
|
26
31
|
raise
|
@@ -7,6 +7,7 @@ module Rpush
|
|
7
7
|
|
8
8
|
class Delivery < Rpush::Daemon::Delivery
|
9
9
|
RETRYABLE_CODES = [ 429, 500, 503 ]
|
10
|
+
CLIENT_JOIN_TIMEOUT = 60
|
10
11
|
|
11
12
|
def initialize(app, http2_client, token_provider, batch)
|
12
13
|
@app = app
|
@@ -22,7 +23,11 @@ module Rpush
|
|
22
23
|
end
|
23
24
|
|
24
25
|
# Send all preprocessed requests at once
|
25
|
-
@client.join
|
26
|
+
@client.join(timeout: CLIENT_JOIN_TIMEOUT)
|
27
|
+
rescue NetHttp2::AsyncRequestTimeout => error
|
28
|
+
mark_batch_retryable(Time.now + 10.seconds, error)
|
29
|
+
@client.close
|
30
|
+
raise
|
26
31
|
rescue Errno::ECONNREFUSED, SocketError, HTTP2::Error::StreamLimitExceeded => error
|
27
32
|
# TODO restart connection when StreamLimitExceeded
|
28
33
|
mark_batch_retryable(Time.now + 10.seconds, error)
|
@@ -133,7 +138,7 @@ module Rpush
|
|
133
138
|
jwt_token = @token_provider.token
|
134
139
|
|
135
140
|
headers = {}
|
136
|
-
|
141
|
+
|
137
142
|
headers['content-type'] = 'application/json'
|
138
143
|
headers['apns-expiration'] = '0'
|
139
144
|
headers['apns-priority'] = '10'
|
@@ -67,7 +67,7 @@ module Rpush
|
|
67
67
|
|
68
68
|
def check_database_is_connected
|
69
69
|
# Simply asking the adapter for the connection state is not sufficient.
|
70
|
-
Rpush::Client::ActiveRecord::Notification.
|
70
|
+
Rpush::Client::ActiveRecord::Notification.exists?
|
71
71
|
end
|
72
72
|
|
73
73
|
def sleep_to_avoid_thrashing
|
data/lib/rpush/version.rb
CHANGED
@@ -228,5 +228,41 @@ describe 'APNs http2 adapter' do
|
|
228
228
|
Rpush.push
|
229
229
|
end
|
230
230
|
end
|
231
|
+
|
232
|
+
context 'when waiting for requests to complete times out' do
|
233
|
+
before(:each) do
|
234
|
+
expect(fake_client).to receive(:join) { raise(NetHttp2::AsyncRequestTimeout) }
|
235
|
+
end
|
236
|
+
|
237
|
+
it 'closes the client' do
|
238
|
+
create_notification
|
239
|
+
expect(fake_client).to receive(:close)
|
240
|
+
Rpush.push
|
241
|
+
end
|
242
|
+
|
243
|
+
it 'reflects :error' do
|
244
|
+
reflected_error = false
|
245
|
+
Rpush.reflect do |on|
|
246
|
+
on.error do |error|
|
247
|
+
reflected_error = true
|
248
|
+
expect(error).to be_kind_of(StandardError)
|
249
|
+
reflector.accept
|
250
|
+
end
|
251
|
+
end
|
252
|
+
|
253
|
+
notification = create_notification
|
254
|
+
Rpush.push
|
255
|
+
|
256
|
+
expect(reflected_error).to be true
|
257
|
+
end
|
258
|
+
|
259
|
+
it 'fails but retries delivery several times' do
|
260
|
+
notification = create_notification
|
261
|
+
expect do
|
262
|
+
Rpush.push
|
263
|
+
notification.reload
|
264
|
+
end.to change(notification, :retries)
|
265
|
+
end
|
266
|
+
end
|
231
267
|
end
|
232
268
|
end
|
@@ -1,58 +1,6 @@
|
|
1
1
|
require 'unit_spec_helper'
|
2
2
|
|
3
3
|
describe Rpush::Client::ActiveRecord::Adm::App do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
it 'should be valid if properly instantiated' do
|
8
|
-
expect(subject).to be_valid
|
9
|
-
end
|
10
|
-
|
11
|
-
it 'should be invalid if name' do
|
12
|
-
subject.name = nil
|
13
|
-
expect(subject).not_to be_valid
|
14
|
-
expect(subject.errors[:name]).to eq ["can't be blank"]
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'should be invalid if name is not unique within scope' do
|
18
|
-
subject.name = existing_app.name
|
19
|
-
expect(subject).not_to be_valid
|
20
|
-
expect(subject.errors[:name]).to eq ["has already been taken"]
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'should be invalid if missing client_id' do
|
24
|
-
subject.client_id = nil
|
25
|
-
expect(subject).not_to be_valid
|
26
|
-
expect(subject.errors[:client_id]).to eq ["can't be blank"]
|
27
|
-
end
|
28
|
-
|
29
|
-
it 'should be invalid if missing client_secret' do
|
30
|
-
subject.client_secret = nil
|
31
|
-
expect(subject).not_to be_valid
|
32
|
-
expect(subject.errors[:client_secret]).to eq ["can't be blank"]
|
33
|
-
end
|
34
|
-
|
35
|
-
describe '#access_token_expired?' do
|
36
|
-
before(:each) do
|
37
|
-
Timecop.freeze(Time.now)
|
38
|
-
end
|
39
|
-
|
40
|
-
after do
|
41
|
-
Timecop.return
|
42
|
-
end
|
43
|
-
|
44
|
-
it 'should return true if access_token_expiration is nil' do
|
45
|
-
expect(subject.access_token_expired?).to eq(true)
|
46
|
-
end
|
47
|
-
|
48
|
-
it 'should return true if expired' do
|
49
|
-
subject.access_token_expiration = Time.now - 5.minutes
|
50
|
-
expect(subject.access_token_expired?).to eq(true)
|
51
|
-
end
|
52
|
-
|
53
|
-
it 'should return false if not expired' do
|
54
|
-
subject.access_token_expiration = Time.now + 5.minutes
|
55
|
-
expect(subject.access_token_expired?).to eq(false)
|
56
|
-
end
|
57
|
-
end
|
4
|
+
it_behaves_like 'Rpush::Client::Adm::App'
|
5
|
+
it_behaves_like 'Rpush::Client::ActiveRecord::App'
|
58
6
|
end if active_record?
|