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:
parent
d0df64f164
commit
d14bd1da97
21
project.py
21
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
|
||||
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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"
|
||||
|
|
Loading…
Reference in New Issue