[#8164] add activity stream entries for merge request actions
diff --git a/Allura/allura/controllers/repository.py b/Allura/allura/controllers/repository.py
index 9518f89..17e3dfb 100644
--- a/Allura/allura/controllers/repository.py
+++ b/Allura/allura/controllers/repository.py
@@ -207,6 +207,8 @@
                 subject='Discussion for Merge Request #:%s: %s' % (
                     mr.request_number, mr.summary))
             session(t).flush()
+            g.director.create_activity(c.user, 'created', mr,
+                                       related_nodes=[c.project], tags=['merge-request'])
             redirect(mr.url())
 
     @without_trailing_slash
@@ -466,6 +468,9 @@
 
         if changes:
             self.req.add_meta_post(changes=changes)
+            g.director.create_activity(c.user, 'updated', self.req,
+                                       related_nodes=[c.project], tags=['merge-request'])
+
         redirect(self.req.url())
 
     @expose()
@@ -475,6 +480,8 @@
         if status and self.req.status != status and \
            (has_access(self.req, 'write') or (self.req.creator == c.user and status == 'rejected')):
             self.req.add_meta_post(changes={'Status': [self.req.status, status]})
+            g.director.create_activity(c.user, 'updated', self.req,
+                                       related_nodes=[c.project], tags=['merge-request'])
             self.req.status = status
         redirect('.')
 
diff --git a/Allura/allura/model/repository.py b/Allura/allura/model/repository.py
index 4c508b7..0a22230 100644
--- a/Allura/allura/model/repository.py
+++ b/Allura/allura/model/repository.py
@@ -807,6 +807,12 @@
     def activity_name(self):
         return 'merge request #%s' % self.request_number
 
+    @property
+    def activity_extras(self):
+        d = ActivityObject.activity_extras.fget(self)
+        d.update(summary=self.summary)
+        return d
+
     @LazyProperty
     def creator(self):
         from allura import model as M
diff --git a/Allura/allura/tasks/repo_tasks.py b/Allura/allura/tasks/repo_tasks.py
index a9a89d7..f84de1a 100644
--- a/Allura/allura/tasks/repo_tasks.py
+++ b/Allura/allura/tasks/repo_tasks.py
@@ -158,6 +158,8 @@
     mr.app.repo.merge(mr)
     mr.add_meta_post(changes={'Status': [mr.status, 'merged']})
     mr.status = 'merged'
+    g.director.create_activity(c.user, 'merged', mr,
+                               related_nodes=[c.project], tags=['merge-request'])
     session(mr).flush(mr)
 
 
diff --git a/Allura/allura/tests/model/test_repo.py b/Allura/allura/tests/model/test_repo.py
index fc30c43..3761821 100644
--- a/Allura/allura/tests/model/test_repo.py
+++ b/Allura/allura/tests/model/test_repo.py
@@ -691,8 +691,9 @@
         self.mr = M.MergeRequest(
             app_config=mock.Mock(_id=ObjectId()),
             downstream={'commit_id': '12345'},
+            request_number=1,
         )
-        self.mr.app = mock.Mock(forkable=True)
+        self.mr.app = mock.Mock(forkable=True, url='/mock-app-url/')
         self.mr.app.repo.commit.return_value = mock.Mock(_id='09876')
         self.mr.merge_allowed = mock.Mock(return_value=True)
         self.mr.discussion_thread = mock.Mock()
diff --git a/Allura/allura/tests/test_tasks.py b/Allura/allura/tests/test_tasks.py
index abfa021..2f4de42 100644
--- a/Allura/allura/tests/test_tasks.py
+++ b/Allura/allura/tests/test_tasks.py
@@ -67,7 +67,8 @@
     @mock.patch('allura.tasks.repo_tasks.session', autospec=True)
     @mock.patch.object(M, 'MergeRequest', autospec=True)
     def test_merge(self, MR, session):
-        mr = mock.Mock(_id='_id')
+        mr = mock.Mock(_id='_id',
+                       activity_name='merge req', activity_url='/fake/url', activity_extras={}, node_id=None)
         MR.query.get.return_value = mr
         repo_tasks.merge(mr._id)
         mr.app.repo.merge.assert_called_once_with(mr)