mirror of
https://github.com/bringout/oca-ocb-project.git
synced 2026-04-20 01:42:02 +02:00
19.0 vanilla
This commit is contained in:
parent
a2f74aefd8
commit
4a4d12c333
844 changed files with 212348 additions and 270090 deletions
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from odoo.fields import Command
|
||||
from odoo.fields import Command, Datetime
|
||||
from odoo.exceptions import ValidationError
|
||||
from odoo.tests import tagged
|
||||
|
||||
|
|
@ -15,7 +15,7 @@ class TestTaskDependencies(TestProjectCommon):
|
|||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super().setUpClass()
|
||||
|
||||
cls.env.user.group_ids |= cls.env.ref('project.group_project_task_dependencies')
|
||||
cls.project_pigs.write({
|
||||
'allow_task_dependencies': True,
|
||||
})
|
||||
|
|
@ -80,89 +80,37 @@ class TestTaskDependencies(TestProjectCommon):
|
|||
self.assertEqual(len(self.task_2.depend_on_ids), 1, "The task 2 should have one dependency.")
|
||||
|
||||
# 4) Add task1 as dependency in task3 and check a validation error is raised
|
||||
with self.assertRaises(ValidationError), self.cr.savepoint():
|
||||
with self.assertRaises(ValidationError):
|
||||
self.task_3.write({
|
||||
'depend_on_ids': [Command.link(self.task_1.id)],
|
||||
})
|
||||
self.assertEqual(len(self.task_3.depend_on_ids), 0, "The dependency should not be added in the task 3 because of a cyclic dependency.")
|
||||
|
||||
# 5) Add task1 as dependency in task2 and check a validation error is raised
|
||||
with self.assertRaises(ValidationError), self.cr.savepoint():
|
||||
with self.assertRaises(ValidationError):
|
||||
self.task_2.write({
|
||||
'depend_on_ids': [Command.link(self.task_1.id)],
|
||||
})
|
||||
self.assertEqual(len(self.task_2.depend_on_ids), 1, "The number of dependencies should no change in the task 2 because of a cyclic dependency.")
|
||||
|
||||
def test_tracking_dependencies(self):
|
||||
# Enable the company setting
|
||||
self.env['res.config.settings'].create({
|
||||
'group_project_task_dependencies': True
|
||||
}).execute()
|
||||
# `depend_on_ids` is tracked
|
||||
self.task_1.with_context(mail_notrack=True).write({
|
||||
'depend_on_ids': [Command.link(self.task_2.id)]
|
||||
})
|
||||
self.cr.precommit.clear()
|
||||
# Check that changing a dependency tracked field in task_2 logs a message in task_1.
|
||||
self.task_2.write({'date_deadline': date(1983, 3, 1)}) # + 1 message in task_1 and task_2
|
||||
self.flush_tracking()
|
||||
self.assertEqual(len(self.task_1.message_ids), 1,
|
||||
'Changing the deadline on task 2 should have logged a message in task 1.')
|
||||
|
||||
# Check that changing a dependency tracked field in task_1 does not log a message in task_2.
|
||||
self.task_1.date_deadline = date(2020, 1, 2) # + 1 message in task_1
|
||||
self.flush_tracking()
|
||||
self.assertEqual(len(self.task_2.message_ids), 1,
|
||||
'Changing the deadline on task 1 should not have logged a message in task 2.')
|
||||
|
||||
# Check that changing a field that is not tracked at all on task 2 does not impact task 1.
|
||||
self.task_2.color = 100 # no new message
|
||||
self.flush_tracking()
|
||||
self.assertEqual(len(self.task_1.message_ids), 2,
|
||||
'Changing the color on task 2 should not have logged a message in task 1 since it is not tracked.')
|
||||
|
||||
# Check that changing multiple fields does not log more than one message.
|
||||
self.task_2.write({
|
||||
'date_deadline': date(2020, 1, 1),
|
||||
'kanban_state': 'blocked',
|
||||
}) # + 1 message in task_1 and task_2
|
||||
self.flush_tracking()
|
||||
self.assertEqual(len(self.task_1.message_ids), 3,
|
||||
'Changing multiple fields on task 2 should only log one message in task 1.')
|
||||
|
||||
def test_task_dependencies_settings_change(self):
|
||||
|
||||
def set_task_dependencies_setting(enabled):
|
||||
features_config = self.env["res.config.settings"].create({'group_project_task_dependencies': enabled})
|
||||
features_config.execute()
|
||||
|
||||
self.project_pigs.write({
|
||||
'allow_task_dependencies': False,
|
||||
})
|
||||
|
||||
# As the Project General Setting group_project_task_dependencies needs to be toggled in order
|
||||
# to be applied on the existing projects we need to force it so that it does not depends on anything
|
||||
# (like demo data for instance)
|
||||
set_task_dependencies_setting(False)
|
||||
set_task_dependencies_setting(True)
|
||||
self.assertTrue(self.project_pigs.allow_task_dependencies, "Projects allow_task_dependencies should follow group_project_task_dependencies setting changes")
|
||||
|
||||
# set group_project_task_dependencies(True)
|
||||
self.project_chickens = self.env['project.project'].create({
|
||||
'name': 'My Chicken Project'
|
||||
})
|
||||
self.assertTrue(self.project_chickens.allow_task_dependencies, "New Projects allow_task_dependencies should default to group_project_task_dependencies")
|
||||
|
||||
set_task_dependencies_setting(False)
|
||||
self.assertFalse(self.project_pigs.allow_task_dependencies, "Projects allow_task_dependencies should follow group_project_task_dependencies setting changes")
|
||||
self.assertFalse(self.project_chickens.allow_task_dependencies, "New Projects allow_task_dependencies should default to False")
|
||||
|
||||
# set group_project_task_dependencies(False)
|
||||
self.env.user.group_ids -= self.env.ref('project.group_project_task_dependencies')
|
||||
self.project_ducks = self.env['project.project'].create({
|
||||
'name': 'My Ducks Project'
|
||||
})
|
||||
self.assertFalse(self.project_ducks.allow_task_dependencies, "New Projects allow_task_dependencies should default to group_project_task_dependencies")
|
||||
self.assertFalse(self.project_ducks.allow_task_dependencies, "New Projects allow_task_dependencies should still default to False")
|
||||
|
||||
def test_duplicate_project_with_task_dependencies(self):
|
||||
self.project_pigs.allow_task_dependencies = True
|
||||
self.task_1.depend_on_ids = self.task_2
|
||||
self.task_1.date_deadline = Datetime.now()
|
||||
pigs_copy = self.project_pigs.copy()
|
||||
|
||||
task1_copy = pigs_copy.task_ids.filtered(lambda t: t.name == 'Pigs UserTask')
|
||||
|
|
@ -182,16 +130,21 @@ class TestTaskDependencies(TestProjectCommon):
|
|||
self.assertEqual(task1_copy_copy.depend_on_ids.ids, [self.task_1.id],
|
||||
"Copy should not alter the relation if the other task is in a different project")
|
||||
|
||||
self.project_pigs.allow_task_dependencies = False
|
||||
project_pigs_no_dep = self.project_pigs.copy()
|
||||
self.assertFalse(project_pigs_no_dep.allow_task_dependencies, 'The copied project should have the dependencies feature disabled')
|
||||
self.assertFalse(project_pigs_no_dep.task_ids.depend_on_ids, 'The copied task should not have any dependencies')
|
||||
self.assertFalse(project_pigs_no_dep.task_ids.dependent_ids, 'The copied task should not have any dependencies')
|
||||
|
||||
def test_duplicate_project_with_subtask_dependencies(self):
|
||||
self.project_goats.allow_task_dependencies = True
|
||||
self.project_goats.allow_subtasks = True
|
||||
parent_task = self.env['project.task'].with_context({'mail_create_nolog': True}).create({
|
||||
'name': 'Parent Task',
|
||||
'project_id': self.project_goats.id,
|
||||
'child_ids': [
|
||||
Command.create({'name': 'Node 1'}),
|
||||
Command.create({'name': 'SuperNode 2', 'child_ids': [Command.create({'name': 'Node 2'})]}),
|
||||
Command.create({'name': 'Node 3'}),
|
||||
Command.create({'name': 'Node 1', 'project_id': self.project_goats.id}),
|
||||
Command.create({'name': 'SuperNode 2', 'project_id': self.project_goats.id, 'child_ids': [Command.create({'name': 'Node 2', 'project_id': self.project_goats.id})]}),
|
||||
Command.create({'name': 'Node 3', 'project_id': self.project_goats.id}),
|
||||
],
|
||||
})
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue