diff --git a/addons/portal_project/tests/test_access_rights.py b/addons/portal_project/tests/test_access_rights.py index bbf029a72d7..1b98a140b68 100644 --- a/addons/portal_project/tests/test_access_rights.py +++ b/addons/portal_project/tests/test_access_rights.py @@ -24,10 +24,10 @@ from openerp.osv.orm import except_orm from openerp.tools import mute_logger -class TestPortalProject(TestProjectBase): +class TestPortalProjectBase(TestProjectBase): def setUp(self): - super(TestPortalProject, self).setUp() + super(TestPortalProjectBase, self).setUp() cr, uid = self.cr, self.uid # Find Portal group @@ -40,42 +40,37 @@ class TestPortalProject(TestProjectBase): # # Test users to use through the various tests self.user_portal_id = self.res_users.create(cr, uid, { - 'name': 'Chell Portal', - 'login': 'chell', - 'alias_name': 'chell', - 'groups_id': [(6, 0, [self.group_portal_id])] - }) + 'name': 'Chell Portal', + 'login': 'chell', + 'alias_name': 'chell', + 'groups_id': [(6, 0, [self.group_portal_id])] + }) self.user_anonymous_id = self.res_users.create(cr, uid, { - 'name': 'Donovan Anonymous', - 'login': 'donovan', - 'alias_name': 'donovan', - 'groups_id': [(6, 0, [self.group_anonymous_id])] - }) + 'name': 'Donovan Anonymous', + 'login': 'donovan', + 'alias_name': 'donovan', + 'groups_id': [(6, 0, [self.group_anonymous_id])] + }) # Test 'Pigs' project - self.project_pigs_id = self.project_project.create(cr, uid, - {'name': 'Pigs', 'privacy_visibility': 'public'}, - {'mail_create_nolog': True}) + self.project_pigs_id = self.project_project.create(cr, uid, { + 'name': 'Pigs', 'privacy_visibility': 'public'}, {'mail_create_nolog': True}) # Various test tasks - self.task_1_id = self.project_task.create(cr, uid, - {'name': 'Test1', 'user_id': False, 'project_id': self.project_pigs_id}, - {'mail_create_nolog': True}) - self.task_2_id = self.project_task.create(cr, uid, - {'name': 'Test2', 'user_id': False, 'project_id': self.project_pigs_id}, - {'mail_create_nolog': True}) - self.task_3_id = self.project_task.create(cr, uid, - {'name': 'Test3', 'user_id': False, 'project_id': self.project_pigs_id}, - {'mail_create_nolog': True}) - self.task_4_id = self.project_task.create(cr, uid, - {'name': 'Test4', 'user_id': self.user_projectuser_id, 'project_id': self.project_pigs_id}, - {'mail_create_nolog': True}) - self.task_5_id = self.project_task.create(cr, uid, - {'name': 'Test5', 'user_id': self.user_portal_id, 'project_id': self.project_pigs_id}, - {'mail_create_nolog': True}) - self.task_6_id = self.project_task.create(cr, uid, - {'name': 'Test6', 'user_id': self.user_anonymous_id, 'project_id': self.project_pigs_id}, - {'mail_create_nolog': True}) + self.task_1_id = self.project_task.create(cr, uid, { + 'name': 'Test1', 'user_id': False, 'project_id': self.project_pigs_id}, {'mail_create_nolog': True}) + self.task_2_id = self.project_task.create(cr, uid, { + 'name': 'Test2', 'user_id': False, 'project_id': self.project_pigs_id}, {'mail_create_nolog': True}) + self.task_3_id = self.project_task.create(cr, uid, { + 'name': 'Test3', 'user_id': False, 'project_id': self.project_pigs_id}, {'mail_create_nolog': True}) + self.task_4_id = self.project_task.create(cr, uid, { + 'name': 'Test4', 'user_id': self.user_projectuser_id, 'project_id': self.project_pigs_id}, {'mail_create_nolog': True}) + self.task_5_id = self.project_task.create(cr, uid, { + 'name': 'Test5', 'user_id': self.user_portal_id, 'project_id': self.project_pigs_id}, {'mail_create_nolog': True}) + self.task_6_id = self.project_task.create(cr, uid, { + 'name': 'Test6', 'user_id': self.user_anonymous_id, 'project_id': self.project_pigs_id}, {'mail_create_nolog': True}) + +class TestPortalProject(TestPortalProjectBase): @mute_logger('openerp.addons.base.ir.ir_model', 'openerp.osv.orm') def test_00_project_access_rights(self): """ Test basic project access rights, for project and portal_project """ @@ -91,48 +86,42 @@ class TestPortalProject(TestProjectBase): task_ids = self.project_task.search(cr, self.user_projectuser_id, [('project_id', '=', pigs_id)]) test_task_ids = set([self.task_1_id, self.task_2_id, self.task_3_id, self.task_4_id, self.task_5_id, self.task_6_id]) self.assertEqual(set(task_ids), test_task_ids, - 'access rights: project user cannot see all tasks of a public project') + 'access rights: project user cannot see all tasks of a public project') # Test: all project tasks readable self.project_task.read(cr, self.user_projectuser_id, task_ids, ['name']) # Test: all project tasks writable self.project_task.write(cr, self.user_projectuser_id, task_ids, {'description': 'TestDescription'}) # Do: Bert reads project -> crash, no group - self.assertRaises(except_orm, self.project_project.read, - cr, self.user_none_id, pigs_id, ['name']) + self.assertRaises(except_orm, self.project_project.read, cr, self.user_none_id, pigs_id, ['name']) # Test: no project task visible - self.assertRaises(except_orm, self.project_task.search, - cr, self.user_none_id, [('project_id', '=', pigs_id)]) + self.assertRaises(except_orm, self.project_task.search, cr, self.user_none_id, [('project_id', '=', pigs_id)]) # Test: no project task readable - self.assertRaises(except_orm, self.project_task.read, - cr, self.user_none_id, task_ids, ['name']) + self.assertRaises(except_orm, self.project_task.read, cr, self.user_none_id, task_ids, ['name']) # Test: no project task writable - self.assertRaises(except_orm, self.project_task.write, - cr, self.user_none_id, task_ids, {'description': 'TestDescription'}) + self.assertRaises(except_orm, self.project_task.write, cr, self.user_none_id, task_ids, {'description': 'TestDescription'}) # Do: Chell reads project -> ok (portal ok public) self.project_project.read(cr, self.user_portal_id, pigs_id, ['name']) # Test: all project tasks visible task_ids = self.project_task.search(cr, self.user_portal_id, [('project_id', '=', pigs_id)]) self.assertEqual(set(task_ids), test_task_ids, - 'access rights: project user cannot see all tasks of a public project') + 'access rights: project user cannot see all tasks of a public project') # Test: all project tasks readable self.project_task.read(cr, self.user_portal_id, task_ids, ['name']) # Test: no project task writable - self.assertRaises(except_orm, self.project_task.write, - cr, self.user_portal_id, task_ids, {'description': 'TestDescription'}) + self.assertRaises(except_orm, self.project_task.write, cr, self.user_portal_id, task_ids, {'description': 'TestDescription'}) # Do: Donovan reads project -> ok (anonymous ok public) self.project_project.read(cr, self.user_anonymous_id, pigs_id, ['name']) # Test: all project tasks visible task_ids = self.project_task.search(cr, self.user_anonymous_id, [('project_id', '=', pigs_id)]) self.assertEqual(set(task_ids), test_task_ids, - 'access rights: anonymous user cannot see all tasks of a public project') + 'access rights: anonymous user cannot see all tasks of a public project') # Test: all project tasks readable self.project_task.read(cr, self.user_anonymous_id, task_ids, ['name']) # Test: no project task writable - self.assertRaises(except_orm, self.project_task.write, - cr, self.user_anonymous_id, task_ids, {'description': 'TestDescription'}) + self.assertRaises(except_orm, self.project_task.write, cr, self.user_anonymous_id, task_ids, {'description': 'TestDescription'}) # ---------------------------------------- # CASE2: portal project @@ -144,14 +133,12 @@ class TestPortalProject(TestProjectBase): # Test: all project tasks visible task_ids = self.project_task.search(cr, self.user_projectuser_id, [('project_id', '=', pigs_id)]) self.assertEqual(set(task_ids), test_task_ids, - 'access rights: project user cannot see all tasks of a portal project') + 'access rights: project user cannot see all tasks of a portal project') # Do: Bert reads project -> crash, no group - self.assertRaises(except_orm, self.project_project.read, - cr, self.user_none_id, pigs_id, ['name']) + self.assertRaises(except_orm, self.project_project.read, cr, self.user_none_id, pigs_id, ['name']) # Test: no project task searchable - self.assertRaises(except_orm, self.project_task.search, - cr, self.user_none_id, [('project_id', '=', pigs_id)]) + self.assertRaises(except_orm, self.project_task.search, cr, self.user_none_id, [('project_id', '=', pigs_id)]) # Data: task follower self.project_task.message_subscribe_users(cr, self.user_projectuser_id, [self.task_1_id, self.task_3_id], [self.user_portal_id]) @@ -162,11 +149,10 @@ class TestPortalProject(TestProjectBase): task_ids = self.project_task.search(cr, self.user_portal_id, [('project_id', '=', pigs_id)]) test_task_ids = set([self.task_1_id, self.task_3_id, self.task_5_id]) self.assertEqual(set(task_ids), test_task_ids, - 'access rights: portal user should see the followed tasks of a portal project') + 'access rights: portal user should see the followed tasks of a portal project') # Do: Donovan reads project -> ko (anonymous ko portal) - self.assertRaises(except_orm, self.project_project.read, - cr, self.user_anonymous_id, pigs_id, ['name']) + self.assertRaises(except_orm, self.project_project.read, cr, self.user_anonymous_id, pigs_id, ['name']) # Test: no project task visible task_ids = self.project_task.search(cr, self.user_anonymous_id, [('project_id', '=', pigs_id)]) self.assertFalse(task_ids, 'access rights: anonymous user should not see tasks of a portal project') @@ -185,22 +171,19 @@ class TestPortalProject(TestProjectBase): task_ids = self.project_task.search(cr, self.user_projectuser_id, [('project_id', '=', pigs_id)]) test_task_ids = set([self.task_1_id, self.task_2_id, self.task_3_id, self.task_4_id, self.task_5_id, self.task_6_id]) self.assertEqual(set(task_ids), test_task_ids, - 'access rights: project user cannot see all tasks of an employees project') + 'access rights: project user cannot see all tasks of an employees project') # Do: Bert reads project -> crash, no group - self.assertRaises(except_orm, self.project_project.read, - cr, self.user_none_id, pigs_id, ['name']) + self.assertRaises(except_orm, self.project_project.read, cr, self.user_none_id, pigs_id, ['name']) # Do: Chell reads project -> ko (portal ko employee) - self.assertRaises(except_orm, self.project_project.read, - cr, self.user_portal_id, pigs_id, ['name']) + self.assertRaises(except_orm, self.project_project.read, cr, self.user_portal_id, pigs_id, ['name']) # Test: no project task visible + assigned task_ids = self.project_task.search(cr, self.user_portal_id, [('project_id', '=', pigs_id)]) self.assertFalse(task_ids, 'access rights: portal user should not see tasks of an employees project, even if assigned') # Do: Donovan reads project -> ko (anonymous ko employee) - self.assertRaises(except_orm, self.project_project.read, - cr, self.user_anonymous_id, pigs_id, ['name']) + self.assertRaises(except_orm, self.project_project.read, cr, self.user_anonymous_id, pigs_id, ['name']) # Test: no project task visible task_ids = self.project_task.search(cr, self.user_anonymous_id, [('project_id', '=', pigs_id)]) self.assertFalse(task_ids, 'access rights: anonymous user should not see tasks of an employees project') @@ -211,30 +194,26 @@ class TestPortalProject(TestProjectBase): self.project_project.write(cr, uid, [pigs_id], {'privacy_visibility': 'followers'}) # Do: Alfred reads project -> ko (employee ko followers) - self.assertRaises(except_orm, self.project_project.read, - cr, self.user_projectuser_id, pigs_id, ['name']) + self.assertRaises(except_orm, self.project_project.read, cr, self.user_projectuser_id, pigs_id, ['name']) # Test: no project task visible task_ids = self.project_task.search(cr, self.user_projectuser_id, [('project_id', '=', pigs_id)]) test_task_ids = set([self.task_4_id]) self.assertEqual(set(task_ids), test_task_ids, - 'access rights: employee user should not see tasks of a not-followed followers project, only assigned') + 'access rights: employee user should not see tasks of a not-followed followers project, only assigned') # Do: Bert reads project -> crash, no group - self.assertRaises(except_orm, self.project_project.read, - cr, self.user_none_id, pigs_id, ['name']) + self.assertRaises(except_orm, self.project_project.read, cr, self.user_none_id, pigs_id, ['name']) # Do: Chell reads project -> ko (portal ko employee) - self.assertRaises(except_orm, self.project_project.read, - cr, self.user_portal_id, pigs_id, ['name']) + self.assertRaises(except_orm, self.project_project.read, cr, self.user_portal_id, pigs_id, ['name']) # Test: no project task visible task_ids = self.project_task.search(cr, self.user_portal_id, [('project_id', '=', pigs_id)]) test_task_ids = set([self.task_5_id]) self.assertEqual(set(task_ids), test_task_ids, - 'access rights: portal user should not see tasks of a not-followed followers project, only assigned') + 'access rights: portal user should not see tasks of a not-followed followers project, only assigned') # Do: Donovan reads project -> ko (anonymous ko employee) - self.assertRaises(except_orm, self.project_project.read, - cr, self.user_anonymous_id, pigs_id, ['name']) + self.assertRaises(except_orm, self.project_project.read, cr, self.user_anonymous_id, pigs_id, ['name']) # Test: no project task visible task_ids = self.project_task.search(cr, self.user_anonymous_id, [('project_id', '=', pigs_id)]) self.assertFalse(task_ids, 'access rights: anonymous user should not see tasks of a followers project') @@ -249,7 +228,7 @@ class TestPortalProject(TestProjectBase): task_ids = self.project_task.search(cr, self.user_projectuser_id, [('project_id', '=', pigs_id)]) test_task_ids = set([self.task_1_id, self.task_3_id, self.task_4_id]) self.assertEqual(set(task_ids), test_task_ids, - 'access rights: employee user should not see followed + assigned tasks of a follower project') + 'access rights: employee user should not see followed + assigned tasks of a follower project') # Do: Chell reads project -> ok (follower ok follower) self.project_project.read(cr, self.user_portal_id, pigs_id, ['name']) @@ -257,8 +236,7 @@ class TestPortalProject(TestProjectBase): task_ids = self.project_task.search(cr, self.user_portal_id, [('project_id', '=', pigs_id)]) test_task_ids = set([self.task_1_id, self.task_3_id, self.task_5_id]) self.assertEqual(set(task_ids), test_task_ids, - 'access rights: employee user should not see followed + assigned tasks of a follower project') + 'access rights: employee user should not see followed + assigned tasks of a follower project') # Do: Donovan reads project -> ko (anonymous ko follower even if follower) - self.assertRaises(except_orm, self.project_project.read, - cr, self.user_anonymous_id, pigs_id, ['name']) + self.assertRaises(except_orm, self.project_project.read, cr, self.user_anonymous_id, pigs_id, ['name']) diff --git a/addons/portal_project_issue/tests/test_access_rights.py b/addons/portal_project_issue/tests/test_access_rights.py index 28d337a4965..a7721b489a0 100644 --- a/addons/portal_project_issue/tests/test_access_rights.py +++ b/addons/portal_project_issue/tests/test_access_rights.py @@ -19,40 +19,36 @@ # ############################################################################## -from openerp.addons.portal_project.tests.test_access_rights import TestPortalProject +from openerp.addons.portal_project.tests.test_access_rights import TestPortalProjectBase from openerp.osv.orm import except_orm from openerp.tools import mute_logger -class TestPortalIssueProject(TestPortalProject): +class TestPortalProjectBase(TestPortalProjectBase): def setUp(self): - super(TestPortalIssueProject, self).setUp() + super(TestPortalProjectBase, self).setUp() cr, uid = self.cr, self.uid # Useful models self.project_issue = self.registry('project.issue') # Various test issues - self.issue_1_id = self.project_issue.create(cr, uid, - {'name': 'Test1', 'user_id': False, 'project_id': self.project_pigs_id}, - {'mail_create_nolog': True}) - self.issue_2_id = self.project_issue.create(cr, uid, - {'name': 'Test2', 'user_id': False, 'project_id': self.project_pigs_id}, - {'mail_create_nolog': True}) - self.issue_3_id = self.project_issue.create(cr, uid, - {'name': 'Test3', 'user_id': False, 'project_id': self.project_pigs_id}, - {'mail_create_nolog': True}) - self.issue_4_id = self.project_issue.create(cr, uid, - {'name': 'Test4', 'user_id': self.user_alfred_id, 'project_id': self.project_pigs_id}, - {'mail_create_nolog': True}) - self.issue_5_id = self.project_issue.create(cr, uid, - {'name': 'Test5', 'user_id': self.user_chell_id, 'project_id': self.project_pigs_id}, - {'mail_create_nolog': True}) - self.issue_6_id = self.project_issue.create(cr, uid, - {'name': 'Test6', 'user_id': self.user_donovan_id, 'project_id': self.project_pigs_id}, - {'mail_create_nolog': True}) + self.issue_1_id = self.project_issue.create(cr, uid, { + 'name': 'Test1', 'user_id': False, 'project_id': self.project_pigs_id}, {'mail_create_nolog': True}) + self.issue_2_id = self.project_issue.create(cr, uid, { + 'name': 'Test2', 'user_id': False, 'project_id': self.project_pigs_id}, {'mail_create_nolog': True}) + self.issue_3_id = self.project_issue.create(cr, uid, { + 'name': 'Test3', 'user_id': False, 'project_id': self.project_pigs_id}, {'mail_create_nolog': True}) + self.issue_4_id = self.project_issue.create(cr, uid, { + 'name': 'Test4', 'user_id': self.user_projectuser_id, 'project_id': self.project_pigs_id}, {'mail_create_nolog': True}) + self.issue_5_id = self.project_issue.create(cr, uid, { + 'name': 'Test5', 'user_id': self.user_portal_id, 'project_id': self.project_pigs_id}, {'mail_create_nolog': True}) + self.issue_6_id = self.project_issue.create(cr, uid, { + 'name': 'Test6', 'user_id': self.user_anonymous_id, 'project_id': self.project_pigs_id}, {'mail_create_nolog': True}) + +class TestPortalIssue(TestPortalProjectBase): @mute_logger('openerp.addons.base.ir.ir_model', 'openerp.osv.orm') def test_00_project_access_rights(self): """ Test basic project access rights, for project and portal_project """ @@ -64,42 +60,38 @@ class TestPortalIssueProject(TestPortalProject): # Do: Alfred reads project -> ok (employee ok public) # Test: all project issues visible - issue_ids = self.project_issue.search(cr, self.user_alfred_id, [('project_id', '=', pigs_id)]) + issue_ids = self.project_issue.search(cr, self.user_projectuser_id, [('project_id', '=', pigs_id)]) test_issue_ids = set([self.issue_1_id, self.issue_2_id, self.issue_3_id, self.issue_4_id, self.issue_5_id, self.issue_6_id]) self.assertEqual(set(issue_ids), test_issue_ids, - 'access rights: project user cannot see all issues of a public project') + 'access rights: project user cannot see all issues of a public project') # Test: all project issues readable - self.project_issue.read(cr, self.user_alfred_id, issue_ids, ['name']) + self.project_issue.read(cr, self.user_projectuser_id, issue_ids, ['name']) # Test: all project issues writable - self.project_issue.write(cr, self.user_alfred_id, issue_ids, {'description': 'TestDescription'}) + self.project_issue.write(cr, self.user_projectuser_id, issue_ids, {'description': 'TestDescription'}) # Do: Bert reads project -> crash, no group # Test: no project issue visible - self.assertRaises(except_orm, self.project_issue.search, - cr, self.user_bert_id, [('project_id', '=', pigs_id)]) + self.assertRaises(except_orm, self.project_issue.search, cr, self.user_none_id, [('project_id', '=', pigs_id)]) # Test: no project issue readable - self.assertRaises(except_orm, self.project_issue.read, - cr, self.user_bert_id, issue_ids, ['name']) + self.assertRaises(except_orm, self.project_issue.read, cr, self.user_none_id, issue_ids, ['name']) # Test: no project issue writable - self.assertRaises(except_orm, self.project_issue.write, - cr, self.user_bert_id, issue_ids, {'description': 'TestDescription'}) + self.assertRaises(except_orm, self.project_issue.write, cr, self.user_none_id, issue_ids, {'description': 'TestDescription'}) # Do: Chell reads project -> ok (portal ok public) # Test: all project issues visible - issue_ids = self.project_issue.search(cr, self.user_chell_id, [('project_id', '=', pigs_id)]) + issue_ids = self.project_issue.search(cr, self.user_portal_id, [('project_id', '=', pigs_id)]) self.assertEqual(set(issue_ids), test_issue_ids, - 'access rights: project user cannot see all issues of a public project') + 'access rights: project user cannot see all issues of a public project') # Test: all project issues readable - self.project_issue.read(cr, self.user_chell_id, issue_ids, ['name']) + self.project_issue.read(cr, self.user_portal_id, issue_ids, ['name']) # Test: no project issue writable - self.assertRaises(except_orm, self.project_issue.write, - cr, self.user_chell_id, issue_ids, {'description': 'TestDescription'}) + self.assertRaises(except_orm, self.project_issue.write, cr, self.user_portal_id, issue_ids, {'description': 'TestDescription'}) # Do: Donovan reads project -> ok (anonymous ok public) # Test: all project issues visible - issue_ids = self.project_issue.search(cr, self.user_donovan_id, [('project_id', '=', pigs_id)]) + issue_ids = self.project_issue.search(cr, self.user_anonymous_id, [('project_id', '=', pigs_id)]) self.assertEqual(set(issue_ids), test_issue_ids, - 'access rights: project user cannot see all issues of a public project') + 'access rights: project user cannot see all issues of a public project') # ---------------------------------------- # CASE2: portal project @@ -108,27 +100,26 @@ class TestPortalIssueProject(TestPortalProject): # Do: Alfred reads project -> ok (employee ok public) # Test: all project issues visible - issue_ids = self.project_issue.search(cr, self.user_alfred_id, [('project_id', '=', pigs_id)]) + issue_ids = self.project_issue.search(cr, self.user_projectuser_id, [('project_id', '=', pigs_id)]) self.assertEqual(set(issue_ids), test_issue_ids, - 'access rights: project user cannot see all issues of a portal project') + 'access rights: project user cannot see all issues of a portal project') # Do: Bert reads project -> crash, no group # Test: no project issue searchable - self.assertRaises(except_orm, self.project_issue.search, - cr, self.user_bert_id, [('project_id', '=', pigs_id)]) + self.assertRaises(except_orm, self.project_issue.search, cr, self.user_none_id, [('project_id', '=', pigs_id)]) # Data: issue follower - self.project_issue.message_subscribe_users(cr, self.user_alfred_id, [self.issue_1_id, self.issue_3_id], [self.user_chell_id]) + self.project_issue.message_subscribe_users(cr, self.user_projectuser_id, [self.issue_1_id, self.issue_3_id], [self.user_portal_id]) # Do: Chell reads project -> ok (portal ok public) # Test: only followed project issues visible + assigned - issue_ids = self.project_issue.search(cr, self.user_chell_id, [('project_id', '=', pigs_id)]) + issue_ids = self.project_issue.search(cr, self.user_portal_id, [('project_id', '=', pigs_id)]) test_issue_ids = set([self.issue_1_id, self.issue_3_id, self.issue_5_id]) self.assertEqual(set(issue_ids), test_issue_ids, - 'access rights: portal user should see the followed issues of a portal project') + 'access rights: portal user should see the followed issues of a portal project') # Data: issue follower cleaning - self.project_issue.message_unsubscribe_users(cr, self.user_alfred_id, [self.issue_1_id, self.issue_3_id], [self.user_chell_id]) + self.project_issue.message_unsubscribe_users(cr, self.user_projectuser_id, [self.issue_1_id, self.issue_3_id], [self.user_portal_id]) # ---------------------------------------- # CASE3: employee project @@ -137,14 +128,14 @@ class TestPortalIssueProject(TestPortalProject): # Do: Alfred reads project -> ok (employee ok employee) # Test: all project issues visible - issue_ids = self.project_issue.search(cr, self.user_alfred_id, [('project_id', '=', pigs_id)]) + issue_ids = self.project_issue.search(cr, self.user_projectuser_id, [('project_id', '=', pigs_id)]) test_issue_ids = set([self.issue_1_id, self.issue_2_id, self.issue_3_id, self.issue_4_id, self.issue_5_id, self.issue_6_id]) self.assertEqual(set(issue_ids), test_issue_ids, - 'access rights: project user cannot see all issues of an employees project') + 'access rights: project user cannot see all issues of an employees project') # Do: Chell reads project -> ko (portal ko employee) # Test: no project issue visible + assigned - issue_ids = self.project_issue.search(cr, self.user_chell_id, [('project_id', '=', pigs_id)]) + issue_ids = self.project_issue.search(cr, self.user_portal_id, [('project_id', '=', pigs_id)]) self.assertFalse(issue_ids, 'access rights: portal user should not see issues of an employees project, even if assigned') # ---------------------------------------- @@ -154,32 +145,32 @@ class TestPortalIssueProject(TestPortalProject): # Do: Alfred reads project -> ko (employee ko followers) # Test: no project issue visible - issue_ids = self.project_issue.search(cr, self.user_alfred_id, [('project_id', '=', pigs_id)]) + issue_ids = self.project_issue.search(cr, self.user_projectuser_id, [('project_id', '=', pigs_id)]) test_issue_ids = set([self.issue_4_id]) self.assertEqual(set(issue_ids), test_issue_ids, - 'access rights: employee user should not see issues of a not-followed followers project, only assigned') + 'access rights: employee user should not see issues of a not-followed followers project, only assigned') # Do: Chell reads project -> ko (portal ko employee) # Test: no project issue visible - issue_ids = self.project_issue.search(cr, self.user_chell_id, [('project_id', '=', pigs_id)]) + issue_ids = self.project_issue.search(cr, self.user_portal_id, [('project_id', '=', pigs_id)]) test_issue_ids = set([self.issue_5_id]) self.assertEqual(set(issue_ids), test_issue_ids, - 'access rights: portal user should not see issues of a not-followed followers project, only assigned') + 'access rights: portal user should not see issues of a not-followed followers project, only assigned') # Data: subscribe Alfred, Chell and Donovan as follower - self.project_project.message_subscribe_users(cr, uid, [pigs_id], [self.user_alfred_id, self.user_chell_id, self.user_donovan_id]) - self.project_issue.message_subscribe_users(cr, self.user_alfred_id, [self.issue_1_id, self.issue_3_id], [self.user_chell_id, self.user_alfred_id]) + self.project_project.message_subscribe_users(cr, uid, [pigs_id], [self.user_projectuser_id, self.user_portal_id, self.user_anonymous_id]) + self.project_issue.message_subscribe_users(cr, self.user_projectuser_id, [self.issue_1_id, self.issue_3_id], [self.user_portal_id, self.user_projectuser_id]) # Do: Alfred reads project -> ok (follower ok followers) # Test: followed + assigned issues visible - issue_ids = self.project_issue.search(cr, self.user_alfred_id, [('project_id', '=', pigs_id)]) + issue_ids = self.project_issue.search(cr, self.user_projectuser_id, [('project_id', '=', pigs_id)]) test_issue_ids = set([self.issue_1_id, self.issue_3_id, self.issue_4_id]) self.assertEqual(set(issue_ids), test_issue_ids, - 'access rights: employee user should not see followed + assigned issues of a follower project') + 'access rights: employee user should not see followed + assigned issues of a follower project') # Do: Chell reads project -> ok (follower ok follower) # Test: followed + assigned issues visible - issue_ids = self.project_issue.search(cr, self.user_chell_id, [('project_id', '=', pigs_id)]) + issue_ids = self.project_issue.search(cr, self.user_portal_id, [('project_id', '=', pigs_id)]) test_issue_ids = set([self.issue_1_id, self.issue_3_id, self.issue_5_id]) self.assertEqual(set(issue_ids), test_issue_ids, - 'access rights: employee user should not see followed + assigned issues of a follower project') + 'access rights: employee user should not see followed + assigned issues of a follower project') diff --git a/addons/project/report/project_report.py b/addons/project/report/project_report.py index def0e0edd97..15b26507ff3 100644 --- a/addons/project/report/project_report.py +++ b/addons/project/report/project_report.py @@ -37,7 +37,6 @@ class report_project_task_user(osv.osv): 'date_end': fields.date('Ending Date', readonly=True), 'date_deadline': fields.date('Deadline', readonly=True), 'date_last_stage_update': fields.date('Last Stage Update', readonly=True), - 'month_last_stage_update': fields.selection(fields.date.MONTHS, 'Month of Last Stage Update', readonly=True), 'project_id': fields.many2one('project.project', 'Project', readonly=True), 'hours_planned': fields.float('Planned Hours', readonly=True), 'hours_effective': fields.float('Effective Hours', readonly=True), @@ -74,7 +73,6 @@ class report_project_task_user(osv.osv): date_trunc('day',t.date_start) as date_start, date_trunc('day',t.date_end) as date_end, date_trunc('day',t.date_last_stage_update) as date_last_stage_update, - to_char(date_last_stage_update, 'MM') as month_last_stage_update, to_date(to_char(t.date_deadline, 'dd-MM-YYYY'),'dd-MM-YYYY') as date_deadline, -- sum(cast(to_char(date_trunc('day',t.date_end) - date_trunc('day',t.date_start),'DD') as int)) as no_of_days, abs((extract('epoch' from (t.date_end-t.date_start)))/(3600*24)) as no_of_days, @@ -112,7 +110,6 @@ class report_project_task_user(osv.osv): date_end, date_deadline, date_last_stage_update, - month_last_stage_update, t.user_id, t.project_id, t.priority, diff --git a/addons/project/report/project_report_view.xml b/addons/project/report/project_report_view.xml index 2e113dfd04f..d5638e332a4 100644 --- a/addons/project/report/project_report_view.xml +++ b/addons/project/report/project_report_view.xml @@ -19,7 +19,6 @@ - @@ -82,7 +81,7 @@ - + diff --git a/addons/project/tests/test_project_flow.py b/addons/project/tests/test_project_flow.py index a78bd6de156..a037c92d2ae 100644 --- a/addons/project/tests/test_project_flow.py +++ b/addons/project/tests/test_project_flow.py @@ -135,9 +135,11 @@ class TestProjectFlow(TestProjectBase): self.assertEqual(res[0].get('create_uid'), uid, 'project: message_process: task should have been created by uid as alias_user_id is False on the alias') # Test: messages - self.assertEqual(len(task.message_ids), 2, + self.assertEqual(len(task.message_ids), 3, 'project: message_process: newly created task should have 2 messages: creation and email') - self.assertEqual(task.message_ids[1].subtype_id.name, 'Task Created', + self.assertEqual(task.message_ids[2].subtype_id.name, 'Task Created', + 'project: message_process: first message of new task should have Task Created subtype') + self.assertEqual(task.message_ids[1].subtype_id.name, 'Task Assigned', 'project: message_process: first message of new task should have Task Created subtype') self.assertEqual(task.message_ids[0].author_id.id, self.email_partner_id, 'project: message_process: second message should be the one from Agrolait (partner failed)') diff --git a/addons/project_issue/report/project_issue_report.py b/addons/project_issue/report/project_issue_report.py index 496aa819ee2..5f59b51f290 100644 --- a/addons/project_issue/report/project_issue_report.py +++ b/addons/project_issue/report/project_issue_report.py @@ -37,6 +37,7 @@ class project_issue_report(osv.osv): 'opening_date': fields.date('Date of Opening', readonly=True), 'creation_date': fields.date('Creation Date', readonly=True), 'date_closed': fields.date('Date of Closing', readonly=True), + 'date_last_stage_update': fields.date('Last Stage Update', readonly=True), 'stage_id': fields.many2one('project.task.type', 'Stage'), 'nbr': fields.integer('# of Issues', readonly=True), 'working_hours_open': fields.float('Avg. Working Hours to Open', readonly=True, group_operator="avg"), @@ -67,6 +68,7 @@ class project_issue_report(osv.osv): to_char(c.create_date, 'YYYY-MM-DD') as day, to_char(c.date_open, 'YYYY-MM-DD') as opening_date, to_char(c.create_date, 'YYYY-MM-DD') as creation_date, + date_trunc('day',c.date_last_stage_update) as date_last_stage_update, c.user_id, c.working_hours_open, c.working_hours_close, diff --git a/addons/project_issue/report/project_issue_report_view.xml b/addons/project_issue/report/project_issue_report_view.xml index a2956bd0999..f9ca7168841 100644 --- a/addons/project_issue/report/project_issue_report_view.xml +++ b/addons/project_issue/report/project_issue_report_view.xml @@ -20,6 +20,7 @@ + @@ -70,6 +71,7 @@ +