Activity stream for commit on task #2282

This patch has added activity stream for each commit on task.

Review ID: 420005
This commit is contained in:
Priyanka Rani 2013-09-10 18:00:09 +05:30
parent d0df64f164
commit d14bd1da97
3 changed files with 98 additions and 3 deletions

View File

@ -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
@ -2401,6 +2401,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'])
@ -2421,7 +2423,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']
)
@ -2434,7 +2436,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,
@ -2444,6 +2446,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):
@ -2452,6 +2461,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

View File

@ -80,6 +80,12 @@ of this repository contains the full copyright notices and license terms. -->
<field name="model" search="[('model', '=', 'timesheet.line')]"/>
</record>
<record model="nereid.activity.allowed_model"
id="activity_allowed_model_work_commit">
<field name="name">ProjectWorkCommit</field>
<field name="model" search="[('model', '=', 'project.work.commit')]"/>
</record>
<record id="permission_project_admin" model="nereid.permission">
<field name="name">Project Admin</field>
<field name="value">project.admin</field>

View File

@ -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"