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