]> git.openstreetmap.org Git - rails.git/blob - test/system/create_note_test.rb
Test that anonymous note encouragement disappears after signup
[rails.git] / test / system / create_note_test.rb
1 require "application_system_test_case"
2
3 class CreateNoteTest < ApplicationSystemTestCase
4   include ActionMailer::TestHelper
5
6   def setup
7     stub_request(:get, /.*gravatar.com.*d=404/).to_return(:status => 404)
8   end
9
10   test "can create note" do
11     visit new_note_path(:anchor => "map=18/0/0")
12
13     within_sidebar do
14       assert_button "Add Note", :disabled => true
15
16       fill_in "text", :with => "Some newly added note description"
17       click_on "Add Note"
18
19       assert_content "Unresolved note ##{Note.last.id}"
20       assert_content "Some newly added note description"
21     end
22   end
23
24   test "cannot create new note when zoomed out" do
25     visit new_note_path(:anchor => "map=12/0/0")
26
27     within_sidebar do
28       assert_no_content "Zoom in to add a note"
29       assert_button "Add Note", :disabled => true
30
31       fill_in "text", :with => "Some newly added note description"
32
33       assert_no_content "Zoom in to add a note"
34       assert_button "Add Note", :disabled => false
35     end
36
37     find(".control-button.zoomout").click
38
39     within_sidebar do
40       assert_content "Zoom in to add a note"
41       assert_button "Add Note", :disabled => true
42     end
43
44     find(".control-button.zoomin").click
45
46     within_sidebar do
47       assert_no_content "Zoom in to add a note"
48       assert_button "Add Note", :disabled => false
49
50       click_on "Add Note"
51
52       assert_content "Unresolved note ##{Note.last.id}"
53       assert_content "Some newly added note description"
54     end
55   end
56
57   test "can open new note page when zoomed out" do
58     visit new_note_path(:anchor => "map=11/0/0")
59
60     within_sidebar do
61       assert_content "Zoom in to add a note"
62       assert_button "Add Note", :disabled => true
63
64       fill_in "text", :with => "Some newly added note description"
65
66       assert_content "Zoom in to add a note"
67       assert_button "Add Note", :disabled => true
68     end
69
70     find(".control-button.zoomin").click
71
72     within_sidebar do
73       assert_no_content "Zoom in to add a note"
74       assert_button "Add Note", :disabled => false
75     end
76   end
77
78   test "cannot create note when api is readonly" do
79     with_settings(:status => "api_readonly") do
80       visit new_note_path(:anchor => "map=18/0/0")
81
82       within_sidebar do
83         assert_no_button "Add Note", :disabled => true
84       end
85     end
86   end
87
88   test "encouragement to contribute appears after 10 created notes and disappears after login" do
89     check_encouragement_while_creating_notes(10)
90
91     sign_in_as(create(:user))
92
93     check_no_encouragement_while_logging_out
94   end
95
96   test "encouragement to contribute appears after 10 created notes and disappears after signup" do
97     check_encouragement_while_creating_notes(10)
98
99     sign_up_with_email
100
101     check_no_encouragement_while_logging_out
102   end
103
104   private
105
106   def check_encouragement_while_creating_notes(encouragement_threshold)
107     encouragement_threshold.times do |n|
108       visit new_note_path(:anchor => "map=16/0/#{0.001 * n}")
109
110       within_sidebar do
111         assert_no_content(/already posted at least \d+ anonymous note/)
112
113         fill_in "text", :with => "new note ##{n + 1}"
114         click_on "Add Note"
115
116         assert_content "new note ##{n + 1}"
117       end
118     end
119
120     visit new_note_path(:anchor => "map=16/0/#{0.001 * encouragement_threshold}")
121
122     within_sidebar do
123       assert_content(/already posted at least #{encouragement_threshold} anonymous note/)
124     end
125   end
126
127   def check_no_encouragement_while_logging_out
128     visit new_note_path(:anchor => "map=16/0/0")
129
130     within_sidebar do
131       assert_no_content(/already posted at least \d+ anonymous note/)
132     end
133
134     sign_out
135     visit new_note_path(:anchor => "map=16/0/0")
136
137     within_sidebar do
138       assert_no_content(/already posted at least \d+ anonymous note/)
139     end
140   end
141
142   def sign_up_with_email
143     click_on "Sign Up"
144
145     within_content_body do
146       fill_in "Email", :with => "new_user_account@example.com"
147       fill_in "Display Name", :with => "new_user_account"
148       fill_in "Password", :with => "new_user_password"
149       fill_in "Confirm Password", :with => "new_user_password"
150
151       assert_emails 1 do
152         click_on "Sign Up"
153       end
154     end
155
156     email = ActionMailer::Base.deliveries.first
157     email_text = email.parts[0].parts[0].decoded
158     match = %r{/user/new_user_account/confirm\?confirm_string=\S+}.match(email_text)
159     assert_not_nil match
160
161     visit match[0]
162
163     assert_content "Welcome!"
164   end
165 end