diff --git a/project.py b/project.py
index d688d2d..6551a4c 100644
--- a/project.py
+++ b/project.py
@@ -13,7 +13,7 @@ import tempfile
import json
import warnings
import time
-import dateutil
+import dateutil.parser
import calendar
from collections import defaultdict
from datetime import datetime, date
@@ -2414,6 +2414,8 @@ class ProjectWorkCommit(ModelSQL, ModelView):
See https://help.github.com/articles/post-receive-hooks
"""
NereidUser = Pool().get('nereid.user')
+ Activity = Pool().get('nereid.activity')
+ Project = Pool().get('project.work')
if request.method == "POST":
payload = json.loads(request.form['payload'])
@@ -2434,7 +2436,7 @@ class ProjectWorkCommit(ModelSQL, ModelView):
r'pull request #(\d+)', commit['message']
)
])
- for project in projects - pull_requests:
+ for project in Project.browse(projects - pull_requests):
local_commit_time = dateutil.parser.parse(
commit['timestamp']
)
@@ -2447,7 +2449,7 @@ class ProjectWorkCommit(ModelSQL, ModelView):
])
if commit_hook:
continue
- cls.create({
+ commit = cls.create({
'commit_timestamp': commit_timestamp,
'project': project,
'nereid_user': nereid_users[0].id,
@@ -2457,6 +2459,13 @@ class ProjectWorkCommit(ModelSQL, ModelView):
'commit_url': commit['url'],
'commit_id': commit['id']
})
+ Activity.create({
+ 'actor': nereid_users[0].id,
+ 'object_': 'project.work.commit, %d' % commit.id,
+ 'verb': 'made_commit',
+ 'target': 'project.work, %d' % project.id,
+ 'project': project.parent.id,
+ })
return 'OK'
def _json(self):
@@ -2465,6 +2474,12 @@ class ProjectWorkCommit(ModelSQL, ModelView):
"objectType": self.__name__,
"id": self.id,
"updatedBy": self.nereid_user._json(),
+ "url": self.commit_url,
+ "displayName": self.commit_message,
+ "repository": self.repository,
+ "repository_url": self.repository_url,
+ "commit_timestamp": self.commit_timestamp,
+ "commit_id": self.commit_id,
}
@classmethod
diff --git a/project.xml b/project.xml
index c5eed8a..d64df95 100644
--- a/project.xml
+++ b/project.xml
@@ -80,6 +80,12 @@ of this repository contains the full copyright notices and license terms. -->
+
+ ProjectWorkCommit
+
+
+
Project Admin
project.admin
diff --git a/tests/test_task.py b/tests/test_task.py
index 416ce6c..14b1bda 100644
--- a/tests/test_task.py
+++ b/tests/test_task.py
@@ -10,11 +10,13 @@
import unittest
import json
import smtplib
+import pytz
from trytond.config import CONFIG
CONFIG['smtp_from'] = 'test@openlabs.co.in'
CONFIG['data_path'] = '.'
from minimock import Mock
+from datetime import datetime
import trytond.tests.test_tryton
from trytond.tests.test_tryton import POOL, DB_NAME, USER, CONTEXT
@@ -57,6 +59,8 @@ class TestTask(NereidTestCase):
self.Tag = POOL.get('project.work.tag')
self.History = POOL.get('project.work.history')
self.Permission = POOL.get('nereid.permission')
+ self.ProjectWorkCommit = POOL.get('project.work.commit')
+ self.Activity = POOL.get('nereid.activity')
self.xhr_header = [
('X-Requested-With', 'XMLHttpRequest'),
]
@@ -257,6 +261,8 @@ class TestTask(NereidTestCase):
'localhost/project/comment.jinja': '',
'localhost/project/tasks-by-employee.jinja': '',
'localhost/project/project-task-list.jinja': '{{ tasks|length }}',
+ 'localhost/project/emails/project_text_content.jinja': '{{ task }}',
+ 'localhost/project/emails/project_html_content.jinja': '{{ task }}',
}
return self.templates.get(name)
@@ -1116,6 +1122,74 @@ class TestTask(NereidTestCase):
response.data
)
+ def test_0210_github_commit_activity_stream(self):
+ """
+ Checks activity stream generation for commit message and github hook
+ handler
+ """
+ with Transaction().start(DB_NAME, USER, CONTEXT):
+ data = self.create_task_dafaults()
+ app = self.get_app()
+ task = data['task1']
+
+ login_data = {
+ 'email': 'email@example.com',
+ 'password': 'password',
+ }
+ utc = pytz.UTC
+
+ payload = {
+ 'commits': [{
+ 'author': {'email': 'email@example.com'},
+ 'message': 'Add commit #%d' % task.id,
+ 'timestamp': str(utc.localize(datetime.utcnow())),
+ 'url': 'repo/url/1',
+ 'id': '54321',
+ }],
+ 'repository': {
+ 'name': 'ABC Repository',
+ 'url': 'repo/url',
+ }
+ }
+
+ with app.test_client() as c:
+ response = c.post('/en_US/login', data=login_data)
+
+ # Login Success
+ self.assertEqual(response.status_code, 302)
+
+ with Transaction().set_context(
+ {'company': data['company'].id}
+ ):
+ self.assertEqual(
+ len(data['registered_user1'].activities), 0
+ )
+
+ # Check github handler
+ response = c.post(
+ '/en_US/-project/-github-hook',
+ data={
+ 'payload': json.dumps(payload)
+ }
+ )
+ self.assertEqual(response.status_code, 200)
+ self.assertTrue(response.data, 'OK')
+
+ # Activity stream is created for commit user
+ self.assertEqual(
+ len(data['registered_user1'].activities), 1
+ )
+
+ commit, = self.ProjectWorkCommit.search([
+ ('commit_id', '=', '54321')
+ ])
+
+ activities = self.Activity.search([
+ ('object_', '=', 'project.work.commit, %d' % commit.id)
+ ]),
+
+ self.assertEqual(len(activities), 1)
+
def suite():
"Nereid test suite"