Skip to content

Commit

Permalink
* **Fix:** Fixed a bug in Review.finalize_review_set() which caus…
Browse files Browse the repository at this point in the history
…es Task

  instances to not to get any status update if the revised task is a second
  degree dependee to that particular task.
  • Loading branch information
eoyilmaz committed Feb 13, 2015
1 parent 9070cc2 commit 0bd6da0
Show file tree
Hide file tree
Showing 4 changed files with 136 additions and 4 deletions.
7 changes: 7 additions & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@
Stalker Changes
===============

0.2.13.1
========

* **Fix:** Fixed a bug in ``Review.finalize_review_set()`` which causes Task
instances to not to get any status update if the revised task is a second
degree dependee to that particular task.

0.2.13
======

Expand Down
2 changes: 1 addition & 1 deletion stalker/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
See docs for more information.
"""

__version__ = '0.2.13'
__version__ = '0.2.13.1'


import sys
Expand Down
13 changes: 10 additions & 3 deletions stalker/models/review.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
from stalker.db import Base
from stalker.db.session import DBSession
from stalker.log import logging_level
from stalker.models import walk_hierarchy
from stalker.models.entity import Entity, SimpleEntity
from stalker.models.link import Link
from stalker.models.status import Status
Expand Down Expand Up @@ -281,16 +282,22 @@ def finalize_review_set(self):

self.task.update_parent_statuses()

from stalker import TaskDependency
# update dependent task statuses
for tdep in self.task.task_dependent_of:
dep = tdep.task

for dep in walk_hierarchy(self.task, 'dependent_of', method=1):
logger.debug('current TaskDependency object: %s' % dep)
dep.update_status_with_dependent_statuses()
if dep.status.code in ['HREV', 'PREV', 'DREV', 'OH', 'STOP']:
# for tasks that are still be able to continue to work,
# change the dependency_target to "onstart" to allow
# the two of the tasks to work together and still let the
# TJ to be able to schedule the tasks correctly
tdep.dependency_target = 'onstart'
tdeps = TaskDependency.query\
.filter_by(depends_to=dep).all()
for tdep in tdeps:
tdep.dependency_target = 'onstart'

# also update the status of parents of dependencies
dep.update_parent_statuses()

Expand Down
118 changes: 118 additions & 0 deletions tests/models/test_task_status_workflow.py
Original file line number Diff line number Diff line change
Expand Up @@ -1698,6 +1698,13 @@ def test_request_revision_in_CMPL_leaf_task_CMPL_dependent_task_dependency_targe
td = datetime.timedelta
now = dt.now()

# remove any TaskDependency instances
from stalker import TaskDependency
for i in TaskDependency.query.all():
db.DBSession.delete(i)

db.DBSession.commit()

self.test_task3.depends = [self.test_task9] # will be PREV
self.test_task4.depends = [self.test_task9] # will be HREV
self.test_task5.depends = [self.test_task9] # will be STOP
Expand Down Expand Up @@ -1868,6 +1875,117 @@ def test_request_revision_in_CMPL_leaf_task_dependent_task_parent_status_updated
self.assertEqual(self.test_asset1.status, self.status_wip)
self.assertEqual(self.test_task7.status, self.status_wip)

def test_request_revision_in_deeper_dependency_setup(self):
"""testing if all of the dependent task statuses are updated to DREV
properly
"""
# create a couple TimeLogs
dt = datetime.datetime
td = datetime.timedelta
now = dt.now()

# remove any TaskDependency instances
from stalker import TaskDependency
for i in TaskDependency.query.all():
db.DBSession.delete(i)

db.DBSession.commit()

self.test_task5.depends = []
self.test_task6.depends = [self.test_task5]
self.test_task3.depends = [self.test_task6]
self.test_task8.depends = [self.test_task3]
self.test_task9.depends = [self.test_task8]

self.test_task5.update_status_with_dependent_statuses()
self.test_task6.update_status_with_dependent_statuses()
self.test_task3.update_status_with_dependent_statuses()
self.test_task8.update_status_with_dependent_statuses()
self.test_task9.update_status_with_dependent_statuses()

self.assertEqual(self.test_task5.status, self.status_rts)
self.assertEqual(self.test_task6.status, self.status_wfd)
self.assertEqual(self.test_task3.status, self.status_wfd)
self.assertEqual(self.test_task3.status, self.status_wfd)
self.assertEqual(self.test_task3.status, self.status_wfd)
db.DBSession.commit()

# complete each of them first
# test_task5
self.test_task5.create_time_log(
self.test_task5.resources[0],
now - td(hours=1),
now
)
self.test_task5.schedule_timing = 1
self.test_task5.schedule_unit = 'h'
self.test_task5.status = self.status_cmpl

# test_task6
self.test_task6.status = self.status_rts
self.test_task6.create_time_log(
self.test_task6.resources[0],
now,
now + td(hours=1)
)
self.test_task6.schedule_timing = 1
self.test_task6.schedule_unit = 'h'
self.test_task6.status = self.status_cmpl

# test_task3
self.test_task3.status = self.status_rts
self.test_task3.create_time_log(
self.test_task3.resources[0],
now + td(hours=1),
now + td(hours=2)
)
self.test_task3.schedule_timing = 1
self.test_task3.schedule_unit = 'h'
self.test_task3.status = self.status_cmpl

# test_task8
self.test_task8.status = self.status_rts
self.test_task8.create_time_log(
self.test_task8.resources[0],
now + td(hours=2),
now + td(hours=3)
)
self.test_task8.schedule_timing = 1
self.test_task8.schedule_unit = 'h'
self.test_task8.status = self.status_cmpl

# test_task9
self.test_task9.status = self.status_rts
self.test_task9.create_time_log(
self.test_task9.resources[0],
now + td(hours=3),
now + td(hours=4)
)
self.test_task9.schedule_timing = 1
self.test_task9.schedule_unit = 'h'
self.test_task9.status = self.status_cmpl

# now request a revision to the first task (test_task6)
# and expect all of the task dependency targets to be turned
# in to "onstart"
self.test_task6.request_revision(
self.test_user1
)

self.assertEqual(
self.test_task6.task_depends_to[0].dependency_target, 'onend'
)
self.assertEqual(
self.test_task3.task_depends_to[0].dependency_target, 'onstart'
)
self.assertEqual(
self.test_task8.task_depends_to[0].dependency_target, 'onstart'
)
self.assertEqual(
self.test_task9.task_depends_to[0].dependency_target, 'onstart'
)


# hold
# WFD
def test_hold_in_WFD_leaf_task(self):
Expand Down

0 comments on commit 0bd6da0

Please sign in to comment.