]> git.openstreetmap.org Git - rails.git/blob - test/system/history_test.rb
Merge remote-tracking branch 'upstream/pull/5201'
[rails.git] / test / system / history_test.rb
1 require "application_system_test_case"
2
3 class HistoryTest < ApplicationSystemTestCase
4   PAGE_SIZE = 20
5
6   test "atom link on user's history is not modified" do
7     user = create(:user)
8     create(:changeset, :user => user, :num_changes => 1) do |changeset|
9       create(:changeset_tag, :changeset => changeset, :k => "comment", :v => "first-changeset-in-history")
10     end
11
12     visit "#{user_path(user)}/history"
13
14     within_sidebar do
15       assert_text "first-changeset-in-history"
16     end
17
18     assert_css "link[type='application/atom+xml'][href$='#{user_path(user)}/history/feed']", :visible => false
19   end
20
21   test "have only one list element on user's changesets page" do
22     user = create(:user)
23     create_visible_changeset(user, "first-changeset-in-history")
24     create_visible_changeset(user, "bottom-changeset-in-batch-2")
25     (PAGE_SIZE - 1).times do
26       create_visible_changeset(user, "next-changeset")
27     end
28     create_visible_changeset(user, "bottom-changeset-in-batch-1")
29     (PAGE_SIZE - 1).times do
30       create_visible_changeset(user, "next-changeset")
31     end
32
33     assert_nothing_raised do
34       visit "#{user_path(user)}/history"
35
36       within_sidebar do
37         assert_text "bottom-changeset-in-batch-1"
38         assert_no_text "bottom-changeset-in-batch-2"
39         assert_no_text "first-changeset-in-history"
40         assert_selector "ol", :count => 1
41         assert_selector "li[data-changeset]", :count => PAGE_SIZE
42
43         click_on "Older Changesets"
44
45         assert_text "bottom-changeset-in-batch-1"
46         assert_text "bottom-changeset-in-batch-2"
47         assert_no_text "first-changeset-in-history"
48         assert_selector "ol", :count => 1
49         assert_selector "li[data-changeset]", :count => 2 * PAGE_SIZE
50
51         click_on "Older Changesets"
52
53         assert_text "bottom-changeset-in-batch-1"
54         assert_text "bottom-changeset-in-batch-2"
55         assert_text "first-changeset-in-history"
56         assert_selector "ol", :count => 1
57         assert_selector "li[data-changeset]", :count => (2 * PAGE_SIZE) + 1
58       end
59     end
60   end
61
62   test "user history starts before specified changeset" do
63     user = create(:user)
64     changeset1 = create_visible_changeset(user, "1st-changeset-in-history")
65     changeset2 = create_visible_changeset(user, "2nd-changeset-in-history")
66     changeset3 = create(:changeset)
67
68     visit "#{user_path user}/history?before=#{changeset1.id}"
69
70     within_sidebar do
71       assert_no_link "1st-changeset-in-history"
72       assert_no_link "2nd-changeset-in-history"
73     end
74
75     visit "#{user_path user}/history?before=#{changeset2.id}"
76
77     within_sidebar do
78       assert_link "1st-changeset-in-history"
79       assert_no_link "2nd-changeset-in-history"
80     end
81
82     visit "#{user_path user}/history?before=#{changeset3.id}"
83
84     within_sidebar do
85       assert_link "1st-changeset-in-history"
86       assert_link "2nd-changeset-in-history"
87     end
88   end
89
90   test "user history starts after specified changeset" do
91     user = create(:user)
92     changeset0 = create(:changeset)
93     changeset1 = create_visible_changeset(user, "1st-changeset-in-history")
94     changeset2 = create_visible_changeset(user, "2nd-changeset-in-history")
95
96     visit "#{user_path user}/history?after=#{changeset2.id}"
97
98     within_sidebar do
99       assert_no_link "1st-changeset-in-history"
100       assert_no_link "2nd-changeset-in-history"
101     end
102
103     visit "#{user_path user}/history?after=#{changeset1.id}"
104
105     within_sidebar do
106       assert_no_link "1st-changeset-in-history"
107       assert_link "2nd-changeset-in-history"
108     end
109
110     visit "#{user_path user}/history?after=#{changeset0.id}"
111
112     within_sidebar do
113       assert_link "1st-changeset-in-history"
114       assert_link "2nd-changeset-in-history"
115     end
116   end
117
118   test "update sidebar when before param is included and map is moved" do
119     changeset1 = create(:changeset, :num_changes => 1, :bbox => [5, 5, 5, 5])
120     create(:changeset_tag, :changeset => changeset1, :k => "comment", :v => "changeset-at-fives")
121     changeset2 = create(:changeset, :num_changes => 1, :bbox => [5.01, 5.01, 5.01, 5.01])
122     create(:changeset_tag, :changeset => changeset2, :k => "comment", :v => "changeset-close-to-fives")
123     changeset3 = create(:changeset)
124
125     visit "/history?before=#{changeset3.id}#map=17/5/5"
126
127     within_sidebar do
128       assert_link "changeset-at-fives"
129       assert_no_link "changeset-close-to-fives"
130     end
131
132     within "#map" do
133       find_link("Zoom Out").click(:shift)
134     end
135
136     within_sidebar do
137       assert_link "changeset-at-fives"
138       assert_link "changeset-close-to-fives"
139     end
140
141     assert_current_path history_path
142   end
143
144   test "all changesets are listed when fully zoomed out" do
145     user = create(:user)
146     [-177, -90, 0, 90, 177].each do |lon|
147       create(:changeset, :user => user, :num_changes => 1, :bbox => [lon - 1, 0, lon + 1, 1]) do |changeset|
148         create(:changeset_tag, :changeset => changeset, :k => "comment", :v => "changeset-at-lon(#{lon})")
149       end
150     end
151
152     visit history_path(:anchor => "map=0/0/0")
153
154     within_sidebar do
155       assert_link "changeset-at-lon(-177)", :count => 1
156       assert_link "changeset-at-lon(-90)", :count => 1
157       assert_link "changeset-at-lon(0)", :count => 1
158       assert_link "changeset-at-lon(90)", :count => 1
159       assert_link "changeset-at-lon(177)", :count => 1
160     end
161   end
162
163   test "changesets at both sides of antimeridian are listed" do
164     user = create(:user)
165     PAGE_SIZE.times do
166       create(:changeset, :user => user, :num_changes => 1, :bbox => [176, 0, 178, 1]) do |changeset|
167         create(:changeset_tag, :changeset => changeset, :k => "comment", :v => "West-of-antimeridian-changeset")
168       end
169       create(:changeset, :user => user, :num_changes => 1, :bbox => [-178, 0, -176, 1]) do |changeset|
170         create(:changeset_tag, :changeset => changeset, :k => "comment", :v => "East-of-antimeridian-changeset")
171       end
172     end
173
174     visit history_path(:anchor => "map=6/0/179")
175
176     within_sidebar do
177       assert_link "West-of-antimeridian-changeset", :count => PAGE_SIZE / 2
178       assert_link "East-of-antimeridian-changeset", :count => PAGE_SIZE / 2
179
180       click_on "Older Changesets"
181
182       assert_link "West-of-antimeridian-changeset", :count => PAGE_SIZE
183       assert_link "East-of-antimeridian-changeset", :count => PAGE_SIZE
184     end
185   end
186
187   test "changeset bbox is shown on the map and clickable" do
188     user = create(:user)
189     changeset = create(:changeset, :user => user, :num_changes => 1, :bbox => [50, 50, 51, 51])
190     create(:changeset_tag, :changeset => changeset, :k => "comment", :v => "Clickable changeset")
191
192     visit "#{user_path(user)}/history"
193
194     within_sidebar do
195       assert_link "Clickable changeset"
196     end
197
198     find_by_id("map").click
199
200     assert_current_path changeset_path(changeset)
201   end
202
203   private
204
205   def create_visible_changeset(user, comment)
206     create(:changeset, :user => user, :num_changes => 1) do |changeset|
207       create(:changeset_tag, :changeset => changeset, :k => "comment", :v => comment)
208     end
209   end
210 end