Refactor the gravatar email changes to use webmock stubbing
authorAndy Allan <git@gravitystorm.co.uk>
Sun, 30 Oct 2016 10:06:35 +0000 (11:06 +0100)
committerAndy Allan <git@gravitystorm.co.uk>
Sun, 30 Oct 2016 10:06:35 +0000 (11:06 +0100)
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
test/http/gravatar.yml [deleted file]
test/test_helper.rb

index ef4bd0fff040314858032e39fbf286726eb12545..eb57e2689c7c059f5b88742a7c6c3104ca9ebc1d 100644 (file)
@@ -5,7 +5,6 @@ class UserControllerTest < ActionController::TestCase
 
   setup do
     stub_request(:get, "http://api.hostip.info/country.php?ip=0.0.0.0")
 
   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
 
   ##
   end
 
   ##
@@ -397,6 +396,7 @@ class UserControllerTest < ActionController::TestCase
 
   def test_confirm_success_no_token_no_referer
     user = users(:inactive_user)
 
   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
     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)
 
   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
 
     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)
 
   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
 
     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)
 
   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
     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)
 
   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
 
     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)
 
   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
 
     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)
 
   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
     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
   # 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
   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
   end
 
   def test_terms_new_user
diff --git a/test/http/gravatar.yml b/test/http/gravatar.yml
deleted file mode 100644 (file)
index c954bc8..0000000
+++ /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
index 11782e098f7e2f0054c176f1790e4e219cb2c1bc..c45331f2062ce3ea995f571c4fc380ce894cb720 100644 (file)
@@ -168,5 +168,11 @@ module ActiveSupport
 
       yield
     end
 
       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
   end
 end