]> git.openstreetmap.org Git - rails.git/blob - test/controllers/api/messages/inboxes_controller_test.rb
Add frozen_string_literal comments to ruby files
[rails.git] / test / controllers / api / messages / inboxes_controller_test.rb
1 # frozen_string_literal: true
2
3 require "test_helper"
4
5 module Api
6   module Messages
7     class InboxesControllerTest < ActionDispatch::IntegrationTest
8       ##
9       # test all routes which lead to this controller
10       def test_routes
11         assert_routing(
12           { :path => "/api/0.6/user/messages/inbox", :method => :get },
13           { :controller => "api/messages/inboxes", :action => "show" }
14         )
15         assert_routing(
16           { :path => "/api/0.6/user/messages/inbox.xml", :method => :get },
17           { :controller => "api/messages/inboxes", :action => "show", :format => "xml" }
18         )
19         assert_routing(
20           { :path => "/api/0.6/user/messages/inbox.json", :method => :get },
21           { :controller => "api/messages/inboxes", :action => "show", :format => "json" }
22         )
23       end
24
25       def test_show
26         user1 = create(:user)
27         user1_auth = bearer_authorization_header(user1, :scopes => %w[send_messages consume_messages])
28
29         user2 = create(:user)
30         user2_auth = bearer_authorization_header(user2, :scopes => %w[send_messages consume_messages])
31
32         user3 = create(:user)
33         user3_auth = bearer_authorization_header(user3, :scopes => %w[send_messages consume_messages])
34
35         # create some messages between users
36         # user | inbox | outbox
37         #   1  |   0   |   3
38         #   2  |   2   |   1
39         #   3  |   2   |   0
40         create(:message, :unread, :sender => user1, :recipient => user2)
41         create(:message, :unread, :sender => user1, :recipient => user2)
42         create(:message, :unread, :sender => user1, :recipient => user3)
43         create(:message, :unread, :sender => user2, :recipient => user3)
44
45         # only authorized users
46         get api_messages_inbox_path
47         assert_response :unauthorized
48
49         # no messages in user1.inbox
50         get api_messages_inbox_path, :headers => user1_auth
51         assert_response :success
52         assert_equal "application/xml", response.media_type
53         assert_select "message", :count => 0
54
55         # 2 messages in user2.inbox
56         get api_messages_inbox_path, :headers => user2_auth
57         assert_response :success
58         assert_equal "application/xml", response.media_type
59         assert_select "message", :count => 2 do
60           assert_select "[from_user_id]"
61           assert_select "[from_display_name]"
62           assert_select "[to_user_id='#{user2.id}']"
63           assert_select "[to_display_name='#{user2.display_name}']"
64           assert_select "[sent_on]"
65           assert_select "[message_read='false']"
66           assert_select "[deleted='false']"
67           assert_select "[body_format]"
68           assert_select "body", false
69           assert_select "title"
70         end
71
72         # 2 messages in user3.inbox
73         get api_messages_inbox_path, :headers => user3_auth
74         assert_response :success
75         assert_equal "application/xml", response.media_type
76         assert_select "message", :count => 2 do
77           assert_select "[from_user_id]"
78           assert_select "[from_display_name]"
79           assert_select "[to_user_id='#{user3.id}']"
80           assert_select "[to_display_name='#{user3.display_name}']"
81           assert_select "[sent_on]"
82           assert_select "[message_read='false']"
83           assert_select "[deleted='false']"
84           assert_select "[body_format]"
85           assert_select "body", false
86           assert_select "title"
87         end
88       end
89
90       def test_show_paged_asc
91         recipient = create(:user)
92         recipient_auth = bearer_authorization_header(recipient, :scopes => %w[consume_messages])
93
94         sender = create(:user)
95
96         create_list(:message, 100, :unread, :sender => sender, :recipient => recipient)
97
98         msgs_read = {}
99         params = { :order => "oldest", :limit => 20 }
100         10.times do
101           get api_messages_inbox_path(:format => "json"),
102               :params => params,
103               :headers => recipient_auth
104           assert_response :success
105           assert_equal "application/json", response.media_type
106           js = ActiveSupport::JSON.decode(@response.body)
107           jsm = js["messages"]
108           assert_operator jsm.count, :<=, 20
109
110           break if jsm.nil? || jsm.none?
111
112           assert_operator(jsm[0]["id"], :>=, params[:from_id]) unless params[:from_id].nil?
113           # ensure ascending order
114           (0..(jsm.count - 1)).each do |i|
115             assert_operator(jsm[i]["id"], :<, jsm[i + 1]["id"]) unless i == jsm.count - 1
116             msgs_read[jsm[i]["id"]] = jsm[i]
117           end
118           params[:from_id] = jsm[jsm.count - 1]["id"]
119         end
120         assert_equal 100, msgs_read.count
121       end
122
123       def test_show_paged_desc
124         recipient = create(:user)
125         recipient_auth = bearer_authorization_header(recipient, :scopes => %w[consume_messages])
126
127         sender = create(:user)
128
129         create_list(:message, 100, :unread, :sender => sender, :recipient => recipient)
130
131         real_max_id = -1
132         msgs_read = {}
133         params = { :order => "newest", :limit => 20 }
134         10.times do
135           get api_messages_inbox_path(:format => "json"),
136               :params => params,
137               :headers => recipient_auth
138           assert_response :success
139           assert_equal "application/json", response.media_type
140           js = ActiveSupport::JSON.decode(@response.body)
141           jsm = js["messages"]
142           assert_operator jsm.count, :<=, 20
143
144           break if jsm.nil? || jsm.none?
145
146           if params[:from_id].nil?
147             real_max_id = jsm[0]["id"]
148           else
149             assert_operator jsm[0]["id"], :<=, params[:from_id]
150           end
151           # ensure descending order
152           (0..(jsm.count - 1)).each do |i|
153             assert_operator(jsm[i]["id"], :>, jsm[i + 1]["id"]) unless i == jsm.count - 1
154             msgs_read[jsm[i]["id"]] = jsm[i]
155           end
156           params[:from_id] = jsm[jsm.count - 1]["id"]
157         end
158         assert_equal 100, msgs_read.count
159         assert_not_equal(-1, real_max_id)
160
161         # invoke without min_id/max_id parameters, verify that we get the last batch
162         get api_messages_inbox_path(:format => "json"), :params => { :limit => 20 }, :headers => recipient_auth
163         assert_response :success
164         assert_equal "application/json", response.media_type
165         js = ActiveSupport::JSON.decode(@response.body)
166         jsm = js["messages"]
167         assert_not_nil jsm
168         assert_equal real_max_id, jsm[0]["id"]
169       end
170     end
171   end
172 end