Add tests for change of gravatar use depending on email
authorSimon Poole <simon@poole.ch>
Thu, 25 Feb 2016 23:53:04 +0000 (00:53 +0100)
committerSimon Poole <simon@poole.ch>
Tue, 16 Aug 2016 20:09:11 +0000 (22:09 +0200)
app/controllers/user_controller.rb
test/controllers/user_controller_test.rb
test/fixtures/users.yml
test/http/gravatar.yml [new file with mode: 0644]
test/models/user_test.rb

index 426a9642472256f079c846ae45d252213d5cd09c..a7fcdb26d802b8d5ffb50f086ccb29289b7b3f2c 100644 (file)
@@ -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?
index 60dde019ab3164566f9dd2ae62704a8885bc8e15..a621316965f8dc246a9a75c682d89b121359a751 100644 (file)
@@ -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
index 74365904a758270feb0aea8f1f79a75ba8b680f0..10633e05d267e1a8634653e42cfa7fe40867352d 100644 (file)
@@ -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 (file)
index 0000000..c954bc8
--- /dev/null
@@ -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
index 1c58acc611484d732fe4204408d2ffae73c3ea97..f9d94cc17cf1fabc9e386252c445bcd0bbe53ab4 100644 (file)
@@ -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