hashblue-api 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,32 @@
1
+ # This isn't great
2
+
3
+ begin
4
+ # Require the preresolved locked set of gems.
5
+ require File.expand_path('../../../.bundle/environment', __FILE__)
6
+ rescue LoadError
7
+ # Fallback on doing the resolve at runtime.
8
+ require "rubygems"
9
+ require "bundler"
10
+ Bundler.setup
11
+ end
12
+
13
+ require 'test/unit'
14
+ require 'mocha'
15
+ require 'shoulda'
16
+ require 'webmock/test_unit'
17
+
18
+ # This dependency needs to be removed
19
+
20
+ require 'hashblue/api'
21
+
22
+ Hashblue::API.base_uri "http://www.example.com"
23
+ Hashblue::API.timeout 1
24
+
25
+ class Test::Unit::TestCase
26
+ def dont_respond_to_http_requests_for_10_seconds
27
+ stub_request(:any, Regexp.new(Regexp.escape("http://www.example.com/"))).to_return(lambda {|request|
28
+ sleep(10)
29
+ result = {:headers => {}, :body => {}, :status => 200 }
30
+ })
31
+ end
32
+ end
@@ -0,0 +1,17 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ class Hashblue::APITest < Test::Unit::TestCase
4
+ include WebMock
5
+
6
+ context "Hashblue::API" do
7
+ context "a request that times out" do
8
+ setup do
9
+ dont_respond_to_http_requests_for_10_seconds
10
+ end
11
+
12
+ should "raise a TimeoutError" do
13
+ assert_raises(Hashblue::API::NotRespondingError) { Hashblue::API.get '/any/path' }
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,27 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ class Hashblue::API::ContactTest < Test::Unit::TestCase
4
+ context "Hashblue::API::Contact" do
5
+ should "return Contact for model name" do
6
+ assert_equal 'Contact', Hashblue::API::Contact.model_name
7
+ end
8
+
9
+ should "return contact for model_name.singular" do
10
+ assert_equal 'contact', Hashblue::API::Contact.model_name.singular
11
+ end
12
+ end
13
+
14
+ context "A contact initialized with an subscriber_id and an id" do
15
+ setup do
16
+ @subscriber_id = 'ffddee554433'
17
+ @id = 'abcdef123456'
18
+ @contact = Hashblue::API::Contact.new(:id => @id, :subscriber_id => @subscriber_id)
19
+ end
20
+
21
+ should "return messages found at /subscribers/:subscriber_id/contacts/:id/messages.json as messages" do
22
+ Hashblue::API.expects(:get).with("/subscribers/#{@subscriber_id}/contacts/#{@id}/messages.json", anything).returns(@json = :messages_json)
23
+ Hashblue::API::Message.expects(:from_json).with(@json).returns(:messages)
24
+ assert_equal :messages, @contact.messages
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,135 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ class Hashblue::API::MessageAPITest < Test::Unit::TestCase
4
+ # include WebMock
5
+ #
6
+ # context "When loading a messages for an MSISDN" do
7
+ # context "and the API responds with a message" do
8
+ # setup do
9
+ # stub_request(:get, Hashblue::API.url_for("/subscribers/44123456789/messages.json")).to_return(
10
+ # :body => %{[{"sender":"44123456789","content":"Hello","recipient":"44987654321","timestamp":"2010/02/15 17:26:21 +0000"}]},
11
+ # :status => 200,
12
+ # :headers => {'Content-Type' => Mime::JSON.to_s}
13
+ # )
14
+ # @messages = Hashblue::API::Message.messages_for("44123456789")
15
+ # @message = @messages.first
16
+ # end
17
+ #
18
+ # should "return an instantiated Hashblue::API::Message" do
19
+ # assert_equal 1, @messages.length
20
+ # end
21
+ #
22
+ # should "parse the message content" do
23
+ # assert_equal "Hello", @message.content
24
+ # end
25
+ #
26
+ # should "parse the message sender MSISDN" do
27
+ # assert_equal "44123456789", @message.sender_msisdn
28
+ # end
29
+ #
30
+ # should "parse the message recipient MSISDN" do
31
+ # assert_equal "44987654321", @message.recipient_msisdn
32
+ # end
33
+ #
34
+ # should "parse the timestamp" do
35
+ # assert_equal Time.parse("2010/02/15 17:26:21 +0000"), @message.timestamp
36
+ # end
37
+ # end
38
+ #
39
+ # context "and the API responds with several messages" do
40
+ # setup do
41
+ # stub_request(:get, Hashblue::API.url_for("/subscribers/44123456789/messages.json")).to_return(
42
+ # :body => %{[{"sender":"44123456789","content":"Hello","recipient":"44987654321","timestamp":"2010/02/15 17:26:21 +0000"},{"sender":"44234567890","content":"Goodbye","recipient":"44987654321","timestamp":"2010/02/15 17:36:41 +0000"}]},
43
+ # :status => 200,
44
+ # :headers => {'Content-Type' => Mime::JSON.to_s}
45
+ # )
46
+ # @messages = Hashblue::API::Message.messages_for("44123456789")
47
+ # end
48
+ #
49
+ # should "return each message" do
50
+ # assert_equal 2, @messages.length
51
+ # end
52
+ #
53
+ # should "parse all content" do
54
+ # assert_equal %w(Hello Goodbye), @messages.map(&:content)
55
+ # end
56
+ # end
57
+ #
58
+ # context "and the API has no messages for that MSISDN" do
59
+ # setup do
60
+ # stub_request(:get, Hashblue::API.url_for("/subscribers/44123456789/messages.json")).to_return(
61
+ # :body => %{[]},
62
+ # :status => 200,
63
+ # :headers => {'Content-Type' => Mime::JSON.to_s}
64
+ # )
65
+ # @messages = Hashblue::API::Message.messages_for("44123456789")
66
+ # end
67
+ #
68
+ # should "return an empty array" do
69
+ # assert @messages.empty?
70
+ # end
71
+ # end
72
+ #
73
+ # context "and the API responds with something that isn't JSON" do
74
+ # setup do
75
+ # stub_request(:get, Hashblue::API.url_for("/subscribers/44123456789/messages.json")).to_return(
76
+ # :body => %{<html><body><h1>Oh hello, this is HTML, yes.</body></html>},
77
+ # :status => 200,
78
+ # :headers => {'Content-Type' => Mime::HTML.to_s}
79
+ # )
80
+ # end
81
+ #
82
+ # should "raise an exception" do
83
+ # assert_raises(Hashblue::API::BadResponseError) do
84
+ # Hashblue::API::Message.messages_for("44123456789")
85
+ # end
86
+ # end
87
+ # end
88
+ #
89
+ # context "and the API responds with a 500 status code" do
90
+ # setup do
91
+ # stub_request(:get, Hashblue::API.url_for("/subscribers/44123456789/messages.json")).to_return(
92
+ # :body => %{[]},
93
+ # :status => 500,
94
+ # :headers => {'Content-Type' => Mime::JSON.to_s}
95
+ # )
96
+ # end
97
+ #
98
+ # should "raise an exception" do
99
+ # assert_raises(Hashblue::API::BadResponseError) do
100
+ # Hashblue::API::Message.messages_for("44123456789")
101
+ # end
102
+ # end
103
+ # end
104
+ #
105
+ # context "and the API fails to respond within 2 seconds" do
106
+ # setup do
107
+ # dont_respond_to_http_requests_for_10_seconds
108
+ # end
109
+ #
110
+ # should "raise a NotRespondingError" do
111
+ # assert_raises(Hashblue::API::NotRespondingError) do
112
+ # Hashblue::API::Message.messages_for("44123456789")
113
+ # end
114
+ # end
115
+ # end
116
+ # end
117
+ #
118
+ # context "Deleting an individual message" do
119
+ # context "when the api fails to respond" do
120
+ # setup do
121
+ # dont_respond_to_http_requests_for_10_seconds
122
+ # end
123
+ #
124
+ # should "raise a NotRespondingError" do
125
+ # assert_raises(Hashblue::API::NotRespondingError) do
126
+ # Hashblue::API::Message.delete("1234567", "ab44ff33")
127
+ # end
128
+ # end
129
+ # end
130
+ # end
131
+
132
+ # authentication?
133
+ # pagination?
134
+
135
+ end
@@ -0,0 +1,42 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ class Hashblue::API::MessageTest < Test::Unit::TestCase
4
+ context "Hashblue::API::Message" do
5
+ should "return Message for model name" do
6
+ assert_equal 'Message', Hashblue::API::Message.model_name
7
+ end
8
+
9
+ should "return message for model_name.singular" do
10
+ assert_equal 'message', Hashblue::API::Message.model_name.singular
11
+ end
12
+ end
13
+
14
+ context "A message initialized with attributes from the API" do
15
+ setup do
16
+ @attributes = {
17
+ :id => '12345678',
18
+ :subscriber_id => 'djash12kv2',
19
+ :timestamp => '2010-03-18T15:03:58Z',
20
+ :sent => true
21
+ }
22
+ @message = Hashblue::API::Message.new(@attributes)
23
+ end
24
+
25
+ should "return timestamp as ruby Time object" do
26
+ assert_equal Time.utc(2010, 03, 18, 15, 03, 58), @message.timestamp
27
+ end
28
+
29
+ should "be sent if sent is true" do
30
+ assert @message.sent?
31
+ end
32
+
33
+ should "not be received when sent is true" do
34
+ assert !@message.received?
35
+ end
36
+
37
+ should "delete the message by calling the API" do
38
+ Hashblue::API.expects(:delete).with("/subscribers/djash12kv2/messages/12345678.json", anything)
39
+ @message.delete
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,27 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ class Hashblue::API::ModelTest < Test::Unit::TestCase
4
+ context "Hashblue API models in general" do
5
+ setup do
6
+ @attributes = {
7
+ :id => '12345678',
8
+ :subscriber_id => 'djash12kv2',
9
+ :anything => 'something'
10
+ }
11
+ @message = Hashblue::API::Model.new(@attributes)
12
+ end
13
+
14
+ should "return passed in id as id" do
15
+ assert_equal @attributes[:id], @message.id
16
+ end
17
+
18
+ should "return other passed in attributes when accessed through methods" do
19
+ assert_equal @attributes[:subscriber_id], @message.subscriber_id
20
+ assert_equal @attributes[:anything], @message.anything
21
+ end
22
+
23
+ should "return id when to_param called" do
24
+ assert_equal @message.id, @message.to_param
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,42 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ class Hashblue::API::SubscriberTest < Test::Unit::TestCase
4
+ context "Hashblue::API::Subscriber" do
5
+ should "return Subscriber for model name" do
6
+ assert_equal 'Subscriber', Hashblue::API::Subscriber.model_name
7
+ end
8
+
9
+ should "return subscriber for model_name.singular" do
10
+ assert_equal 'subscriber', Hashblue::API::Subscriber.model_name.singular
11
+ end
12
+ end
13
+
14
+ context "A subscriber found with an id" do
15
+ setup do
16
+ @id = 'abcdef123456'
17
+ @subscriber = Hashblue::API::Subscriber.find(@id)
18
+ end
19
+
20
+ should "have same id as found with" do
21
+ assert_equal @id, @subscriber.id
22
+ end
23
+
24
+ should "return messages found at /subscribers/:id/messages.json as messages" do
25
+ Hashblue::API.expects(:get).with("/subscribers/#{@id}/messages.json", anything).returns(@json = :messages_json)
26
+ Hashblue::API::Message.expects(:from_json).with(@json).returns(:messages)
27
+ assert_equal :messages, @subscriber.messages
28
+ end
29
+
30
+ should "return deleted messages found at /subscribers/:id/messages/deleted.json as deleted_messages" do
31
+ Hashblue::API.expects(:get).with("/subscribers/#{@id}/messages/deleted.json", anything).returns(@json = :messages_json)
32
+ Hashblue::API::Message.expects(:from_json).with(@json).returns(:messages)
33
+ assert_equal :messages, @subscriber.deleted_messages
34
+ end
35
+
36
+ should "return contacts found at /subscribers/:id/contacts.json as contacts" do
37
+ Hashblue::API.expects(:get).with("/subscribers/#{@id}/contacts.json", anything).returns(@json = :contacts_json)
38
+ Hashblue::API::Contact.expects(:from_json).with(@json).returns(:contacts)
39
+ assert_equal :contacts, @subscriber.contacts
40
+ end
41
+ end
42
+ end
metadata ADDED
@@ -0,0 +1,110 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hashblue-api
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 8
9
+ version: 0.0.8
10
+ platform: ruby
11
+ authors:
12
+ - FreeRange
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-05-07 00:00:00 +01:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: httparty
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ - 5
30
+ - 2
31
+ version: 0.5.2
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: activesupport
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 2
43
+ - 3
44
+ - 5
45
+ version: 2.3.5
46
+ type: :runtime
47
+ version_requirements: *id002
48
+ description:
49
+ email: lets@gofreerange.com
50
+ executables: []
51
+
52
+ extensions: []
53
+
54
+ extra_rdoc_files:
55
+ - README
56
+ files:
57
+ - README
58
+ - Rakefile
59
+ - hashblue-api.gemspec
60
+ - lib/dependency/mime_type.rb
61
+ - lib/dependency/mime_types.rb
62
+ - lib/hashblue/api.rb
63
+ - lib/hashblue/api/contact.rb
64
+ - lib/hashblue/api/error.rb
65
+ - lib/hashblue/api/message.rb
66
+ - lib/hashblue/api/model.rb
67
+ - lib/hashblue/api/request.rb
68
+ - lib/hashblue/api/subscriber.rb
69
+ - lib/hashblue/api/test_helper.rb
70
+ - test/helpers/test_helper_test.rb
71
+ - test/test_helper.rb
72
+ - test/unit/api_test.rb
73
+ - test/unit/contact_test.rb
74
+ - test/unit/message_api_test.rb
75
+ - test/unit/message_test.rb
76
+ - test/unit/model_test.rb
77
+ - test/unit/subscriber_test.rb
78
+ has_rdoc: true
79
+ homepage: http://gofreerange.com
80
+ licenses: []
81
+
82
+ post_install_message:
83
+ rdoc_options:
84
+ - --main
85
+ - README
86
+ require_paths:
87
+ - lib
88
+ required_ruby_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ segments:
93
+ - 0
94
+ version: "0"
95
+ required_rubygems_version: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ segments:
100
+ - 0
101
+ version: "0"
102
+ requirements: []
103
+
104
+ rubyforge_project:
105
+ rubygems_version: 1.3.6
106
+ signing_key:
107
+ specification_version: 3
108
+ summary: It's the Hashblue API, stupid!
109
+ test_files: []
110
+