1 # frozen_string_literal: true
6 class MessagesControllerTest < ActionDispatch::IntegrationTest
8 # test all routes which lead to this controller
11 { :path => "/api/0.6/user/messages/1", :method => :get },
12 { :controller => "api/messages", :action => "show", :id => "1" }
15 { :path => "/api/0.6/user/messages/1.xml", :method => :get },
16 { :controller => "api/messages", :action => "show", :id => "1", :format => "xml" }
19 { :path => "/api/0.6/user/messages/1.json", :method => :get },
20 { :controller => "api/messages", :action => "show", :id => "1", :format => "json" }
23 { :path => "/api/0.6/user/messages", :method => :post },
24 { :controller => "api/messages", :action => "create" }
27 { :path => "/api/0.6/user/messages/1", :method => :put },
28 { :controller => "api/messages", :action => "update", :id => "1" }
31 { :controller => "api/messages", :action => "update", :id => "1" },
32 { :path => "/api/0.6/user/messages/1", :method => :post }
35 { :path => "/api/0.6/user/messages/1", :method => :delete },
36 { :controller => "api/messages", :action => "destroy", :id => "1" }
40 def test_create_success
41 recipient = create(:user)
42 sender = create(:user)
44 sender_auth = bearer_authorization_header(sender, :scopes => %w[send_messages consume_messages])
48 assert_difference "Message.count", 1 do
49 assert_difference "ActionMailer::Base.deliveries.size", 1 do
50 perform_enqueued_jobs do
51 post api_messages_path,
52 :params => { :title => msg.title,
53 :recipient_id => recipient.id,
56 :headers => sender_auth
57 assert_response :success
62 assert_equal "application/json", response.media_type
63 js = ActiveSupport::JSON.decode(@response.body)
66 assert_not_nil jsm["id"]
67 assert_equal sender.id, jsm["from_user_id"]
68 assert_equal sender.display_name, jsm["from_display_name"]
69 assert_equal recipient.id, jsm["to_user_id"]
70 assert_equal recipient.display_name, jsm["to_display_name"]
71 assert_equal msg.title, jsm["title"]
72 assert_not_nil jsm["sent_on"]
73 assert_equal !msg.from_user_visible, jsm["deleted"]
74 assert_not jsm.key?("message_read")
75 assert_equal "markdown", jsm["body_format"]
76 assert_equal msg.body, jsm["body"]
80 recipient = create(:user)
82 sender = create(:user)
83 sender_auth = bearer_authorization_header(sender, :scopes => %w[send_messages consume_messages])
85 assert_no_difference "Message.count" do
86 assert_no_difference "ActionMailer::Base.deliveries.size" do
87 perform_enqueued_jobs do
88 post api_messages_path,
89 :params => { :title => "Title",
90 :recipient_id => recipient.id,
95 assert_response :unauthorized
97 assert_no_difference "Message.count" do
98 assert_no_difference "ActionMailer::Base.deliveries.size" do
99 perform_enqueued_jobs do
100 post api_messages_path,
101 :params => { :recipient_id => recipient.id,
103 :headers => sender_auth
107 assert_response :bad_request
109 assert_no_difference "Message.count" do
110 assert_no_difference "ActionMailer::Base.deliveries.size" do
111 perform_enqueued_jobs do
112 post api_messages_path,
113 :params => { :title => "Title",
115 :headers => sender_auth
119 assert_response :bad_request
121 assert_no_difference "Message.count" do
122 assert_no_difference "ActionMailer::Base.deliveries.size" do
123 perform_enqueued_jobs do
124 post api_messages_path,
125 :params => { :title => "Title",
126 :recipient_id => recipient.id },
127 :headers => sender_auth
131 assert_response :bad_request
135 recipient = create(:user)
136 sender = create(:user)
137 user3 = create(:user)
139 sender_auth = bearer_authorization_header(sender, :scopes => %w[consume_messages])
140 recipient_auth = bearer_authorization_header(recipient, :scopes => %w[consume_messages])
141 user3_auth = bearer_authorization_header(user3, :scopes => %w[send_messages consume_messages])
143 msg = create(:message, :unread, :sender => sender, :recipient => recipient)
145 # fail if not authorized
146 get api_message_path(msg)
147 assert_response :unauthorized
149 # only recipient and sender can read the message
150 get api_message_path(msg), :headers => user3_auth
151 assert_response :forbidden
153 # message does not exist
154 get api_message_path(99999), :headers => user3_auth
155 assert_response :not_found
158 get api_message_path(msg), :headers => recipient_auth
159 assert_equal "application/xml", response.media_type
160 assert_select "message", :count => 1 do
161 assert_select "[id='#{msg.id}']"
162 assert_select "[from_user_id='#{sender.id}']"
163 assert_select "[from_display_name='#{sender.display_name}']"
164 assert_select "[to_user_id='#{recipient.id}']"
165 assert_select "[to_display_name='#{recipient.display_name}']"
166 assert_select "[sent_on]"
167 assert_select "[deleted='#{!msg.to_user_visible}']"
168 assert_select "[message_read='#{msg.message_read}']"
169 assert_select "[body_format='markdown']"
170 assert_select "title", msg.title
171 assert_select "body", msg.body
175 get api_message_path(msg, :format => "json"), :headers => recipient_auth
176 assert_equal "application/json", response.media_type
177 js = ActiveSupport::JSON.decode(@response.body)
180 assert_equal msg.id, jsm["id"]
181 assert_equal sender.id, jsm["from_user_id"]
182 assert_equal sender.display_name, jsm["from_display_name"]
183 assert_equal recipient.id, jsm["to_user_id"]
184 assert_equal recipient.display_name, jsm["to_display_name"]
185 assert_equal msg.title, jsm["title"]
186 assert_not_nil jsm["sent_on"]
187 assert_equal msg.message_read, jsm["message_read"]
188 assert_equal !msg.to_user_visible, jsm["deleted"]
189 assert_equal "markdown", jsm["body_format"]
190 assert_equal msg.body, jsm["body"]
192 get api_message_path(msg), :headers => sender_auth
193 assert_equal "application/xml", response.media_type
194 assert_select "message", :count => 1 do
195 assert_select "[id='#{msg.id}']"
196 assert_select "[from_user_id='#{sender.id}']"
197 assert_select "[from_display_name='#{sender.display_name}']"
198 assert_select "[to_user_id='#{recipient.id}']"
199 assert_select "[to_display_name='#{recipient.display_name}']"
200 assert_select "[sent_on]"
201 assert_select "[deleted='#{!msg.from_user_visible}']"
202 assert_select "[message_read='#{msg.message_read}']", 0
203 assert_select "[body_format='markdown']"
204 assert_select "title", msg.title
205 assert_select "body", msg.body
209 get api_message_path(msg, :format => "json"), :headers => sender_auth
210 assert_equal "application/json", response.media_type
211 js = ActiveSupport::JSON.decode(@response.body)
214 assert_equal msg.id, jsm["id"]
215 assert_equal sender.id, jsm["from_user_id"]
216 assert_equal sender.display_name, jsm["from_display_name"]
217 assert_equal recipient.id, jsm["to_user_id"]
218 assert_equal recipient.display_name, jsm["to_display_name"]
219 assert_equal msg.title, jsm["title"]
220 assert_not_nil jsm["sent_on"]
221 assert_equal !msg.from_user_visible, jsm["deleted"]
222 assert_not jsm.key?("message_read")
223 assert_equal "markdown", jsm["body_format"]
224 assert_equal msg.body, jsm["body"]
227 def test_show_message_to_self_read
229 message = create(:message, :sender => user, :recipient => user)
230 auth_header = bearer_authorization_header user
232 get api_message_path(message), :headers => auth_header
233 assert_response :success
234 assert_equal "application/xml", response.media_type
235 assert_dom "message", :count => 1 do
236 assert_dom "> @message_read", "false"
240 def test_show_message_to_self_read_json
242 message = create(:message, :sender => user, :recipient => user)
243 auth_header = bearer_authorization_header user
245 get api_message_path(message, :format => "json"), :headers => auth_header
246 assert_response :success
247 assert_equal "application/json", response.media_type
248 js = ActiveSupport::JSON.decode(@response.body)
251 assert jsm.key?("message_read")
252 assert_not jsm["message_read"]
255 def test_update_status
256 recipient = create(:user)
257 sender = create(:user)
258 user3 = create(:user)
260 recipient_auth = bearer_authorization_header(recipient, :scopes => %w[consume_messages])
261 user3_auth = bearer_authorization_header(user3, :scopes => %w[send_messages consume_messages])
263 msg = create(:message, :unread, :sender => sender, :recipient => recipient)
265 # attempt to mark message as read by recipient, not authenticated
266 put api_message_path(msg), :params => { :read_status => true }
267 assert_response :unauthorized
269 # attempt to mark message as read by recipient, not allowed
270 put api_message_path(msg), :params => { :read_status => true }, :headers => user3_auth
271 assert_response :forbidden
274 put api_message_path(msg), :headers => recipient_auth
275 assert_response :bad_request
277 # wrong type of parameter
278 put api_message_path(msg),
279 :params => { :read_status => "not a boolean" },
280 :headers => recipient_auth
281 assert_response :bad_request
283 # mark message as read by recipient
284 put api_message_path(msg, :format => "json"),
285 :params => { :read_status => true },
286 :headers => recipient_auth
287 assert_response :success
288 assert_equal "application/json", response.media_type
289 js = ActiveSupport::JSON.decode(@response.body)
292 assert_equal msg.id, jsm["id"]
293 assert_equal sender.id, jsm["from_user_id"]
294 assert_equal sender.display_name, jsm["from_display_name"]
295 assert_equal recipient.id, jsm["to_user_id"]
296 assert_equal recipient.display_name, jsm["to_display_name"]
297 assert_equal msg.title, jsm["title"]
298 assert_not_nil jsm["sent_on"]
299 assert jsm["message_read"]
300 assert_equal !msg.to_user_visible, jsm["deleted"]
301 assert_equal "markdown", jsm["body_format"]
302 assert_equal msg.body, jsm["body"]
304 # mark message as unread by recipient
305 put api_message_path(msg, :format => "json"),
306 :params => { :read_status => false },
307 :headers => recipient_auth
308 assert_response :success
309 assert_equal "application/json", response.media_type
310 js = ActiveSupport::JSON.decode(@response.body)
313 assert_equal msg.id, jsm["id"]
314 assert_equal sender.id, jsm["from_user_id"]
315 assert_equal sender.display_name, jsm["from_display_name"]
316 assert_equal recipient.id, jsm["to_user_id"]
317 assert_equal recipient.display_name, jsm["to_display_name"]
318 assert_equal msg.title, jsm["title"]
319 assert_not_nil jsm["sent_on"]
320 assert_not jsm["message_read"]
321 assert_equal !msg.to_user_visible, jsm["deleted"]
322 assert_equal "markdown", jsm["body_format"]
323 assert_equal msg.body, jsm["body"]
327 recipient = create(:user)
328 recipient_auth = bearer_authorization_header(recipient, :scopes => %w[consume_messages])
330 sender = create(:user)
331 sender_auth = bearer_authorization_header(sender, :scopes => %w[send_messages consume_messages])
333 user3 = create(:user)
334 user3_auth = bearer_authorization_header(user3, :scopes => %w[send_messages consume_messages])
336 msg = create(:message, :read, :sender => sender, :recipient => recipient)
338 # attempt to delete message, not authenticated
339 delete api_message_path(msg)
340 assert_response :unauthorized
342 # attempt to delete message, by user3
343 delete api_message_path(msg), :headers => user3_auth
344 assert_response :forbidden
346 # delete message by recipient
347 delete api_message_path(msg, :format => "json"), :headers => recipient_auth
348 assert_response :success
349 assert_equal "application/json", response.media_type
350 js = ActiveSupport::JSON.decode(@response.body)
353 assert_equal msg.id, jsm["id"]
354 assert_equal sender.id, jsm["from_user_id"]
355 assert_equal sender.display_name, jsm["from_display_name"]
356 assert_equal recipient.id, jsm["to_user_id"]
357 assert_equal recipient.display_name, jsm["to_display_name"]
358 assert_equal msg.title, jsm["title"]
359 assert_not_nil jsm["sent_on"]
360 assert_equal msg.message_read, jsm["message_read"]
361 assert jsm["deleted"]
362 assert_equal "markdown", jsm["body_format"]
363 assert_equal msg.body, jsm["body"]
365 # delete message by sender
366 delete api_message_path(msg, :format => "json"), :headers => sender_auth
367 assert_response :success
368 assert_equal "application/json", response.media_type
369 js = ActiveSupport::JSON.decode(@response.body)
372 assert_equal msg.id, jsm["id"]
373 assert_equal sender.id, jsm["from_user_id"]
374 assert_equal sender.display_name, jsm["from_display_name"]
375 assert_equal recipient.id, jsm["to_user_id"]
376 assert_equal recipient.display_name, jsm["to_display_name"]
377 assert_equal msg.title, jsm["title"]
378 assert_not_nil jsm["sent_on"]
379 assert jsm["deleted"]
380 assert_not jsm.key?("message_read")
381 assert_equal "markdown", jsm["body_format"]
382 assert_equal msg.body, jsm["body"]