You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by tv...@apache.org on 2013/12/05 16:16:18 UTC
[1/2] git commit: [#6829] Make activity timeline look better
Updated Branches:
refs/heads/tv/6829 [created] b0b3b3b78
[#6829] Make activity timeline look better
Along with style changes, this also includes adding a 'summary' key
to the activity_extras dict for several ActivityObject subclasses,
and adding an 'icon_url' key to the User activity_extras dict.
Signed-off-by: Tim Van Steenburgh <tv...@gmail.com>
Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/9fb1d1fd
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/9fb1d1fd
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/9fb1d1fd
Branch: refs/heads/tv/6829
Commit: 9fb1d1fd0230139fef88af4039b34d338d706e3b
Parents: 50abb91
Author: Tim Van Steenburgh <tv...@gmail.com>
Authored: Wed Dec 4 22:01:58 2013 +0000
Committer: Tim Van Steenburgh <tv...@gmail.com>
Committed: Wed Dec 4 22:01:58 2013 +0000
----------------------------------------------------------------------
Allura/allura/model/auth.py | 6 ++++
Allura/allura/model/discuss.py | 11 +++++++
Allura/allura/model/repo.py | 6 ++++
ForgeActivity/forgeactivity/main.py | 1 +
.../forgeactivity/nf/activity/css/activity.css | 29 ++++++++++++++++++
.../forgeactivity/templates/index.html | 31 ++++++++++++++++----
ForgeBlog/forgeblog/model/blog.py | 8 ++++-
ForgeTracker/forgetracker/model/ticket.py | 6 ++++
ForgeWiki/forgewiki/model/wiki.py | 8 ++++-
9 files changed, 99 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/9fb1d1fd/Allura/allura/model/auth.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/auth.py b/Allura/allura/model/auth.py
index 432898b..d1f5b7f 100644
--- a/Allura/allura/model/auth.py
+++ b/Allura/allura/model/auth.py
@@ -407,6 +407,12 @@ class User(MappedClass, ActivityNode, ActivityObject):
return self.display_name or self.username
@property
+ def activity_extras(self):
+ d = ActivityObject.activity_extras.fget(self)
+ d.update(icon_url=self.icon_url())
+ return d
+
+ @property
def stats(self):
if 'userstats' in g.entry_points['stats']:
from forgeuserstats.model.stats import UserStats
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/9fb1d1fd/Allura/allura/model/discuss.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/discuss.py b/Allura/allura/model/discuss.py
index df55ac9..b452f3c 100644
--- a/Allura/allura/model/discuss.py
+++ b/Allura/allura/model/discuss.py
@@ -18,6 +18,7 @@
import logging
from datetime import datetime
+import jinja2
import pymongo
from pymongo.errors import DuplicateKeyError
from pylons import tmpl_context as c, app_globals as g
@@ -492,6 +493,16 @@ class Post(Message, VersionedArtifact, ActivityObject):
return artifact_access and security.has_access(self, perm, user,
self.project)
+ @property
+ def activity_extras(self):
+ d = ActivityObject.activity_extras.fget(self)
+ summary = jinja2.Markup.escape(
+ g.markdown.cached_convert(self, 'text')).striptags()
+ if len(summary) > 80:
+ summary = summary[:80] + '...'
+ d.update(summary=summary)
+ return d
+
def index(self):
result = super(Post, self).index()
result.update(
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/9fb1d1fd/Allura/allura/model/repo.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/repo.py b/Allura/allura/model/repo.py
index 1ff6641..f5f8e25 100644
--- a/Allura/allura/model/repo.py
+++ b/Allura/allura/model/repo.py
@@ -174,6 +174,12 @@ class Commit(RepoObject, ActivityObject):
def activity_name(self):
return self.shorthand_id()
+ @property
+ def activity_extras(self):
+ d = ActivityObject.activity_extras.fget(self)
+ d.update(summary=self.summary)
+ return d
+
def has_activity_access(self, perm, user):
"""Commits have no ACLs and are therefore always viewable by any user.
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/9fb1d1fd/ForgeActivity/forgeactivity/main.py
----------------------------------------------------------------------
diff --git a/ForgeActivity/forgeactivity/main.py b/ForgeActivity/forgeactivity/main.py
index dbdceee..6249ed0 100644
--- a/ForgeActivity/forgeactivity/main.py
+++ b/ForgeActivity/forgeactivity/main.py
@@ -47,6 +47,7 @@ class ForgeActivityApp(Application):
def __init__(self, project, config):
Application.__init__(self, project, config)
self.root = ForgeActivityController()
+ g.register_app_css('css/activity.css', app=self)
def main_menu(self): # pragma no cover
return []
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/9fb1d1fd/ForgeActivity/forgeactivity/nf/activity/css/activity.css
----------------------------------------------------------------------
diff --git a/ForgeActivity/forgeactivity/nf/activity/css/activity.css b/ForgeActivity/forgeactivity/nf/activity/css/activity.css
new file mode 100644
index 0000000..be36ba0
--- /dev/null
+++ b/ForgeActivity/forgeactivity/nf/activity/css/activity.css
@@ -0,0 +1,29 @@
+.activity {
+ padding: 0 20px 20px 20px;
+}
+.activity ul.timeline {
+ list-style: none;
+ margin: 0;
+}
+.activity ul.timeline li {
+ padding: 20px;
+ border-bottom: 1px solid #eee;
+}
+.activity ul.timeline li article time {
+ font-size: 12px;
+ color: #777;
+}
+.activity ul.timeline li article h1 {
+ padding: 0;
+ font-size: 16px;
+ line-height: 32px;
+}
+.activity ul.timeline li article p {
+ padding: 0;
+ vertical-align: top;
+ font-size: 14px;
+}
+.activity ul.timeline li article p .avatar {
+ display: inline-block;
+ margin: 0 8px 8px 0;
+}
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/9fb1d1fd/ForgeActivity/forgeactivity/templates/index.html
----------------------------------------------------------------------
diff --git a/ForgeActivity/forgeactivity/templates/index.html b/ForgeActivity/forgeactivity/templates/index.html
index 6189688..eadb82a 100644
--- a/ForgeActivity/forgeactivity/templates/index.html
+++ b/ForgeActivity/forgeactivity/templates/index.html
@@ -40,17 +40,38 @@
<a href="{{o.activity_url}}">{{o.activity_name}}</a>
{% endmacro %}
+{% macro icon(o, size, className) -%}
+ {% if o.activity_extras.get('icon_url') %}
+ <img src="{{ o.activity_extras.get('icon_url') }}"
+ alt="{{ o.activity_name }}"
+ title="{{ o.activity_name }}"
+ class="emboss{% if size %} x{{size}}{% endif %}{% if className %} {{className}}{% endif %}">
+ {% else %}
+ <b data-icon="{{g.icons['user'].char}}" class="ico emboss {{g.icons['user'].css}}{% if size %} x{{size}}{% endif %}{% if className %} {{className}}{% endif %}"></b>
+ {% endif %}
+{%- endmacro %}
+
{% block content %}
- <div class="grid-23">
+<div class="activity">
{% if not timeline %}
No activity to display.
{% else %}
- <ul>
+ <ul class="timeline">
{% for a in timeline %}
- <li>{{activity_obj(a.actor)}} {{a.verb}} {{activity_obj(a.obj)}} {% if a.target.activity_name %}on {{activity_obj(a.target)}}{% endif %} {{h.ago(a.published)}}</li>
- <!-- Score: {{ a.score }} -->
+ <li>
+ <article>
+ <time datetime="{{a.published}}" title="{{a.published}}">{{h.ago(a.published, show_date_after=None)}}</time>
+ <h1>{{activity_obj(a.actor)}} {{a.verb}} {{activity_obj(a.obj)}} {% if a.target.activity_name %}on {{activity_obj(a.target)}}{% endif %}</h1>
+ {% if a.obj.activity_extras.get('summary') %}
+ <p>
+ {{ icon(a.actor, 16, 'avatar') }}
+ {{ a.obj.activity_extras.get('summary') }}
+ </p>
+ {% endif %}
+ </article>
+ </li>
{% endfor %}
</ul>
{% endif %}
- </div>
+</div>
{% endblock %}
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/9fb1d1fd/ForgeBlog/forgeblog/model/blog.py
----------------------------------------------------------------------
diff --git a/ForgeBlog/forgeblog/model/blog.py b/ForgeBlog/forgeblog/model/blog.py
index 2d8f0fd..7e34aea 100644
--- a/ForgeBlog/forgeblog/model/blog.py
+++ b/ForgeBlog/forgeblog/model/blog.py
@@ -114,7 +114,13 @@ class BlogPost(M.VersionedArtifact, ActivityObject):
@property
def activity_name(self):
- return 'blog post %s' % self.title
+ return 'a blog post'
+
+ @property
+ def activity_extras(self):
+ d = ActivityObject.activity_extras.fget(self)
+ d.update(summary=self.title)
+ return d
def author(self):
'''The author of the first snapshot of this BlogPost'''
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/9fb1d1fd/ForgeTracker/forgetracker/model/ticket.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/model/ticket.py b/ForgeTracker/forgetracker/model/ticket.py
index 5605c70..8cde75a 100644
--- a/ForgeTracker/forgetracker/model/ticket.py
+++ b/ForgeTracker/forgetracker/model/ticket.py
@@ -600,6 +600,12 @@ class Ticket(VersionedArtifact, ActivityObject, VotableArtifact):
def activity_name(self):
return 'ticket #%s' % self.ticket_num
+ @property
+ def activity_extras(self):
+ d = ActivityObject.activity_extras.fget(self)
+ d.update(summary=self.summary)
+ return d
+
@classmethod
def new(cls):
'''Create a new ticket, safely (ensuring a unique ticket_num'''
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/9fb1d1fd/ForgeWiki/forgewiki/model/wiki.py
----------------------------------------------------------------------
diff --git a/ForgeWiki/forgewiki/model/wiki.py b/ForgeWiki/forgewiki/model/wiki.py
index a6565d6..11ad589 100644
--- a/ForgeWiki/forgewiki/model/wiki.py
+++ b/ForgeWiki/forgewiki/model/wiki.py
@@ -107,7 +107,13 @@ class Page(VersionedArtifact, ActivityObject):
@property
def activity_name(self):
- return 'wiki page %s' % self.title
+ return 'a wiki page'
+
+ @property
+ def activity_extras(self):
+ d = ActivityObject.activity_extras.fget(self)
+ d.update(summary=self.title)
+ return d
def __json__(self):
return dict(super(Page, self).__json__(),
[2/2] git commit: [#6829] Minor fixes, added tests
Posted by tv...@apache.org.
[#6829] Minor fixes, added tests
Signed-off-by: Tim Van Steenburgh <tv...@gmail.com>
Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/b0b3b3b7
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/b0b3b3b7
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/b0b3b3b7
Branch: refs/heads/tv/6829
Commit: b0b3b3b783157194653786c3ce6db71458df2065
Parents: 9fb1d1f
Author: Tim Van Steenburgh <tv...@gmail.com>
Authored: Thu Dec 5 15:15:48 2013 +0000
Committer: Tim Van Steenburgh <tv...@gmail.com>
Committed: Thu Dec 5 15:15:48 2013 +0000
----------------------------------------------------------------------
Allura/allura/model/discuss.py | 8 ++-
Allura/allura/model/timeline.py | 5 ++
Allura/allura/tests/unit/test_post_model.py | 11 ++++
Allura/allura/tests/unit/test_repo.py | 7 ++
ForgeActivity/forgeactivity/main.py | 10 ++-
.../forgeactivity/nf/activity/css/activity.css | 8 +--
.../forgeactivity/templates/index.html | 18 +++--
.../forgeactivity/tests/functional/test_root.py | 69 ++++++++++++++++++++
.../forgeblog/tests/unit/test_blog_post.py | 4 +-
.../tests/unit/test_ticket_model.py | 5 ++
10 files changed, 126 insertions(+), 19 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/b0b3b3b7/Allura/allura/model/discuss.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/discuss.py b/Allura/allura/model/discuss.py
index b452f3c..ea1c2dc 100644
--- a/Allura/allura/model/discuss.py
+++ b/Allura/allura/model/discuss.py
@@ -496,10 +496,14 @@ class Post(Message, VersionedArtifact, ActivityObject):
@property
def activity_extras(self):
d = ActivityObject.activity_extras.fget(self)
+ # For activity summary, convert Post text to html,
+ # strip all tags, and truncate near the 80 char mark
+ LEN = 80
summary = jinja2.Markup.escape(
g.markdown.cached_convert(self, 'text')).striptags()
- if len(summary) > 80:
- summary = summary[:80] + '...'
+ if len(summary) > LEN:
+ split = max(summary.find(' ', LEN), LEN)
+ summary = summary[:split] + '...'
d.update(summary=summary)
return d
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/b0b3b3b7/Allura/allura/model/timeline.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/timeline.py b/Allura/allura/model/timeline.py
index a80e5ba..6f146fe 100644
--- a/Allura/allura/model/timeline.py
+++ b/Allura/allura/model/timeline.py
@@ -28,6 +28,11 @@ class ActivityNode(base.NodeBase):
class ActivityObject(base.ActivityObjectBase):
+ def __init__(self):
+ # override base class instance attrs since we're
+ # replacing with properties
+ pass
+
@property
def activity_name(self):
"""Override this for each Artifact type."""
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/b0b3b3b7/Allura/allura/tests/unit/test_post_model.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/unit/test_post_model.py b/Allura/allura/tests/unit/test_post_model.py
index 9ac2256..ed33ecb 100644
--- a/Allura/allura/tests/unit/test_post_model.py
+++ b/Allura/allura/tests/unit/test_post_model.py
@@ -39,3 +39,14 @@ class TestPostModel(WithDatabase):
with h.push_config(c, user=M.User()):
self.post.approve()
assert self.post.status == 'ok'
+
+ def test_activity_extras(self):
+ self.post.text = """\
+This is a **bold thing**, 40 chars here.
+* Here's the first item in our list.
+* And here's the second item."""
+ assert 'allura_id' in self.post.activity_extras
+ summary = self.post.activity_extras['summary']
+ assert summary == "This is a bold thing, 40 chars here. " + \
+ "Here's the first item in our list. " + \
+ "And here's..."
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/b0b3b3b7/Allura/allura/tests/unit/test_repo.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/unit/test_repo.py b/Allura/allura/tests/unit/test_repo.py
index 8c104fa..c730d59 100644
--- a/Allura/allura/tests/unit/test_repo.py
+++ b/Allura/allura/tests/unit/test_repo.py
@@ -208,6 +208,13 @@ class TestBlob(unittest.TestCase):
class TestCommit(unittest.TestCase):
+ def test_activity_extras(self):
+ commit = M.repo.Commit()
+ commit.shorthand_id = MagicMock(return_value='abcdef')
+ commit.message = 'commit msg'
+ self.assertIn('allura_id', commit.activity_extras)
+ self.assertEqual(commit.activity_extras['summary'], commit.summary)
+
def test_get_path_no_create(self):
commit = M.repo.Commit()
commit.get_tree = MagicMock()
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/b0b3b3b7/ForgeActivity/forgeactivity/main.py
----------------------------------------------------------------------
diff --git a/ForgeActivity/forgeactivity/main.py b/ForgeActivity/forgeactivity/main.py
index 6249ed0..e12ca91 100644
--- a/ForgeActivity/forgeactivity/main.py
+++ b/ForgeActivity/forgeactivity/main.py
@@ -46,8 +46,7 @@ class ForgeActivityApp(Application):
def __init__(self, project, config):
Application.__init__(self, project, config)
- self.root = ForgeActivityController()
- g.register_app_css('css/activity.css', app=self)
+ self.root = ForgeActivityController(self)
def main_menu(self): # pragma no cover
return []
@@ -68,6 +67,13 @@ class W:
follow_toggle = FollowToggle()
class ForgeActivityController(BaseController):
+ def __init__(self, app, *args, **kw):
+ super(ForgeActivityController, self).__init__(*args, **kw)
+ self.app = app
+
+ def _before(self, *args, **kw):
+ g.register_app_css('css/activity.css', app=self.app)
+
@expose('jinja:forgeactivity:templates/index.html')
@with_trailing_slash
def index(self, **kw):
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/b0b3b3b7/ForgeActivity/forgeactivity/nf/activity/css/activity.css
----------------------------------------------------------------------
diff --git a/ForgeActivity/forgeactivity/nf/activity/css/activity.css b/ForgeActivity/forgeactivity/nf/activity/css/activity.css
index be36ba0..f7198fe 100644
--- a/ForgeActivity/forgeactivity/nf/activity/css/activity.css
+++ b/ForgeActivity/forgeactivity/nf/activity/css/activity.css
@@ -9,21 +9,21 @@
padding: 20px;
border-bottom: 1px solid #eee;
}
-.activity ul.timeline li article time {
+.activity ul.timeline li time {
font-size: 12px;
color: #777;
}
-.activity ul.timeline li article h1 {
+.activity ul.timeline li h1 {
padding: 0;
font-size: 16px;
line-height: 32px;
}
-.activity ul.timeline li article p {
+.activity ul.timeline li p {
padding: 0;
vertical-align: top;
font-size: 14px;
}
-.activity ul.timeline li article p .avatar {
+.activity ul.timeline li p .avatar {
display: inline-block;
margin: 0 8px 8px 0;
}
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/b0b3b3b7/ForgeActivity/forgeactivity/templates/index.html
----------------------------------------------------------------------
diff --git a/ForgeActivity/forgeactivity/templates/index.html b/ForgeActivity/forgeactivity/templates/index.html
index eadb82a..f430c64 100644
--- a/ForgeActivity/forgeactivity/templates/index.html
+++ b/ForgeActivity/forgeactivity/templates/index.html
@@ -59,16 +59,14 @@
<ul class="timeline">
{% for a in timeline %}
<li>
- <article>
- <time datetime="{{a.published}}" title="{{a.published}}">{{h.ago(a.published, show_date_after=None)}}</time>
- <h1>{{activity_obj(a.actor)}} {{a.verb}} {{activity_obj(a.obj)}} {% if a.target.activity_name %}on {{activity_obj(a.target)}}{% endif %}</h1>
- {% if a.obj.activity_extras.get('summary') %}
- <p>
- {{ icon(a.actor, 16, 'avatar') }}
- {{ a.obj.activity_extras.get('summary') }}
- </p>
- {% endif %}
- </article>
+ <time datetime="{{a.published|datetimeformat}}" title="{{a.published|datetimeformat}}">{{h.ago(a.published, show_date_after=None)}}</time>
+ <h1>{{activity_obj(a.actor)}} {{a.verb}} {{activity_obj(a.obj)}} {% if a.target.activity_name %}on {{activity_obj(a.target)}}{% endif %}</h1>
+ {% if a.obj.activity_extras.get('summary') %}
+ <p>
+ {{ icon(a.actor, 16, 'avatar') }}
+ {{ a.obj.activity_extras.get('summary') }}
+ </p>
+ {% endif %}
</li>
{% endfor %}
</ul>
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/b0b3b3b7/ForgeActivity/forgeactivity/tests/functional/test_root.py
----------------------------------------------------------------------
diff --git a/ForgeActivity/forgeactivity/tests/functional/test_root.py b/ForgeActivity/forgeactivity/tests/functional/test_root.py
index d0b9884..b008fc4 100644
--- a/ForgeActivity/forgeactivity/tests/functional/test_root.py
+++ b/ForgeActivity/forgeactivity/tests/functional/test_root.py
@@ -16,8 +16,10 @@
# under the License.
from mock import patch
+from textwrap import dedent
from tg import config
+import dateutil.parser
from nose.tools import assert_equal
from alluratest.controller import TestController
@@ -48,6 +50,73 @@ class TestActivityController(TestController):
resp = self.app.get('/activity/')
assert 'No activity to display.' in resp
+ @td.with_tool('test', 'activity')
+ @patch('forgeactivity.main.g.director')
+ def test_index_html(self, director):
+ from activitystream.storage.base import StoredActivity
+ from bson import ObjectId
+ director.get_timeline.return_value = [StoredActivity(**{
+ "_id" : ObjectId("529fa331033c5e6406d8b338"),
+ "obj" : {
+ "activity_extras" : {
+ "allura_id" : "Post:971389ad979eaafa658beb807bf4629d30f5f642.tickets@test.p.sourceforge.net",
+ "summary" : "Just wanted to leave a comment on this..."
+ },
+ "activity_url" : "/p/test/tickets/_discuss/thread/08e74efd/ed7c/",
+ "activity_name" : "a comment"
+ },
+ "target" : {
+ "activity_extras" : {
+ "allura_id" : "Ticket:529f57a6033c5e5985db2efa",
+ "summary" : "Make activitystream timeline look better"
+ },
+ "activity_url" : "/p/test/tickets/34/",
+ "activity_name" : "ticket #34"
+ },
+ "actor" : {
+ "activity_extras" : {
+ "icon_url" : "/u/test-admin/user_icon",
+ "allura_id" : "User:521f96cb033c5e2587adbdff"
+ },
+ "activity_url" : "/u/test-admin/",
+ "activity_name" : "Administrator 1",
+ "node_id" : "User:521f96cb033c5e2587adbdff"
+ },
+ "verb" : "posted",
+ "published" : dateutil.parser.parse("2013-12-04T21:48:19.817"),
+ "score" : 1386193699,
+ "node_id" : "Project:527a6584033c5e62126f5a60",
+ "owner_id" : "Project:527a6584033c5e62126f5a60"
+ })]
+ r = self.app.get('/p/test/activity/')
+ timeline = r.html.find('ul', 'timeline')
+ assert_equal(1, len(timeline.findAll('li')))
+ activity = timeline.find('li')
+ assert_equal(activity.time['title'], "2013-12-04 21:48:19")
+ h1 = """\
+ <h1>
+ <a href="/u/test-admin/">
+ Administrator 1
+ </a>
+ posted
+ <a href="/p/test/tickets/_discuss/thread/08e74efd/ed7c/">
+ a comment
+ </a>
+ on
+ <a href="/p/test/tickets/34/">
+ ticket #34
+ </a>
+ </h1>
+ """
+ assert_equal(dedent(h1), activity.h1.prettify())
+ p = """\
+ <p>
+ <img src="/u/test-admin/user_icon" alt="Administrator 1" title="Administrator 1" class="emboss x16 avatar" />
+ Just wanted to leave a comment on this...
+ </p>
+ """
+ assert_equal(dedent(p), activity.p.prettify())
+
@td.with_tool('u/test-user-1', 'activity')
@td.with_user_project('test-user-1')
def test_follow_user(self):
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/b0b3b3b7/ForgeBlog/forgeblog/tests/unit/test_blog_post.py
----------------------------------------------------------------------
diff --git a/ForgeBlog/forgeblog/tests/unit/test_blog_post.py b/ForgeBlog/forgeblog/tests/unit/test_blog_post.py
index 919ac14..f2274d9 100644
--- a/ForgeBlog/forgeblog/tests/unit/test_blog_post.py
+++ b/ForgeBlog/forgeblog/tests/unit/test_blog_post.py
@@ -16,7 +16,7 @@
# under the License.
from datetime import datetime
-from nose.tools import assert_equal
+from nose.tools import assert_equal, assert_true
from pylons import tmpl_context as c
from forgeblog import model as M
@@ -33,6 +33,8 @@ class TestBlogPost(BlogTestWithModel):
assert_equal(post.title, 'test')
assert_equal(post.text, 'test message')
assert_equal(post.state, 'published')
+ assert_equal(post.activity_extras['summary'], post.title)
+ assert_true('allura_id' in post.activity_extras)
class TestFeed(BlogTestWithModel):
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/b0b3b3b7/ForgeTracker/forgetracker/tests/unit/test_ticket_model.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tests/unit/test_ticket_model.py b/ForgeTracker/forgetracker/tests/unit/test_ticket_model.py
index 8fc8038..e7ccb2d 100644
--- a/ForgeTracker/forgetracker/tests/unit/test_ticket_model.py
+++ b/ForgeTracker/forgetracker/tests/unit/test_ticket_model.py
@@ -77,6 +77,11 @@ class TestTicketModel(TrackerTestWithModel):
else:
raise AssertionError('Expected schema.Invalid to be thrown')
+ def test_activity_extras(self):
+ t = Ticket(summary='my ticket', ticket_num=12)
+ assert_in('allura_id', t.activity_extras)
+ assert_equal(t.activity_extras['summary'], t.summary)
+
def test_private_ticket(self):
from pylons import tmpl_context as c
from allura.model import ProjectRole, User