]> git.openstreetmap.org Git - rails.git/commitdiff
Merge remote-tracking branch 'upstream/pull/5495'
authorTom Hughes <tom@compton.nu>
Tue, 14 Jan 2025 19:05:09 +0000 (19:05 +0000)
committerTom Hughes <tom@compton.nu>
Tue, 14 Jan 2025 19:05:09 +0000 (19:05 +0000)
test/system/create_note_test.rb

index 5688ec37601dc28ad3d6d3913142317ac8291c3c..dd13a286f55e3061be1c51bbba764fcc24628ce5 100644 (file)
@@ -1,6 +1,19 @@
 require "application_system_test_case"
 
 class CreateNoteTest < ApplicationSystemTestCase
+  include ActionMailer::TestHelper
+
+  def setup
+    OmniAuth.config.test_mode = true
+
+    stub_request(:get, /.*gravatar.com.*d=404/).to_return(:status => 404)
+  end
+
+  def teardown
+    OmniAuth.config.mock_auth[:google] = nil
+    OmniAuth.config.test_mode = false
+  end
+
   test "can create note" do
     visit new_note_path(:anchor => "map=18/0/0")
 
@@ -78,4 +91,104 @@ class CreateNoteTest < ApplicationSystemTestCase
       end
     end
   end
+
+  test "encouragement to contribute appears after 10 created notes and disappears after login" do
+    check_encouragement_while_creating_notes(10)
+
+    sign_in_as(create(:user))
+
+    check_no_encouragement_while_logging_out
+  end
+
+  test "encouragement to contribute appears after 10 created notes and disappears after email signup" do
+    check_encouragement_while_creating_notes(10)
+
+    sign_up_with_email
+
+    check_no_encouragement_while_logging_out
+  end
+
+  test "encouragement to contribute appears after 10 created notes and disappears after google signup" do
+    check_encouragement_while_creating_notes(10)
+
+    sign_up_with_google
+
+    check_no_encouragement_while_logging_out
+  end
+
+  private
+
+  def check_encouragement_while_creating_notes(encouragement_threshold)
+    encouragement_threshold.times do |n|
+      visit new_note_path(:anchor => "map=16/0/#{0.001 * n}")
+
+      within_sidebar do
+        assert_no_content(/already posted at least \d+ anonymous note/)
+
+        fill_in "text", :with => "new note ##{n + 1}"
+        click_on "Add Note"
+
+        assert_content "new note ##{n + 1}"
+      end
+    end
+
+    visit new_note_path(:anchor => "map=16/0/#{0.001 * encouragement_threshold}")
+
+    within_sidebar do
+      assert_content(/already posted at least #{encouragement_threshold} anonymous note/)
+    end
+  end
+
+  def check_no_encouragement_while_logging_out
+    visit new_note_path(:anchor => "map=16/0/0")
+
+    within_sidebar do
+      assert_no_content(/already posted at least \d+ anonymous note/)
+    end
+
+    sign_out
+    visit new_note_path(:anchor => "map=16/0/0")
+
+    within_sidebar do
+      assert_no_content(/already posted at least \d+ anonymous note/)
+    end
+  end
+
+  def sign_up_with_email
+    click_on "Sign Up"
+
+    within_content_body do
+      fill_in "Email", :with => "new_user_account@example.com"
+      fill_in "Display Name", :with => "new_user_account"
+      fill_in "Password", :with => "new_user_password"
+      fill_in "Confirm Password", :with => "new_user_password"
+
+      assert_emails 1 do
+        click_on "Sign Up"
+      end
+    end
+
+    email = ActionMailer::Base.deliveries.first
+    email_text = email.parts[0].parts[0].decoded
+    match = %r{/user/new_user_account/confirm\?confirm_string=\S+}.match(email_text)
+    assert_not_nil match
+
+    visit match[0]
+
+    assert_content "Welcome!"
+  end
+
+  def sign_up_with_google
+    OmniAuth.config.add_mock(:google,
+                             :uid => "123454321",
+                             :extra => { :id_info => { :openid_id => "http://localhost:1123/new.tester" } },
+                             :info => { :email => "google_user_account@example.com", :name => "google_user_account" })
+
+    click_on "Sign Up"
+
+    within_content_body do
+      click_on "Log in with Google"
+      click_on "Sign Up"
+    end
+  end
 end