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