From 9b41f8fadcf09935e02a115316002c3303c209bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 10 Jul 2013 12:15:08 +0200 Subject: [TESTS] project: refactored tests. Moved surviving yml tests into unittest; added mailgateway test. bzr revid: tde@openerp.com-20130710101508-62eh89gzq22qvpq5 --- addons/project/tests/test_project_flow.py | 160 ++++++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 addons/project/tests/test_project_flow.py (limited to 'addons/project/tests/test_project_flow.py') diff --git a/addons/project/tests/test_project_flow.py b/addons/project/tests/test_project_flow.py new file mode 100644 index 00000000000..c0d7748ef83 --- /dev/null +++ b/addons/project/tests/test_project_flow.py @@ -0,0 +1,160 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Business Applications +# Copyright (c) 2013-TODAY OpenERP S.A. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +from openerp.addons.project.tests.test_project_base import TestProjectBase +from openerp.osv.orm import except_orm +from openerp.tools import mute_logger + + +EMAIL_TPL = """Return-Path: +X-Original-To: {email_to} +Delivered-To: {email_to} +To: {email_to} +Received: by mail1.openerp.com (Postfix, from userid 10002) + id 5DF9ABFB2A; Fri, 10 Aug 2012 16:16:39 +0200 (CEST) +Message-ID: {msg_id} +Date: Tue, 29 Nov 2011 12:43:21 +0530 +From: {email_from} +MIME-Version: 1.0 +Subject: {subject} +Content-Type: text/plain; charset=ISO-8859-1; format=flowed + +Hello, + +This email should create a new entry in your module. Please check that it +effectively works. + +Thanks, + +-- +Raoul Boitempoils +Integrator at Agrolait""" + + +class TestProjectFlow(TestProjectBase): + + @mute_logger('openerp.addons.base.ir.ir_model', 'openerp.osv.orm') + def test_00_project_process(self): + """ Testing project management """ + cr, uid, user_projectuser_id, user_projectmanager_id, project_pigs_id = self.cr, self.uid, self.user_projectuser_id, self.user_projectmanager_id, self.project_pigs_id + + # ProjectUser: set project as template -> raise + self.assertRaises(except_orm, self.project_project.set_template, cr, user_projectuser_id, [project_pigs_id]) + + # Other tests are done using a ProjectManager + project = self.project_project.browse(cr, user_projectmanager_id, project_pigs_id) + self.assertNotEqual(project.state, 'template', 'project: incorrect state, should not be a template') + + # Set test project as template + self.project_project.set_template(cr, user_projectmanager_id, [project_pigs_id]) + project.refresh() + self.assertEqual(project.state, 'template', 'project: set_template: project state should be template') + self.assertEqual(len(project.tasks), 0, 'project: set_template: project tasks should have been set inactive') + + # Duplicate template + new_template_act = self.project_project.duplicate_template(cr, user_projectmanager_id, [project_pigs_id]) + new_project = self.project_project.browse(cr, user_projectmanager_id, new_template_act['res_id']) + self.assertEqual(new_project.state, 'open', 'project: incorrect duplicate_template') + self.assertEqual(len(new_project.tasks), 2, 'project: duplicating a project template should duplicate its tasks') + + # Convert into real project + self.project_project.reset_project(cr, user_projectmanager_id, [project_pigs_id]) + project.refresh() + self.assertEqual(project.state, 'open', 'project: resetted project should be in open state') + self.assertEqual(len(project.tasks), 2, 'project: reset_project: project tasks should have been set active') + + # Put as pending + self.project_project.set_pending(cr, user_projectmanager_id, [project_pigs_id]) + project.refresh() + self.assertEqual(project.state, 'pending', 'project: should be in pending state') + + # Re-open + self.project_project.set_open(cr, user_projectmanager_id, [project_pigs_id]) + project.refresh() + self.assertEqual(project.state, 'open', 'project: reopened project should be in open state') + + # Close project + self.project_project.set_done(cr, user_projectmanager_id, [project_pigs_id]) + project.refresh() + self.assertEqual(project.state, 'close', 'project: closed project should be in close state') + + # Re-open + self.project_project.set_open(cr, user_projectmanager_id, [project_pigs_id]) + project.refresh() + + # Re-convert into a template and schedule tasks + self.project_project.set_template(cr, user_projectmanager_id, [project_pigs_id]) + self.project_project.schedule_tasks(cr, user_projectmanager_id, [project_pigs_id]) + + # Copy the project + new_project_id = self.project_project.copy(cr, user_projectmanager_id, project_pigs_id) + new_project = self.project_project.browse(cr, user_projectmanager_id, new_project_id) + self.assertEqual(len(new_project.tasks), 2, 'project: copied project should have copied task') + + # Cancel the project + self.project_project.set_cancel(cr, user_projectmanager_id, [project_pigs_id]) + self.assertEqual(project.state, 'cancelled', 'project: cancelled project should be in cancel state') + + def test_10_task_process(self): + """ Testing task creation and management """ + cr, uid, user_projectuser_id, user_projectmanager_id, project_pigs_id = self.cr, self.uid, self.user_projectuser_id, self.user_projectmanager_id, self.project_pigs_id + + def format_and_process(template, email_to='project+pigs@mydomain.com, other@gmail.com', subject='Frogs', + email_from='Patrick Ratatouille ', + msg_id='<1198923581.41972151344608186760.JavaMail@agrolait.com>'): + self.assertEqual(self.project_task.search(cr, uid, [('name', '=', subject)]), []) + mail = template.format(email_to=email_to, subject=subject, email_from=email_from, msg_id=msg_id) + self.mail_thread.message_process(cr, uid, None, mail) + return self.project_task.search(cr, uid, [('name', '=', subject)]) + + # Do: incoming mail from an unknown partner on an alias creates a new task 'Frogs' + frogs = format_and_process(EMAIL_TPL) + + # Test: one task created by mailgateway administrator + self.assertEqual(len(frogs), 1, 'project: message_process: a new project.task should have been created') + task = self.project_task.browse(cr, user_projectuser_id, frogs[0]) + res = self.project_task.perm_read(cr, uid, [task.id], details=False) + 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, + 'project: message_process: newly created task should have 2 messages: creation and email') + self.assertEqual(task.message_ids[1].subtype_id.name, 'Task Created', + '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)') + self.assertEqual(task.message_ids[0].subject, 'Frogs', + 'project: message_process: second message should be the one from Agrolait (subject failed)') + # Test: task content + self.assertEqual(task.name, 'Frogs', 'project_task: name should be the email subject') + self.assertEqual(task.project_id.id, self.project_pigs_id, 'project_task: incorrect project') + + # Open the delegation wizard + delegate_id = self.project_task_delegate.create(cr, user_projectuser_id, { + 'user_id': user_projectuser_id, + 'planned_hours': 12.0, + 'planned_hours_me': 2.0, + }, {'active_id': task.id}) + self.project_task_delegate.delegate(cr, user_projectuser_id, [delegate_id], {'active_id': task.id}) + + # Check delegation details + task.refresh() + self.assertEqual(task.planned_hours, 2, 'project_task_delegate: planned hours is not correct after delegation') -- cgit v1.2.3 From 4b0baa3615aee3e528ccef0b60142ba7acb7976f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 10 Jul 2013 14:25:26 +0200 Subject: [CLEAN] project, project_issue, project_mrp: misc cleaning of code + fixed bug in project_mrp + re-added commentred tests in project_mrp bzr revid: tde@openerp.com-20130710122526-tf87avul7huqgigg --- addons/project/tests/test_project_flow.py | 1 + 1 file changed, 1 insertion(+) (limited to 'addons/project/tests/test_project_flow.py') diff --git a/addons/project/tests/test_project_flow.py b/addons/project/tests/test_project_flow.py index c0d7748ef83..a78bd6de156 100644 --- a/addons/project/tests/test_project_flow.py +++ b/addons/project/tests/test_project_flow.py @@ -146,6 +146,7 @@ class TestProjectFlow(TestProjectBase): # Test: task content self.assertEqual(task.name, 'Frogs', 'project_task: name should be the email subject') self.assertEqual(task.project_id.id, self.project_pigs_id, 'project_task: incorrect project') + self.assertEqual(task.stage_id.sequence, 1, 'project_task: should have a stage with sequence=1') # Open the delegation wizard delegate_id = self.project_task_delegate.create(cr, user_projectuser_id, { -- cgit v1.2.3 From 98ec74dd62cde93c91d3a05194845d4e8ea17e9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 10 Jul 2013 15:29:54 +0200 Subject: [IMP] project_issue: added date_last_stage_update in reports; removed month_last_stgae_update in project_task, only date is sufficient because reports already handle this correctly. Updated coding style of tests. bzr revid: tde@openerp.com-20130710132954-tnr75cf33nti8r1u --- addons/project/tests/test_project_flow.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'addons/project/tests/test_project_flow.py') 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)') -- cgit v1.2.3