From: Simon Poole Date: Thu, 25 Feb 2016 23:53:04 +0000 (+0100) Subject: Add tests for change of gravatar use depending on email X-Git-Tag: live~3832^2~3 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/90b7101cc3e312a7e25fc6dfd3aec1079bfda4b8 Add tests for change of gravatar use depending on email --- diff --git a/app/controllers/user_controller.rb b/app/controllers/user_controller.rb index 426a96424..a7fcdb26d 100644 --- a/app/controllers/user_controller.rb +++ b/app/controllers/user_controller.rb @@ -808,7 +808,7 @@ class UserController < ApplicationController # code from example https://en.gravatar.com/site/implement/images/ruby/ return if user.image.present? hash = Digest::MD5.hexdigest(user.email.downcase) - url = "https://www.gravatar.com/avatar/#{hash}?d=404" # without d=404 we will always get an image back + url = "https://www.gravatar.com/avatar/#{hash}?d=404" # without d=404 we will always get an image back response = OSM.http_client.get(URI.parse(url)) oldsetting = user.image_use_gravatar user.image_use_gravatar = response.success? diff --git a/test/controllers/user_controller_test.rb b/test/controllers/user_controller_test.rb index 60dde019a..a62131696 100644 --- a/test/controllers/user_controller_test.rb +++ b/test/controllers/user_controller_test.rb @@ -523,7 +523,6 @@ class UserControllerTest < ActionController::TestCase def test_confirm_email_success user = users(:second_public_user) confirm_string = user.tokens.create.token - post :confirm_email, :confirm_string => confirm_string assert_response :redirect assert_redirected_to :action => :account, :display_name => user.display_name @@ -547,6 +546,42 @@ class UserControllerTest < ActionController::TestCase assert_match /confirmation code has expired or does not exist/, flash[:error] end + ## + # test if testing for a gravatar works + # this happens when the email is actually changed + # which is triggered by the confirmation mail + def test_gravatar_auto_enable + with_http_stubs "gravatar" do + # switch to email that has a gravatar + user = users(:first_gravatar_user) + confirm_string = user.tokens.create.token + # precondition gravatar should be turned off + assert !user.image_use_gravatar + post :confirm_email, :confirm_string => confirm_string + assert_response :redirect + assert_redirected_to :action => :account, :display_name => user.display_name + assert_match /Confirmed your change of email address/, flash[:notice] + # gravatar use should now be enabled + assert User.find(users(:first_gravatar_user).id).image_use_gravatar + end + end + + def test_gravatar_auto_disable + with_http_stubs "gravatar" do + # switch to email without a gravatar + user = users(:second_gravatar_user) + confirm_string = user.tokens.create.token + # precondition gravatar should be turned on + assert user.image_use_gravatar + post :confirm_email, :confirm_string => confirm_string + assert_response :redirect + assert_redirected_to :action => :account, :display_name => user.display_name + assert_match /Confirmed your change of email address/, flash[:notice] + # gravatar use should now be disabled + assert !User.find(users(:second_gravatar_user).id).image_use_gravatar + end + end + def test_terms_new_user get :terms, {}, { :new_user => User.new } assert_response :success @@ -1334,7 +1369,7 @@ class UserControllerTest < ActionController::TestCase get :list, :page => 3 assert_response :success assert_template :list - assert_select "table#user_list tr", :count => 23 + assert_select "table#user_list tr", :count => 25 end def test_list_post_confirm diff --git a/test/fixtures/users.yml b/test/fixtures/users.yml index 74365904a..10633e05d 100644 --- a/test/fixtures/users.yml +++ b/test/fixtures/users.yml @@ -304,3 +304,32 @@ github_user: terms_agreed: "2010-01-01 11:22:33" terms_seen: true languages: en + +first_gravatar_user: + id: 23 + email: g1@OpenStreetMap.org + new_email: new_g1@OpenStreetMap.org + status: active + pass_crypt: <%= Digest::MD5.hexdigest('test') %> + creation_time: "2008-05-01 01:23:45" + display_name: gravatar1 + data_public: true + description: some test description + terms_agreed: "2010-01-01 11:22:33" + terms_seen: true + creation_ip: "1.2.3.4" + +second_gravatar_user: + id: 24 + email: g2@OpenStreetMap.org + new_email: new_g2@OpenStreetMap.org + image_use_gravatar: true + status: active + pass_crypt: <%= Digest::MD5.hexdigest('test') %> + creation_time: "2008-05-01 01:23:45" + display_name: gravatar2 + data_public: true + description: some test description + terms_agreed: "2010-01-01 11:22:33" + terms_seen: true + creation_ip: "1.2.3.4" diff --git a/test/http/gravatar.yml b/test/http/gravatar.yml new file mode 100644 index 000000000..c954bc822 --- /dev/null +++ b/test/http/gravatar.yml @@ -0,0 +1,7 @@ +/avatar/842bc90353fac655450e62223e4e105d?d=404 : + code: 404 + body: Ignored, test for new_g2@openstreetmap.org + +/avatar/d2e95ef0ac6933916bf42ff1ee4eca4b?d=404 : + code: 200 + body: Ignored, test for new_g1@openstreetmap.org diff --git a/test/models/user_test.rb b/test/models/user_test.rb index 1c58acc61..f9d94cc17 100644 --- a/test/models/user_test.rb +++ b/test/models/user_test.rb @@ -163,7 +163,7 @@ class UserTest < ActiveSupport::TestCase end def test_visible - assert_equal 20, User.visible.count + assert_equal 22, User.visible.count assert_raise ActiveRecord::RecordNotFound do User.visible.find(users(:suspended_user).id) end @@ -173,7 +173,7 @@ class UserTest < ActiveSupport::TestCase end def test_active - assert_equal 19, User.active.count + assert_equal 21, User.active.count assert_raise ActiveRecord::RecordNotFound do User.active.find(users(:inactive_user).id) end @@ -186,7 +186,7 @@ class UserTest < ActiveSupport::TestCase end def test_identifiable - assert_equal 21, User.identifiable.count + assert_equal 23, User.identifiable.count assert_raise ActiveRecord::RecordNotFound do User.identifiable.find(users(:normal_user).id) end