]> git.openstreetmap.org Git - rails.git/blob - test/controllers/changeset_comments/feeds_controller_test.rb
Switch vagrant to use Debian 12
[rails.git] / test / controllers / changeset_comments / feeds_controller_test.rb
1 require "test_helper"
2
3 module ChangesetComments
4   class FeedsControllerTest < ActionDispatch::IntegrationTest
5     ##
6     # test all routes which lead to this controller
7     def test_routes
8       assert_routing(
9         { :path => "/changeset/1/comments/feed", :method => :get },
10         { :controller => "changeset_comments/feeds", :action => "show", :changeset_id => "1", :format => "rss" }
11       )
12       assert_routing(
13         { :path => "/history/comments/feed", :method => :get },
14         { :controller => "changeset_comments/feeds", :action => "show", :format => "rss" }
15       )
16     end
17
18     ##
19     # test comments feed
20     def test_feed
21       changeset = create(:changeset, :closed)
22       create_list(:changeset_comment, 3, :changeset => changeset)
23
24       get changesets_comments_feed_path(:format => "rss")
25       assert_response :success
26       assert_equal "application/rss+xml", @response.media_type
27       assert_select "rss", :count => 1 do
28         assert_select "channel", :count => 1 do
29           assert_select "item", :count => 3
30         end
31       end
32
33       get changesets_comments_feed_path(:format => "rss", :limit => 2)
34       assert_response :success
35       assert_equal "application/rss+xml", @response.media_type
36       assert_select "rss", :count => 1 do
37         assert_select "channel", :count => 1 do
38           assert_select "item", :count => 2
39         end
40       end
41
42       get changeset_comments_feed_path(changeset, :format => "rss")
43       assert_response :success
44       assert_equal "application/rss+xml", @response.media_type
45       last_comment_id = -1
46       assert_select "rss", :count => 1 do
47         assert_select "channel", :count => 1 do
48           assert_select "item", :count => 3 do |items|
49             items.each do |item|
50               assert_select item, "link", :count => 1 do |link|
51                 match = assert_match(/^#{changeset_url changeset}#c(\d+)$/, link.text)
52                 comment_id = match[1].to_i
53                 assert_operator comment_id, "<", last_comment_id if last_comment_id != -1
54                 last_comment_id = comment_id
55               end
56             end
57           end
58         end
59       end
60     end
61
62     ##
63     # test comments feed
64     def test_feed_bad_limit
65       get changesets_comments_feed_path(:format => "rss", :limit => 0)
66       assert_response :bad_request
67
68       get changesets_comments_feed_path(:format => "rss", :limit => 100001)
69       assert_response :bad_request
70     end
71
72     def test_feed_timeout
73       with_settings(:web_timeout => -1) do
74         get changesets_comments_feed_path
75       end
76       assert_response :error
77       assert_equal "application/rss+xml; charset=utf-8", @response.header["Content-Type"]
78       assert_dom "rss>channel>title", :text => "OpenStreetMap changeset discussion"
79       assert_dom "rss>channel>description", :text => /the list of changeset comments you requested took too long to retrieve/
80     end
81
82     def test_feed_changeset_timeout
83       with_settings(:web_timeout => -1) do
84         get changeset_comments_feed_path(123)
85       end
86       assert_response :error
87       assert_equal "application/rss+xml; charset=utf-8", @response.header["Content-Type"]
88       assert_dom "rss>channel>title", :text => "OpenStreetMap changeset #123 discussion"
89       assert_dom "rss>channel>description", :text => /the list of changeset comments you requested took too long to retrieve/
90     end
91   end
92 end