hipchat 1.0.1 → 1.1.0
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.
- checksums.yaml +4 -4
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +1 -0
- data/README.textile +25 -1
- data/lib/hipchat.rb +4 -206
- data/lib/hipchat/api_version.rb +80 -14
- data/lib/hipchat/capistrano2.rb +41 -1
- data/lib/hipchat/client.rb +111 -0
- data/lib/hipchat/errors.rb +10 -0
- data/lib/hipchat/rails3_tasks.rb +2 -1
- data/lib/hipchat/room.rb +193 -0
- data/lib/hipchat/user.rb +62 -0
- data/lib/hipchat/version.rb +1 -1
- data/spec/hipchat_api_v1_spec.rb +172 -0
- data/spec/hipchat_api_v2_spec.rb +217 -0
- data/spec/hipchat_spec.rb +0 -271
- data/spec/spec_helper.rb +3 -0
- data/spec/{shared_hipchat.rb → support/shared_contexts_for_hipchat.rb} +58 -7
- metadata +15 -6
@@ -0,0 +1,111 @@
|
|
1
|
+
require 'hipchat/api_version'
|
2
|
+
|
3
|
+
module HipChat
|
4
|
+
|
5
|
+
class Client
|
6
|
+
include HTTParty
|
7
|
+
|
8
|
+
format :json
|
9
|
+
|
10
|
+
def initialize(token, options={})
|
11
|
+
@token = token
|
12
|
+
@api_version = options[:api_version]
|
13
|
+
@api = HipChat::ApiVersion::Client.new(@api_version)
|
14
|
+
self.class.base_uri(@api.base_uri)
|
15
|
+
http_proxy = options[:http_proxy] || ENV['http_proxy']
|
16
|
+
setup_proxy(http_proxy) if http_proxy
|
17
|
+
end
|
18
|
+
|
19
|
+
def rooms
|
20
|
+
@rooms ||= _rooms
|
21
|
+
end
|
22
|
+
|
23
|
+
def [](name)
|
24
|
+
Room.new(@token, :room_id => name, :api_version => @api_version)
|
25
|
+
end
|
26
|
+
|
27
|
+
def create_room(name, options={})
|
28
|
+
if @api.version == 'v1' && options[:owner_user_id].nil?
|
29
|
+
raise RoomMissingOwnerUserId, "V1 API Requres owner_user_id"
|
30
|
+
end
|
31
|
+
|
32
|
+
if name.length > 50
|
33
|
+
raise RoomNameTooLong, "Room name #{name} is #{name.length} characters long. Limit is 50."
|
34
|
+
end
|
35
|
+
unless options[:guest_access].nil?
|
36
|
+
options[:guest_access] = @api.bool_val(options[:guest_access])
|
37
|
+
end
|
38
|
+
|
39
|
+
response = self.class.post(@api.create_room_config[:url],
|
40
|
+
:query => { :auth_token => @token },
|
41
|
+
:body => {
|
42
|
+
:name => name
|
43
|
+
}.merge(options).send(@api.create_room_config[:body_format]),
|
44
|
+
:headers => @api.headers
|
45
|
+
)
|
46
|
+
|
47
|
+
case response.code
|
48
|
+
when 201, 200 #CREATED
|
49
|
+
response.parsed_response
|
50
|
+
when 400
|
51
|
+
raise UnknownRoom, "Error: #{response.message}"
|
52
|
+
when 401
|
53
|
+
raise Unauthorized, "Access denied"
|
54
|
+
else
|
55
|
+
raise UnknownResponseCode, "Unexpected error #{response.code}"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def user(name)
|
60
|
+
User.new(@token, :user_id => name, :api_version => @api_version)
|
61
|
+
end
|
62
|
+
|
63
|
+
def users
|
64
|
+
@users ||= _users
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
def setup_proxy(proxy_url)
|
69
|
+
proxy_url = URI.parse(proxy_url)
|
70
|
+
|
71
|
+
self.class.http_proxy(proxy_url.host, proxy_url.port,
|
72
|
+
proxy_url.user, proxy_url.password)
|
73
|
+
HipChat::Room.http_proxy(proxy_url.host, proxy_url.port,
|
74
|
+
proxy_url.user, proxy_url.password)
|
75
|
+
end
|
76
|
+
|
77
|
+
def _rooms
|
78
|
+
response = self.class.get(@api.rooms_config[:url],
|
79
|
+
:query => {
|
80
|
+
:auth_token => @token
|
81
|
+
},
|
82
|
+
:headers => @api.headers
|
83
|
+
)
|
84
|
+
case response.code
|
85
|
+
when 200
|
86
|
+
response[@api.rooms_config[:data_key]].map do |r|
|
87
|
+
Room.new(@token, r.merge(:api_version => @api_version, :room_id => r['id']))
|
88
|
+
end
|
89
|
+
else
|
90
|
+
raise UnknownResponseCode, "Unexpected #{response.code} for room"
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def _users
|
95
|
+
response = self.class.get(@api.users_config[:url],
|
96
|
+
:query => {
|
97
|
+
:auth_token => @token
|
98
|
+
},
|
99
|
+
:headers => @api.headers
|
100
|
+
)
|
101
|
+
case response.code
|
102
|
+
when 200
|
103
|
+
response[@api.users_config[:data_key]].map do |r|
|
104
|
+
Room.new(@token, r.merge(:api_version => @api_version, :user_id => r['id']))
|
105
|
+
end
|
106
|
+
else
|
107
|
+
raise UnknownResponseCode, "Unexpected #{response.code} for room"
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module HipChat
|
2
|
+
class UnknownRoom < StandardError; end
|
3
|
+
class RoomNameTooLong < StandardError; end
|
4
|
+
class RoomMissingOwnerUserId < StandardError; end
|
5
|
+
class Unauthorized < StandardError; end
|
6
|
+
class UsernameTooLong < StandardError; end
|
7
|
+
class UnknownResponseCode < StandardError; end
|
8
|
+
class UnknownUser < StandardError; end
|
9
|
+
class InvalidApiVersion < StandardError; end
|
10
|
+
end
|
data/lib/hipchat/rails3_tasks.rb
CHANGED
@@ -12,6 +12,7 @@ namespace :hipchat do
|
|
12
12
|
:user => ENV['HIPCHAT_USER'],
|
13
13
|
:notify => ENV['NOTIFY'],
|
14
14
|
:room => ENV['ROOM'],
|
15
|
+
:color => ENV['COLOR'],
|
15
16
|
:token => ENV['TOKEN'],
|
16
17
|
:api_version => ENV['API_VERSION']
|
17
18
|
}.reject { |k, v| v.blank? }
|
@@ -40,6 +41,6 @@ namespace :hipchat do
|
|
40
41
|
|
41
42
|
client = HipChat::Client.new(options[:token], options)
|
42
43
|
|
43
|
-
client[options[:room]].send(options[:user], options[:message], :notify => options[:notify])
|
44
|
+
client[options[:room]].send(options[:user], options[:message], { :color => options[:color], :notify => options[:notify] })
|
44
45
|
end
|
45
46
|
end
|
data/lib/hipchat/room.rb
ADDED
@@ -0,0 +1,193 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
require 'ostruct'
|
3
|
+
|
4
|
+
module HipChat
|
5
|
+
|
6
|
+
class Room < OpenStruct
|
7
|
+
include HTTParty
|
8
|
+
|
9
|
+
format :json
|
10
|
+
|
11
|
+
def initialize(token, params)
|
12
|
+
@token = token
|
13
|
+
@api = HipChat::ApiVersion::Room.new(params[:room_id],
|
14
|
+
params.delete(:api_version))
|
15
|
+
self.class.base_uri(@api.base_uri)
|
16
|
+
super(params)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Retrieve data for this room
|
20
|
+
def get_room
|
21
|
+
response = self.class.get(@api.get_room_config[:url],
|
22
|
+
:query => {:auth_token => @token },
|
23
|
+
:headers => @api.headers
|
24
|
+
)
|
25
|
+
|
26
|
+
case response.code
|
27
|
+
when 200
|
28
|
+
response.parsed_response
|
29
|
+
when 404
|
30
|
+
raise UnknownRoom, "Unknown room: `#{room_id}'"
|
31
|
+
when 401
|
32
|
+
raise Unauthorized, "Access denied to room `#{room_id}'"
|
33
|
+
else
|
34
|
+
raise UnknownResponseCode, "Unexpected #{response.code} for room `#{room_id}'"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# Invite user to this room
|
39
|
+
def invite(user, reason="")
|
40
|
+
response = self.class.post(@api.invite_config[:url]+"/#{user}",
|
41
|
+
:query => { :auth_token => @token },
|
42
|
+
:body => {
|
43
|
+
:reason => reason
|
44
|
+
}.to_json,
|
45
|
+
:headers => @api.headers)
|
46
|
+
|
47
|
+
case response.code
|
48
|
+
when 200, 204; true
|
49
|
+
when 404
|
50
|
+
raise UnknownRoom, "Unknown room: `#{room_id}'"
|
51
|
+
when 401
|
52
|
+
raise Unauthorized, "Access denied to room `#{room_id}'"
|
53
|
+
else
|
54
|
+
raise UnknownResponseCode, "Unexpected #{response.code} for room `#{room_id}'"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
|
59
|
+
# Send a message to this room.
|
60
|
+
#
|
61
|
+
# Usage:
|
62
|
+
#
|
63
|
+
# # Default
|
64
|
+
# send 'nickname', 'some message'
|
65
|
+
#
|
66
|
+
# # Notify users and color the message red
|
67
|
+
# send 'nickname', 'some message', :notify => true, :color => 'red'
|
68
|
+
#
|
69
|
+
# # Notify users (deprecated)
|
70
|
+
# send 'nickname', 'some message', true
|
71
|
+
#
|
72
|
+
# Options:
|
73
|
+
#
|
74
|
+
# +color+:: "yellow", "red", "green", "purple", or "random"
|
75
|
+
# (default "yellow")
|
76
|
+
# +notify+:: true or false
|
77
|
+
# (default false)
|
78
|
+
def send(from, message, options_or_notify = {})
|
79
|
+
if from.length > 15
|
80
|
+
raise UsernameTooLong, "Username #{from} is `#{from.length} characters long. Limit is 15'"
|
81
|
+
end
|
82
|
+
options = if options_or_notify == true or options_or_notify == false
|
83
|
+
warn "DEPRECATED: Specify notify flag as an option (e.g., :notify => true)"
|
84
|
+
{ :notify => options_or_notify }
|
85
|
+
else
|
86
|
+
options_or_notify || {}
|
87
|
+
end
|
88
|
+
|
89
|
+
options = { :color => 'yellow', :notify => false }.merge options
|
90
|
+
|
91
|
+
response = self.class.post(@api.send_config[:url],
|
92
|
+
:query => { :auth_token => @token },
|
93
|
+
:body => {
|
94
|
+
:room_id => room_id,
|
95
|
+
:from => from,
|
96
|
+
:message => message,
|
97
|
+
:message_format => options[:message_format] || 'html',
|
98
|
+
:color => options[:color],
|
99
|
+
:notify => @api.bool_val(options[:notify])
|
100
|
+
}.send(@api.send_config[:body_format]),
|
101
|
+
:headers => @api.headers
|
102
|
+
)
|
103
|
+
|
104
|
+
case response.code
|
105
|
+
when 200, 204; true
|
106
|
+
when 404
|
107
|
+
raise UnknownRoom, "Unknown room: `#{room_id}'"
|
108
|
+
when 401
|
109
|
+
raise Unauthorized, "Access denied to room `#{room_id}'"
|
110
|
+
else
|
111
|
+
raise UnknownResponseCode, "Unexpected #{response.code} for room `#{room_id}'"
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
# Change this room's topic
|
116
|
+
#
|
117
|
+
# Usage:
|
118
|
+
#
|
119
|
+
# # Default
|
120
|
+
# topic 'my awesome topic'
|
121
|
+
#
|
122
|
+
# Options:
|
123
|
+
#
|
124
|
+
# +from+:: the name of the person changing the topic
|
125
|
+
# (default "API")
|
126
|
+
def topic(new_topic, options = {})
|
127
|
+
|
128
|
+
options = { :from => 'API' }.merge options
|
129
|
+
|
130
|
+
response = self.class.send(@api.topic_config[:method], @api.topic_config[:url],
|
131
|
+
:query => { :auth_token => @token },
|
132
|
+
:body => {
|
133
|
+
:room_id => room_id,
|
134
|
+
:from => options[:from],
|
135
|
+
:topic => new_topic
|
136
|
+
}.send(@api.topic_config[:body_format]),
|
137
|
+
:headers => @api.headers
|
138
|
+
)
|
139
|
+
|
140
|
+
case response.code
|
141
|
+
when 204,200; true
|
142
|
+
when 404
|
143
|
+
raise UnknownRoom, "Unknown room: `#{room_id}'"
|
144
|
+
when 401
|
145
|
+
raise Unauthorized, "Access denied to room `#{room_id}'"
|
146
|
+
else
|
147
|
+
raise UnknownResponseCode, "Unexpected #{response.code} for room `#{room_id}'"
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
# Pull this room's history
|
152
|
+
#
|
153
|
+
# Usage
|
154
|
+
#
|
155
|
+
# # Default
|
156
|
+
#
|
157
|
+
#
|
158
|
+
# Options
|
159
|
+
#
|
160
|
+
# +date+:: Whether to return a specific day (YYYY-MM-DD format) or recent
|
161
|
+
# (default "recent")
|
162
|
+
# +timezone+:: Your timezone. Supported timezones are at: https://www.hipchat.com/docs/api/timezones
|
163
|
+
# (default "UTC")
|
164
|
+
# +format+:: Format to retrieve the history in. Valid options are JSON and XML
|
165
|
+
# (default "JSON")
|
166
|
+
def history(options = {})
|
167
|
+
|
168
|
+
options = { :date => 'recent', :timezone => 'UTC', :format => 'JSON' }.merge options
|
169
|
+
|
170
|
+
response = self.class.get(@api.history_config[:url],
|
171
|
+
:query => {
|
172
|
+
:room_id => room_id,
|
173
|
+
:date => options[:date],
|
174
|
+
:timezone => options[:timezone],
|
175
|
+
:format => options[:format],
|
176
|
+
:auth_token => @token,
|
177
|
+
},
|
178
|
+
:headers => @api.headers
|
179
|
+
)
|
180
|
+
|
181
|
+
case response.code
|
182
|
+
when 200
|
183
|
+
response.body
|
184
|
+
when 404
|
185
|
+
raise UnknownRoom, "Unknown room: `#{room_id}'"
|
186
|
+
when 401
|
187
|
+
raise Unauthorized, "Access denied to room `#{room_id}'"
|
188
|
+
else
|
189
|
+
raise UnknownResponseCode, "Unexpected #{response.code} for room `#{room_id}'"
|
190
|
+
end
|
191
|
+
end
|
192
|
+
end
|
193
|
+
end
|
data/lib/hipchat/user.rb
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
require 'ostruct'
|
3
|
+
|
4
|
+
module HipChat
|
5
|
+
|
6
|
+
class User < OpenStruct
|
7
|
+
include HTTParty
|
8
|
+
|
9
|
+
format :json
|
10
|
+
|
11
|
+
def initialize(token, params)
|
12
|
+
@token = token
|
13
|
+
@api = HipChat::ApiVersion::User.new(params[:user_id],
|
14
|
+
params.delete(:api_version))
|
15
|
+
self.class.base_uri(@api.base_uri)
|
16
|
+
super(params)
|
17
|
+
end
|
18
|
+
|
19
|
+
#
|
20
|
+
# Send a private message to user.
|
21
|
+
#
|
22
|
+
def send(message)
|
23
|
+
response = self.class.post(@api.send_config[:url],
|
24
|
+
:query => { :auth_token => @token },
|
25
|
+
:body => {
|
26
|
+
:message => message
|
27
|
+
}.send(@api.send_config[:body_format]),
|
28
|
+
:headers => @api.headers
|
29
|
+
)
|
30
|
+
|
31
|
+
case response.code
|
32
|
+
when 200, 204; true
|
33
|
+
when 404
|
34
|
+
raise UnknownUser, "Unknown user: `#{user_id}'"
|
35
|
+
when 401
|
36
|
+
raise Unauthorized, "Access denied to user `#{user_id}'"
|
37
|
+
else
|
38
|
+
raise UnknownResponseCode, "Unexpected #{response.code} for private message to `#{user_id}'"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
#
|
43
|
+
# Get a user's details.
|
44
|
+
#
|
45
|
+
def view
|
46
|
+
puts "#{@api.base_uri}#{@api.view_config[:url]}"
|
47
|
+
response = self.class.post(@api.view_config[:url],
|
48
|
+
:query => { :auth_token => @token },
|
49
|
+
:headers => @api.headers
|
50
|
+
)
|
51
|
+
|
52
|
+
case response.code
|
53
|
+
when 200
|
54
|
+
response[@api.users_config[:data_key]].map do |r|
|
55
|
+
User.new(@token, r.merge(:api_version => @api_version))
|
56
|
+
end
|
57
|
+
else
|
58
|
+
raise UnknownResponseCode, "Unexpected #{response.code} for view message to `#{user_id}'"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
data/lib/hipchat/version.rb
CHANGED
@@ -0,0 +1,172 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe "HipChat (API V1)" do
|
4
|
+
|
5
|
+
subject { HipChat::Client.new("blah", :api_version => @api_version) }
|
6
|
+
|
7
|
+
let(:room) { subject["Hipchat"] }
|
8
|
+
|
9
|
+
describe "#history" do
|
10
|
+
include_context "HipChatV1"
|
11
|
+
it "is successful without custom options" do
|
12
|
+
mock_successful_history()
|
13
|
+
|
14
|
+
room.history().should be_true
|
15
|
+
end
|
16
|
+
|
17
|
+
it "is successful with custom options" do
|
18
|
+
mock_successful_history(:timezone => 'America/Los_Angeles', :date => '2010-11-19')
|
19
|
+
room.history(:timezone => 'America/Los_Angeles', :date => '2010-11-19').should be_true
|
20
|
+
end
|
21
|
+
|
22
|
+
it "fails when the room doen't exist" do
|
23
|
+
mock(HipChat::Room).get(anything, anything) {
|
24
|
+
OpenStruct.new(:code => 404)
|
25
|
+
}
|
26
|
+
|
27
|
+
lambda { room.history }.should raise_error(HipChat::UnknownRoom)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "fails when we're not allowed to do so" do
|
31
|
+
mock(HipChat::Room).get(anything, anything) {
|
32
|
+
OpenStruct.new(:code => 401)
|
33
|
+
}
|
34
|
+
|
35
|
+
lambda { room.history }.should raise_error(HipChat::Unauthorized)
|
36
|
+
end
|
37
|
+
|
38
|
+
it "fails if we get an unknown response code" do
|
39
|
+
mock(HipChat::Room).get(anything, anything) {
|
40
|
+
OpenStruct.new(:code => 403)
|
41
|
+
}
|
42
|
+
|
43
|
+
lambda { room.history }.
|
44
|
+
should raise_error(HipChat::UnknownResponseCode)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe "#topic" do
|
49
|
+
include_context "HipChatV1"
|
50
|
+
it "is successful without custom options" do
|
51
|
+
mock_successful_topic_change("Nice topic")
|
52
|
+
|
53
|
+
room.topic("Nice topic").should be_true
|
54
|
+
end
|
55
|
+
|
56
|
+
it "is successful with a custom from" do
|
57
|
+
mock_successful_topic_change("Nice topic", :from => "Me")
|
58
|
+
|
59
|
+
room.topic("Nice topic", :from => "Me").should be_true
|
60
|
+
end
|
61
|
+
|
62
|
+
it "fails when the room doesn't exist" do
|
63
|
+
mock(HipChat::Room).post(anything, anything) {
|
64
|
+
OpenStruct.new(:code => 404)
|
65
|
+
}
|
66
|
+
|
67
|
+
lambda { room.topic "" }.should raise_error(HipChat::UnknownRoom)
|
68
|
+
end
|
69
|
+
|
70
|
+
it "fails when we're not allowed to do so" do
|
71
|
+
mock(HipChat::Room).post(anything, anything) {
|
72
|
+
OpenStruct.new(:code => 401)
|
73
|
+
}
|
74
|
+
|
75
|
+
lambda { room.topic "" }.should raise_error(HipChat::Unauthorized)
|
76
|
+
end
|
77
|
+
|
78
|
+
it "fails if we get an unknown response code" do
|
79
|
+
mock(HipChat::Room).post(anything, anything) {
|
80
|
+
OpenStruct.new(:code => 403)
|
81
|
+
}
|
82
|
+
|
83
|
+
lambda { room.topic "" }.
|
84
|
+
should raise_error(HipChat::UnknownResponseCode)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
describe "#send" do
|
89
|
+
include_context "HipChatV1"
|
90
|
+
it "successfully without custom options" do
|
91
|
+
mock_successful_send 'Dude', 'Hello world'
|
92
|
+
|
93
|
+
room.send("Dude", "Hello world").should be_true
|
94
|
+
end
|
95
|
+
|
96
|
+
it "successfully with notifications on as option" do
|
97
|
+
mock_successful_send 'Dude', 'Hello world', :notify => 1
|
98
|
+
|
99
|
+
room.send("Dude", "Hello world", :notify => 1).should be_true
|
100
|
+
end
|
101
|
+
|
102
|
+
it "successfully with custom color" do
|
103
|
+
mock_successful_send 'Dude', 'Hello world', :color => 'red'
|
104
|
+
|
105
|
+
room.send("Dude", "Hello world", :color => 'red').should be_true
|
106
|
+
end
|
107
|
+
|
108
|
+
it "successfully with text message_format" do
|
109
|
+
mock_successful_send 'Dude', 'Hello world', :message_format => 'text'
|
110
|
+
|
111
|
+
room.send("Dude", "Hello world", :message_format => 'text').should be_true
|
112
|
+
end
|
113
|
+
|
114
|
+
it "but fails when the room doesn't exist" do
|
115
|
+
mock(HipChat::Room).post(anything, anything) {
|
116
|
+
OpenStruct.new(:code => 404)
|
117
|
+
}
|
118
|
+
|
119
|
+
lambda { room.send "", "" }.should raise_error(HipChat::UnknownRoom)
|
120
|
+
end
|
121
|
+
|
122
|
+
it "but fails when we're not allowed to do so" do
|
123
|
+
mock(HipChat::Room).post(anything, anything) {
|
124
|
+
OpenStruct.new(:code => 401)
|
125
|
+
}
|
126
|
+
|
127
|
+
lambda { room.send "", "" }.should raise_error(HipChat::Unauthorized)
|
128
|
+
end
|
129
|
+
|
130
|
+
it "but fails if the username is more than 15 chars" do
|
131
|
+
lambda { room.send "a very long username here", "a message" }.should raise_error(HipChat::UsernameTooLong)
|
132
|
+
end
|
133
|
+
|
134
|
+
it "but fails if we get an unknown response code" do
|
135
|
+
mock(HipChat::Room).post(anything, anything) {
|
136
|
+
OpenStruct.new(:code => 403)
|
137
|
+
}
|
138
|
+
|
139
|
+
lambda { room.send "", "" }.
|
140
|
+
should raise_error(HipChat::UnknownResponseCode)
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
describe "#create" do
|
145
|
+
include_context "HipChatV1"
|
146
|
+
|
147
|
+
it "successfully with room name" do
|
148
|
+
mock_successful_room_creation("A Room", :owner_user_id => "123456")
|
149
|
+
|
150
|
+
subject.create_room("A Room", {:owner_user_id => "123456"}).should be_true
|
151
|
+
end
|
152
|
+
|
153
|
+
it "successfully with custom parameters" do
|
154
|
+
mock_successful_room_creation("A Room", {:owner_user_id => "123456", :privacy => "private", :guest_access => "1"})
|
155
|
+
|
156
|
+
subject.create_room("A Room", {:owner_user_id => "123456", :privacy => "private", :guest_access =>true}).should be_true
|
157
|
+
end
|
158
|
+
|
159
|
+
it "but fails if we dont pass owner_user_id" do
|
160
|
+
lambda { subject.create_room("A Room", {:privacy => "private", :guest_access =>true}) }.
|
161
|
+
should raise_error(HipChat::RoomMissingOwnerUserId)
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
describe "#send user message" do
|
166
|
+
it "fails because API V1 doesn't support user operations" do
|
167
|
+
|
168
|
+
lambda { HipChat::Client.new("blah", :api_version => @api_version).user('12345678') }.
|
169
|
+
should raise_error(HipChat::InvalidApiVersion)
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|