]> git.openstreetmap.org Git - rails.git/blob - test/system/changeset_elements_test.rb
Enable dark mode attribution font color
[rails.git] / test / system / changeset_elements_test.rb
1 require "application_system_test_case"
2
3 class ChangesetElementsTest < ApplicationSystemTestCase
4   test "can navigate between element subpages without losing comment input" do
5     element_page_size = 20
6     changeset = create(:changeset, :closed)
7     ways = create_list(:way, element_page_size + 1, :with_history, :changeset => changeset)
8     way_paths = ways.map { |way| way_path(way) }
9     nodes = create_list(:node, element_page_size + 1, :with_history, :changeset => changeset)
10     node_paths = nodes.map { |node| node_path(node) }
11
12     sign_in_as(create(:user))
13     visit changeset_path(changeset)
14
15     within_sidebar do
16       next_page_way_path = assert_one_missing_link way_paths
17       assert_no_link "Ways (1-20 of 21)"
18       assert_link "Ways (21-21 of 21)"
19
20       assert_one_missing_link node_paths
21       assert_no_link "Nodes (1-20 of 21)"
22       assert_link "Nodes (21-21 of 21)"
23
24       fill_in "text", :with => "Comment text we don't want to lose"
25
26       click_on "Ways (21-21 of 21)"
27
28       assert_one_present_link way_paths, next_page_way_path
29       assert_link "Ways (1-20 of 21)"
30       assert_no_link "Ways (21-21 of 21)"
31
32       next_page_node_path = assert_one_missing_link node_paths
33       assert_no_link "Nodes (1-20 of 21)"
34       assert_link "Nodes (21-21 of 21)"
35
36       assert_field "text", :with => "Comment text we don't want to lose"
37
38       click_on "Nodes (21-21 of 21)"
39
40       assert_one_present_link way_paths, next_page_way_path
41       assert_link "Ways (1-20 of 21)"
42       assert_no_link "Ways (21-21 of 21)"
43
44       assert_one_present_link node_paths, next_page_node_path
45       assert_link "Nodes (1-20 of 21)"
46       assert_no_link "Nodes (21-21 of 21)"
47
48       assert_field "text", :with => "Comment text we don't want to lose"
49     end
50   end
51
52   private
53
54   def assert_one_missing_link(hrefs)
55     missing_href = nil
56     hrefs.each do |href|
57       missing = true
58       assert_link :href => href, :minimum => 0, :maximum => 1 do
59         missing = false
60       end
61       if missing
62         assert_nil missing_href, "unexpected extra missing link '#{href}'"
63         missing_href = href
64       end
65     end
66     assert_not_nil missing_href, "expected one link missing but all are present"
67     missing_href
68   end
69
70   def assert_one_present_link(hrefs, present_href)
71     hrefs.each do |href|
72       assert_link :href => href, :count => (href == present_href ? 1 : 0)
73     end
74   end
75 end