Merge pull request #39 from priyankarani/feature/task-2282

Activity stream for commit on task #2282
This commit is contained in:
Sharoon Thomas 2013-09-13 01:59:45 -07:00
commit 269875a6c6
3 changed files with 98 additions and 3 deletions

View File

@ -13,7 +13,7 @@ import tempfile
import json import json
import warnings import warnings
import time import time
import dateutil import dateutil.parser
import calendar import calendar
from collections import defaultdict from collections import defaultdict
from datetime import datetime, date from datetime import datetime, date
@ -2414,6 +2414,8 @@ class ProjectWorkCommit(ModelSQL, ModelView):
See https://help.github.com/articles/post-receive-hooks See https://help.github.com/articles/post-receive-hooks
""" """
NereidUser = Pool().get('nereid.user') NereidUser = Pool().get('nereid.user')
Activity = Pool().get('nereid.activity')
Project = Pool().get('project.work')
if request.method == "POST": if request.method == "POST":
payload = json.loads(request.form['payload']) payload = json.loads(request.form['payload'])
@ -2434,7 +2436,7 @@ class ProjectWorkCommit(ModelSQL, ModelView):
r'pull request #(\d+)', commit['message'] 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( local_commit_time = dateutil.parser.parse(
commit['timestamp'] commit['timestamp']
) )
@ -2447,7 +2449,7 @@ class ProjectWorkCommit(ModelSQL, ModelView):
]) ])
if commit_hook: if commit_hook:
continue continue
cls.create({ commit = cls.create({
'commit_timestamp': commit_timestamp, 'commit_timestamp': commit_timestamp,
'project': project, 'project': project,
'nereid_user': nereid_users[0].id, 'nereid_user': nereid_users[0].id,
@ -2457,6 +2459,13 @@ class ProjectWorkCommit(ModelSQL, ModelView):
'commit_url': commit['url'], 'commit_url': commit['url'],
'commit_id': commit['id'] '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' return 'OK'
def _json(self): def _json(self):
@ -2465,6 +2474,12 @@ class ProjectWorkCommit(ModelSQL, ModelView):
"objectType": self.__name__, "objectType": self.__name__,
"id": self.id, "id": self.id,
"updatedBy": self.nereid_user._json(), "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 @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')]"/> <field name="model" search="[('model', '=', 'timesheet.line')]"/>
</record> </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"> <record id="permission_project_admin" model="nereid.permission">
<field name="name">Project Admin</field> <field name="name">Project Admin</field>
<field name="value">project.admin</field> <field name="value">project.admin</field>

View File

@ -10,11 +10,13 @@
import unittest import unittest
import json import json
import smtplib import smtplib
import pytz
from trytond.config import CONFIG from trytond.config import CONFIG
CONFIG['smtp_from'] = 'test@openlabs.co.in' CONFIG['smtp_from'] = 'test@openlabs.co.in'
CONFIG['data_path'] = '.' CONFIG['data_path'] = '.'
from minimock import Mock from minimock import Mock
from datetime import datetime
import trytond.tests.test_tryton import trytond.tests.test_tryton
from trytond.tests.test_tryton import POOL, DB_NAME, USER, CONTEXT 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.Tag = POOL.get('project.work.tag')
self.History = POOL.get('project.work.history') self.History = POOL.get('project.work.history')
self.Permission = POOL.get('nereid.permission') self.Permission = POOL.get('nereid.permission')
self.ProjectWorkCommit = POOL.get('project.work.commit')
self.Activity = POOL.get('nereid.activity')
self.xhr_header = [ self.xhr_header = [
('X-Requested-With', 'XMLHttpRequest'), ('X-Requested-With', 'XMLHttpRequest'),
] ]
@ -257,6 +261,8 @@ class TestTask(NereidTestCase):
'localhost/project/comment.jinja': '', 'localhost/project/comment.jinja': '',
'localhost/project/tasks-by-employee.jinja': '', 'localhost/project/tasks-by-employee.jinja': '',
'localhost/project/project-task-list.jinja': '{{ tasks|length }}', '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) return self.templates.get(name)
@ -1116,6 +1122,74 @@ class TestTask(NereidTestCase):
response.data 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(): def suite():
"Nereid test suite" "Nereid test suite"