Show activity stream of projects only where user is participant #2878
This patch allows user to see activity stream of projects only where he is participant. Review ID: 490002
This commit is contained in:
parent
a79876ae1e
commit
899fba402e
14
project.py
14
project.py
|
@ -2706,6 +2706,20 @@ class Activity:
|
|||
'project.work', 'Project', domain=[('type', '=', 'project')]
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def get_activity_stream_domain(cls):
|
||||
'''
|
||||
Returns the domain to get activity stream of project where current user
|
||||
is participant
|
||||
'''
|
||||
return [
|
||||
'OR', [
|
||||
('project.participants', '=', request.nereid_user.id),
|
||||
], [
|
||||
('actor', '=', request.nereid_user.id)
|
||||
]
|
||||
]
|
||||
|
||||
|
||||
class Attachment:
|
||||
'''
|
||||
|
|
|
@ -59,6 +59,7 @@ class TestNereidProject(NereidTestCase):
|
|||
self.Attachment = POOL.get('ir.attachment')
|
||||
self.Permission = POOL.get('nereid.permission')
|
||||
self.ProjectUsers = POOL.get('project.work-nereid.user')
|
||||
self.Activity = POOL.get('nereid.activity')
|
||||
self.xhr_header = [
|
||||
('X-Requested-With', 'XMLHttpRequest'),
|
||||
]
|
||||
|
@ -165,6 +166,17 @@ class TestNereidProject(NereidTestCase):
|
|||
'menu': menu_list[0].id,
|
||||
}
|
||||
])
|
||||
actor_party, = self.Party.create([{
|
||||
'name': 'Actor Party',
|
||||
}])
|
||||
|
||||
self.nereid_user_actor, = self.NereidUser.create([{
|
||||
'party': actor_party.id,
|
||||
'company': company.id,
|
||||
'display_name': actor_party.name,
|
||||
'email': 'actor@email.com',
|
||||
}])
|
||||
|
||||
# Create nereid project site
|
||||
url_map, = self.URLMap.search([], limit=1)
|
||||
en_us, = self.Language.search([('code', '=', 'en_US')])
|
||||
|
@ -1286,6 +1298,196 @@ class TestNereidProject(NereidTestCase):
|
|||
}]
|
||||
)
|
||||
|
||||
def test_0200_stream_with_project(self):
|
||||
'''
|
||||
Tests that if user is part of project then he must be able to see all
|
||||
the activity streams of projects where he is participant
|
||||
'''
|
||||
with Transaction().start(DB_NAME, USER, context=CONTEXT):
|
||||
data = self.create_defaults()
|
||||
app = self.get_app()
|
||||
|
||||
work1, = self.Work.create([{
|
||||
'name': 'Test Project1',
|
||||
'company': data['company'].id,
|
||||
}])
|
||||
work2, = self.Work.create([{
|
||||
'name': 'Test Project2',
|
||||
'company': data['company'].id,
|
||||
}])
|
||||
|
||||
project1, = self.Project.create([{
|
||||
'work': work1.id,
|
||||
'type': 'project',
|
||||
'parent': False,
|
||||
'state': 'opened',
|
||||
'participants': [('set', [data['registered_user1'].id])]
|
||||
}])
|
||||
project2, = self.Project.create([{
|
||||
'work': work2.id,
|
||||
'type': 'project',
|
||||
'parent': False,
|
||||
'state': 'opened',
|
||||
'participants': [('set', [data['registered_user2'].id])]
|
||||
}])
|
||||
project_model, = self.Model.search([
|
||||
('model', '=', 'project.work')
|
||||
])
|
||||
|
||||
# Create activities for project 1 the user is part of
|
||||
self.Activity.create([{
|
||||
'verb': 'Add project 1',
|
||||
'actor': self.nereid_user_actor.id,
|
||||
'object_': 'project.work,%s' % project1.id,
|
||||
'project': project1.id,
|
||||
}])
|
||||
|
||||
self.Activity.create([{
|
||||
'verb': 'Add project 1 again',
|
||||
'actor': self.nereid_user_actor.id,
|
||||
'object_': 'project.work,%s' % project1.id,
|
||||
'project': project1.id,
|
||||
}])
|
||||
|
||||
# Create activity for project 2
|
||||
self.Activity.create([{
|
||||
'verb': 'Add project 2',
|
||||
'actor': self.nereid_user_actor.id,
|
||||
'object_': 'project.work,%s' % project2.id,
|
||||
'project': project2.id,
|
||||
}])
|
||||
|
||||
with app.test_client() as c:
|
||||
# Login Success
|
||||
rv = c.post('/en_US/login', data={
|
||||
'email': 'email@example.com',
|
||||
'password': 'password',
|
||||
})
|
||||
self.assertEqual(rv.status_code, 302)
|
||||
|
||||
# Stream after login
|
||||
rv = c.get('/en_US/user/activity-stream')
|
||||
self.assertEqual(rv.status_code, 200)
|
||||
rv_json = json.loads(rv.data)
|
||||
|
||||
# There are 2 activities for project-1 and 1 activity for
|
||||
# project-2
|
||||
# So only 2 activities are returned since user is participant
|
||||
# of project-1 only
|
||||
self.assertEqual(rv_json['totalItems'], 2)
|
||||
self.assertTrue(
|
||||
filter(
|
||||
lambda item: item['verb'] == 'Add project 1',
|
||||
rv_json['items']
|
||||
)
|
||||
)
|
||||
self.assertTrue(
|
||||
filter(
|
||||
lambda item: item['verb'] == 'Add project 1 again',
|
||||
rv_json['items']
|
||||
)
|
||||
)
|
||||
|
||||
# Activity stream for project-2 should not be there
|
||||
self.assertFalse(
|
||||
filter(
|
||||
lambda item: item['verb'] == 'Add project 2',
|
||||
rv_json['items']
|
||||
)
|
||||
)
|
||||
|
||||
def test_0200_stream_without_project(self):
|
||||
'''
|
||||
Tests if user is not part of a project then he must be able to see all
|
||||
the activity streams created by him
|
||||
'''
|
||||
with Transaction().start(DB_NAME, USER, context=CONTEXT):
|
||||
data = self.create_defaults()
|
||||
app = self.get_app()
|
||||
|
||||
work1, = self.Work.create([{
|
||||
'name': 'Test Project1',
|
||||
'company': data['company'].id,
|
||||
}])
|
||||
work2, = self.Work.create([{
|
||||
'name': 'Test Project2',
|
||||
'company': data['company'].id,
|
||||
}])
|
||||
|
||||
project1, = self.Project.create([{
|
||||
'work': work1.id,
|
||||
'type': 'project',
|
||||
'parent': False,
|
||||
'state': 'opened',
|
||||
}])
|
||||
project2, = self.Project.create([{
|
||||
'work': work2.id,
|
||||
'type': 'project',
|
||||
'parent': False,
|
||||
'state': 'opened',
|
||||
'participants': [('set', [data['registered_user1'].id])]
|
||||
}])
|
||||
project_model, = self.Model.search([
|
||||
('model', '=', 'project.work')
|
||||
])
|
||||
|
||||
# Activities created by logged-in user
|
||||
self.Activity.create([{
|
||||
'verb': 'Add project 1',
|
||||
'actor': data['registered_user1'].id,
|
||||
'object_': 'project.work,%s' % project1.id,
|
||||
'project': project1.id,
|
||||
}])
|
||||
|
||||
self.Activity.create([{
|
||||
'verb': 'Add project 1 again',
|
||||
'actor': data['registered_user1'].id,
|
||||
'object_': 'project.work,%s' % project2.id,
|
||||
}])
|
||||
|
||||
# Create activity for different user
|
||||
self.Activity.create([{
|
||||
'verb': 'Add project 2',
|
||||
'actor': self.nereid_user_actor.id,
|
||||
'object_': 'project.work,%s' % project2.id,
|
||||
}])
|
||||
|
||||
with app.test_client() as c:
|
||||
# Login Success
|
||||
rv = c.post('/en_US/login', data={
|
||||
'email': 'email@example.com',
|
||||
'password': 'password',
|
||||
})
|
||||
self.assertEqual(rv.status_code, 302)
|
||||
|
||||
# Stream after login
|
||||
rv = c.get('/en_US/user/activity-stream')
|
||||
self.assertEqual(rv.status_code, 200)
|
||||
rv_json = json.loads(rv.data)
|
||||
|
||||
# Only two activities are created by logged-in user
|
||||
self.assertEqual(rv_json['totalItems'], 2)
|
||||
self.assertTrue(
|
||||
filter(
|
||||
lambda item: item['verb'] == 'Add project 1',
|
||||
rv_json['items']
|
||||
)
|
||||
)
|
||||
self.assertTrue(
|
||||
filter(
|
||||
lambda item: item['verb'] == 'Add project 1 again',
|
||||
rv_json['items']
|
||||
)
|
||||
)
|
||||
|
||||
# Activity stream created by different user should not be there
|
||||
self.assertFalse(
|
||||
filter(
|
||||
lambda item: item['verb'] == 'Add project 2',
|
||||
rv_json['items']
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
def suite():
|
||||
"Nereid test suite"
|
||||
|
|
Loading…
Reference in New Issue