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