diff --git a/rhodecode/tests/test_libs.py b/rhodecode/tests/test_libs.py
--- a/rhodecode/tests/test_libs.py
+++ b/rhodecode/tests/test_libs.py
@@ -23,9 +23,10 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-
-
import unittest
+import datetime
+import hashlib
+import mock
from rhodecode.tests import *
proto = 'http'
@@ -116,3 +117,61 @@ class TestLibs(unittest.TestCase):
'marian.user', 'marco-polo', 'marco_polo'
], key=lambda k: k.lower())
self.assertEqual(s, extract_mentioned_users(sample))
+
+ def test_age(self):
+ import calendar
+ from rhodecode.lib.utils2 import age
+ n = datetime.datetime.now()
+ delt = lambda *args, **kwargs: datetime.timedelta(*args, **kwargs)
+ self.assertEqual(age(n), u'just now')
+ self.assertEqual(age(n - delt(seconds=1)), u'1 second ago')
+ self.assertEqual(age(n - delt(seconds=60 * 2)), u'2 minutes ago')
+ self.assertEqual(age(n - delt(hours=1)), u'1 hour ago')
+ self.assertEqual(age(n - delt(hours=24)), u'1 day ago')
+ self.assertEqual(age(n - delt(hours=24 * 5)), u'5 days ago')
+ self.assertEqual(age(n - delt(hours=24 * (calendar.mdays[n.month-1] + 2))),
+ u'1 month and 2 days ago')
+ self.assertEqual(age(n - delt(hours=24 * 400)), u'1 year and 1 month ago')
+
+ def test_tag_exctrator(self):
+ sample = (
+ "hello pta[tag] gog [[]] [[] sda ero[or]d [me =>>< sa]"
+ "[requires] [stale] [see<>=>] [see => http://url.com]"
+ "[requires => url] [lang => python] [just a tag]"
+ "[,d] [ => ULR ] [obsolete] [desc]]"
+ )
+ from rhodecode.lib.helpers import desc_stylize
+ res = desc_stylize(sample)
+ self.assertTrue('
tag
' in res)
+ self.assertTrue('obsolete
' in res)
+ self.assertTrue('stale
' in res)
+ self.assertTrue('python
' in res)
+ self.assertTrue('' in res)
+ self.assertTrue('tag
' in res)
+
+ def test_alternative_gravatar(self):
+ from rhodecode.lib.helpers import gravatar_url
+ _md5 = lambda s: hashlib.md5(s).hexdigest()
+
+ def fake_conf(**kwargs):
+ from pylons import config
+ config['app_conf'] = {}
+ config['app_conf']['use_gravatar'] = True
+ config['app_conf'].update(kwargs)
+ return config
+ fake = fake_conf(alternative_gravatar_url='http://test.com/{email}')
+ with mock.patch('pylons.config', fake):
+ grav = gravatar_url(email_address='test@foo.com', size=24)
+ assert grav == 'http://test.com/test@foo.com'
+
+ fake = fake_conf(alternative_gravatar_url='http://test.com/{md5email}')
+ with mock.patch('pylons.config', fake):
+ em = 'test@foo.com'
+ grav = gravatar_url(email_address=em, size=24)
+ assert grav == 'http://test.com/%s' % (_md5(em))
+
+ fake = fake_conf(alternative_gravatar_url='http://test.com/{md5email}/{size}')
+ with mock.patch('pylons.config', fake):
+ em = 'test@foo.com'
+ grav = gravatar_url(email_address=em, size=24)
+ assert grav == 'http://test.com/%s/%s' % (_md5(em), 24)