essential 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,37 @@
1
+ require 'test_helper'
2
+
3
+ class TransportTest < EssentialTest
4
+ include Essential::Messaging
5
+
6
+ def setup
7
+ @first = Transport.list.first
8
+ end
9
+
10
+ def test_retrieve
11
+ found = Transport.retrieve(@first.sid)
12
+
13
+ assert_equal found, @first
14
+ end
15
+
16
+ def test_list
17
+ all = Transport.list
18
+
19
+ all_sids = all.map(&:sid)
20
+
21
+ assert all_sids.include?(@first.sid)
22
+ assert_equal all_sids.size, all.size
23
+ end
24
+
25
+ def test_relations
26
+ mess = @first.messages
27
+ refute_equal 0, mess.size
28
+ assert mess.all? {|m| Message === m}
29
+
30
+ subs = @first.subscribers
31
+ refute_equal 0, subs.size
32
+ assert subs.all? {|s| Subscriber === s}
33
+
34
+ channel = @first.channel
35
+ assert_equal @first.channel_sid, channel.sid
36
+ end
37
+ end
@@ -0,0 +1,128 @@
1
+ require 'test_helper'
2
+
3
+ class AlternateAuthenticationTest < EssentialTest
4
+ def setup
5
+ @account = Essential::Account.retrieve
6
+ @alt_account = Essential::Account.retrieve(
7
+ headers: {sid: 'eJ1WDpPBufJuDDYVO5xrKg', token: 'db72ed0fc101d65c5354834191d833e21a'}
8
+ )
9
+
10
+ refute_nil @alt_account, 'missing @alt_account: your dev setup needs help!'
11
+ refute_equal @account.sid, @alt_account.sid, '@account and @alt_account must be different'
12
+ refute_equal @account.token, @alt_account.token, '@account and @alt_account must be different'
13
+ end
14
+
15
+ def test_messages_account
16
+ evaluate_relations(obj: 'ac.messages',
17
+ default: @account.messages,
18
+ alterate: @alt_account.messages)
19
+
20
+ dm = Essential::Messaging::Message.list
21
+ am = Essential::Messaging::Message.list(
22
+ headers: {sid: @alt_account.sid, token: @alt_account.token}
23
+ )
24
+
25
+ evaluate_relations(obj: 'ac.messages', default: dm, alterate: am)
26
+ end
27
+
28
+ def test_messages_subscriber
29
+ dsub = @account.messages.first.subscriber
30
+ asub = @alt_account.messages.first.subscriber
31
+
32
+ evaluate_relations(obj: 'sub.messages', default: dsub.messages, alterate: asub.messages)
33
+ end
34
+
35
+ def test_messages_channel
36
+ dch = @account.messages.first.channel
37
+ ach = @alt_account.messages.first.channel
38
+
39
+ evaluate_relations(obj: 'ch.messages', default: dch.messages, alterate: ach.messages)
40
+ end
41
+
42
+ def test_messages_transport
43
+ dtr = @account.messages.first.transport
44
+ atr = @alt_account.messages.first.transport
45
+
46
+ evaluate_relations(obj: 'tr.messages', default: dtr.messages, alterate: atr.messages)
47
+ end
48
+
49
+ def test_channels_account
50
+ evaluate_relations(obj: 'ac.channels',
51
+ default: @account.channels,
52
+ alterate: @alt_account.channels)
53
+
54
+ alts = Essential::Messaging::Channel.list(
55
+ headers: {sid: @alt_account.sid, token: @alt_account.token}
56
+ )
57
+ evaluate_relations(obj: 'ac.channels',
58
+ default: Essential::Messaging::Channel.list,
59
+ alterate: alts)
60
+ end
61
+
62
+ def test_subscribers_account
63
+ evaluate_relations(obj: 'ac.subscribers',
64
+ default: @account.subscribers,
65
+ alterate: @alt_account.subscribers)
66
+
67
+ alts = Essential::Messaging::Subscriber.list(
68
+ headers: {sid: @alt_account.sid, token: @alt_account.token}
69
+ )
70
+ evaluate_relations(obj: 'ac.subscribers',
71
+ default: Essential::Messaging::Subscriber.list,
72
+ alterate: alts)
73
+ end
74
+
75
+ def test_subscribers_channel
76
+ dch = @account.subscribers.first.channel
77
+ ach = @alt_account.subscribers.first.channel
78
+
79
+ evaluate_relations(obj: 'ch.subscribers',
80
+ default: dch.subscribers,
81
+ alterate: ach.subscribers)
82
+ end
83
+
84
+ def test_subscribers_transport
85
+ dtr = @account.subscribers.first.transport
86
+ atr = @alt_account.subscribers.first.transport
87
+
88
+ evaluate_relations(obj: 'tr.subscribers',
89
+ default: dtr.subscribers,
90
+ alterate: atr.subscribers)
91
+ end
92
+
93
+ def test_transports_account
94
+ evaluate_relations(obj: 'ac.transports',
95
+ default: @account.transports,
96
+ alterate: @alt_account.transports)
97
+
98
+ alts = Essential::Messaging::Transport.list(
99
+ headers: {sid: @alt_account.sid, token: @alt_account.token}
100
+ )
101
+ evaluate_relations(obj: 'ac.transports',
102
+ default: Essential::Messaging::Transport.list,
103
+ alterate: alts)
104
+ end
105
+
106
+ def test_transports_channel
107
+ dch = @account.transports.first.channel
108
+ ach = @alt_account.transports.first.channel
109
+
110
+ evaluate_relations(obj: 'ch.transports',
111
+ default: dch.transports,
112
+ alterate: ach.transports)
113
+ end
114
+
115
+ protected
116
+
117
+ def evaluate_relations(obj:, default:, alterate:)
118
+ refute_equal 0, default.size, format('missing default %s: your dev setup needs help!', obj)
119
+ refute_equal 0, alterate.size, format('missing alterate %s: your dev setup needs help!', obj)
120
+
121
+ default = Set.new(default.map(&:sid))
122
+ alterate = Set.new(alterate.map(&:sid))
123
+
124
+ refute_equal default, alterate
125
+ assert_equal Set.new, (default & alterate), format('%s sids may not overlap', obj)
126
+ end
127
+
128
+ end
@@ -0,0 +1,34 @@
1
+ require 'minitest/autorun'
2
+ require 'essential'
3
+
4
+ require 'securerandom'
5
+ require 'set'
6
+
7
+ if ENV.key?('ESSENTIAL_SID') && ENV.key?('ESSENTIAL_TOKEN')
8
+ $debug = false
9
+ Essential.api_base = ENV['ESSENTIAL_URL'] || 'http://127.0.0.1:3000'
10
+ Essential.sid = ENV['ESSENTIAL_SID']
11
+ Essential.token = ENV['ESSENTIAL_TOKEN']
12
+ else
13
+ # TODO: # require 'webmock/minitest'
14
+ # mock all responses?
15
+ end
16
+
17
+ class EssentialTest < Minitest::Test
18
+
19
+ protected
20
+
21
+ def assert_error_with_params(*params, &_)
22
+ error = assert_raises Essential::APIError do
23
+ yield
24
+ end
25
+
26
+ refute_nil error.params, 'APIError must have params'
27
+
28
+ expected_params = Set.new(params.map(&:to_s))
29
+ actual_params = Set.new(error.params.keys.map(&:to_s))
30
+
31
+ assert_equal expected_params, actual_params, 'APIError params must match exactly'
32
+ end
33
+
34
+ end
metadata ADDED
@@ -0,0 +1,125 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: essential
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.0
5
+ platform: ruby
6
+ authors:
7
+ - Brendan Ribera
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-04-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rest-client
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.8'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.8'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.5'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.5'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.8'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.8'
55
+ description: A GEM for interacting with the Essential.to service.
56
+ email: brendan@madronavl.com
57
+ executables: []
58
+ extensions: []
59
+ extra_rdoc_files: []
60
+ files:
61
+ - Gemfile
62
+ - Gemfile.lock
63
+ - LICENSE
64
+ - README.md
65
+ - Rakefile
66
+ - essential.gemspec
67
+ - lib/essential.rb
68
+ - lib/essential/account.rb
69
+ - lib/essential/client.rb
70
+ - lib/essential/errors/api_error.rb
71
+ - lib/essential/messaging/channel.rb
72
+ - lib/essential/messaging/message.rb
73
+ - lib/essential/messaging/property.rb
74
+ - lib/essential/messaging/subscriber.rb
75
+ - lib/essential/messaging/transport.rb
76
+ - lib/essential/resource.rb
77
+ - lib/essential/resource/attr_methods.rb
78
+ - lib/essential/resource/attr_relations.rb
79
+ - lib/essential/resource/create.rb
80
+ - lib/essential/resource/delete.rb
81
+ - lib/essential/resource/list.rb
82
+ - lib/essential/resource/paginator_proxy.rb
83
+ - lib/essential/resource/update.rb
84
+ - lib/essential/version.rb
85
+ - test/essential/account_test.rb
86
+ - test/essential/messaging/channel_test.rb
87
+ - test/essential/messaging/message_test.rb
88
+ - test/essential/messaging/property_test.rb
89
+ - test/essential/messaging/subscriber_test.rb
90
+ - test/essential/messaging/transport_test.rb
91
+ - test/integration/alternate_authentication_test.rb
92
+ - test/test_helper.rb
93
+ homepage: http://github.com/madrona-labs/essential-ruby
94
+ licenses:
95
+ - MIT
96
+ metadata: {}
97
+ post_install_message:
98
+ rdoc_options: []
99
+ require_paths:
100
+ - lib
101
+ required_ruby_version: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: '0'
106
+ required_rubygems_version: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ requirements: []
112
+ rubyforge_project:
113
+ rubygems_version: 2.4.5.1
114
+ signing_key:
115
+ specification_version: 4
116
+ summary: Essential Ruby Library
117
+ test_files:
118
+ - test/essential/account_test.rb
119
+ - test/essential/messaging/channel_test.rb
120
+ - test/essential/messaging/message_test.rb
121
+ - test/essential/messaging/property_test.rb
122
+ - test/essential/messaging/subscriber_test.rb
123
+ - test/essential/messaging/transport_test.rb
124
+ - test/integration/alternate_authentication_test.rb
125
+ - test/test_helper.rb