From 82b78ec6ba9fec270475d6b48068e2d73db8df49 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9gis=20Hanol?= <regis@hanol.fr>
Date: Fri, 22 Nov 2013 19:18:45 +0100
Subject: [PATCH] schemaless avatar urls

---
 app/models/group.rb      |  5 ++--
 app/models/user.rb       |  8 ++++---
 spec/models/user_spec.rb | 50 ++++++++++++++++++++++++++++++++++++++++
 3 files changed, 57 insertions(+), 6 deletions(-)

diff --git a/app/models/group.rb b/app/models/group.rb
index 731bb188625..8728fc3f673 100644
--- a/app/models/group.rb
+++ b/app/models/group.rb
@@ -100,12 +100,11 @@ class Group < ActiveRecord::Base
   end
 
   def self.lookup_group(name)
-    id = AUTO_GROUPS[name]
-    if id
+    if id = AUTO_GROUPS[name]
       Group.where(id: id).first
     else
       unless group = Group.where(name: name).first
-        raise ArgumentError, "unknown group" unless group
+        raise ArgumentError, "unknown group"
       end
       group
     end
diff --git a/app/models/user.rb b/app/models/user.rb
index ab946fe8069..7975bc7b5ed 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -8,9 +8,11 @@ require_dependency 'post_destroyer'
 require_dependency 'user_name_suggester'
 require_dependency 'roleable'
 require_dependency 'pretty_text'
+require_dependency 'url_helper'
 
 class User < ActiveRecord::Base
   include Roleable
+  include UrlHelper
 
   has_many :posts
   has_many :notifications, dependent: :destroy
@@ -301,21 +303,21 @@ class User < ActiveRecord::Base
   #   - emails
   def small_avatar_url
     template = avatar_template
-    template.gsub("{size}", "45")
+    schemaless template.gsub("{size}", "45")
   end
 
   # the avatars might take a while to generate
   # so return the url of the original image in the meantime
   def uploaded_avatar_path
     return unless SiteSetting.allow_uploaded_avatars? && use_uploaded_avatar
-    uploaded_avatar_template.present? ? uploaded_avatar_template : uploaded_avatar.try(:url)
+    avatar_template = uploaded_avatar_template.present? ? uploaded_avatar_template : uploaded_avatar.try(:url)
+    schemaless avatar_template
   end
 
   def avatar_template
     uploaded_avatar_path || User.gravatar_template(email)
   end
 
-
   # The following count methods are somewhat slow - definitely don't use them in a loop.
   # They might need to be denormalized
   def like_count
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index 7d4f62d30a3..baebd4898b6 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -924,4 +924,54 @@ describe User do
     end
   end
 
+  describe "#gravatar_template" do
+
+    it "returns a gravatar based template" do
+      User.gravatar_template("em@il.com").should == "//www.gravatar.com/avatar/6dc2fde946483a1d8a84b89345a1b638.png?s={size}&r=pg&d=identicon"
+    end
+
+  end
+
+  describe ".small_avatar_url" do
+
+    let(:user) { build(:user, use_uploaded_avatar: true, uploaded_avatar_template: "http://test.localhost/uploaded/avatar/template/{size}.png") }
+
+    it "returns a 45-pixel-wide avatar" do
+      user.small_avatar_url.should == "//test.localhost/uploaded/avatar/template/45.png"
+    end
+
+  end
+
+  describe ".uploaded_avatar_path" do
+
+    let(:user) { build(:user, use_uploaded_avatar: true, uploaded_avatar_template: "http://test.localhost/uploaded/avatar/template/{size}.png") }
+
+    it "returns nothing when uploaded avatars are not allowed" do
+      SiteSetting.expects(:allow_uploaded_avatars).returns(false)
+      user.uploaded_avatar_path.should be_nil
+    end
+
+    it "returns a schemaless avatar template" do
+      user.uploaded_avatar_path.should == "//test.localhost/uploaded/avatar/template/{size}.png"
+    end
+
+  end
+
+  describe ".avatar_template" do
+
+    let(:user) { build(:user, email: "em@il.com") }
+
+    it "returns the uploaded_avatar_path by default" do
+      user.expects(:uploaded_avatar_path).returns("/uploaded/avatar.png")
+      user.avatar_template.should == "/uploaded/avatar.png"
+    end
+
+    it "returns the gravatar when no avatar has been uploaded" do
+      user.expects(:uploaded_avatar_path)
+      User.expects(:gravatar_template).with(user.email).returns("//gravatar.com/avatar.png")
+      user.avatar_template.should == "//gravatar.com/avatar.png"
+    end
+
+  end
+
 end