From 4d73706ff349e043ca62612e977ae600e8cae4ad Mon Sep 17 00:00:00 2001 From: Andy Allan Date: Sun, 30 Oct 2016 11:06:35 +0100 Subject: [PATCH] Refactor the gravatar email changes to use webmock stubbing The main reason for doing this is to make the tests easier to read, rather than having to look up both the gravatar fixture, and then correlate that with the users fixture. Putting the expected response code in the tests is much more explicit. --- test/controllers/user_controller_test.rb | 58 +++++++++++++----------- test/http/gravatar.yml | 7 --- test/test_helper.rb | 6 +++ 3 files changed, 37 insertions(+), 34 deletions(-) delete mode 100644 test/http/gravatar.yml diff --git a/test/controllers/user_controller_test.rb b/test/controllers/user_controller_test.rb index ef4bd0fff..eb57e2689 100644 --- a/test/controllers/user_controller_test.rb +++ b/test/controllers/user_controller_test.rb @@ -5,7 +5,6 @@ class UserControllerTest < ActionController::TestCase setup do stub_request(:get, "http://api.hostip.info/country.php?ip=0.0.0.0") - stub_request(:get, /.*gravatar.com.*d=404/).to_return(:status => 404) end ## @@ -397,6 +396,7 @@ class UserControllerTest < ActionController::TestCase def test_confirm_success_no_token_no_referer user = users(:inactive_user) + stub_gravatar_request(user.email) confirm_string = user.tokens.create.token @request.cookies["_osm_session"] = user.display_name @@ -407,6 +407,7 @@ class UserControllerTest < ActionController::TestCase def test_confirm_success_good_token_no_referer user = users(:inactive_user) + stub_gravatar_request(user.email) confirm_string = user.tokens.create.token token = user.tokens.create.token @@ -417,6 +418,7 @@ class UserControllerTest < ActionController::TestCase def test_confirm_success_bad_token_no_referer user = users(:inactive_user) + stub_gravatar_request(user.email) confirm_string = user.tokens.create.token token = users(:normal_user).tokens.create.token @@ -428,6 +430,7 @@ class UserControllerTest < ActionController::TestCase def test_confirm_success_no_token_with_referer user = users(:inactive_user) + stub_gravatar_request(user.email) confirm_string = user.tokens.create(:referer => diary_new_path).token @request.cookies["_osm_session"] = user.display_name @@ -438,6 +441,7 @@ class UserControllerTest < ActionController::TestCase def test_confirm_success_good_token_with_referer user = users(:inactive_user) + stub_gravatar_request(user.email) confirm_string = user.tokens.create(:referer => diary_new_path).token token = user.tokens.create.token @@ -448,6 +452,7 @@ class UserControllerTest < ActionController::TestCase def test_confirm_success_bad_token_with_referer user = users(:inactive_user) + stub_gravatar_request(user.email) confirm_string = user.tokens.create(:referer => diary_new_path).token token = users(:normal_user).tokens.create.token @@ -526,6 +531,7 @@ class UserControllerTest < ActionController::TestCase def test_confirm_email_success user = users(:second_public_user) + stub_gravatar_request(user.new_email) confirm_string = user.tokens.create.token post :confirm_email, :confirm_string => confirm_string @@ -556,35 +562,33 @@ class UserControllerTest < ActionController::TestCase # 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 + # switch to email that has a gravatar + user = users(:first_gravatar_user) + stub_gravatar_request(user.new_email, 200) + 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 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 + # switch to email without a gravatar + user = users(:second_gravatar_user) + stub_gravatar_request(user.new_email, 404) + 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 def test_terms_new_user diff --git a/test/http/gravatar.yml b/test/http/gravatar.yml deleted file mode 100644 index c954bc822..000000000 --- a/test/http/gravatar.yml +++ /dev/null @@ -1,7 +0,0 @@ -/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/test_helper.rb b/test/test_helper.rb index 11782e098..c45331f20 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -168,5 +168,11 @@ module ActiveSupport yield end + + def stub_gravatar_request(email, status = 200, body = nil) + hash = Digest::MD5.hexdigest(email.downcase) + url = "https://www.gravatar.com/avatar/#{hash}?d=404" + stub_request(:get, url).and_return(:status => status, :body => body) + end end end -- 2.43.2